操作系統(tǒng):(Operating System,簡稱OS)是管理和控制計算機硬件與軟件資源的計算機程序,是直接運行在“裸機”上的最基本的系統(tǒng)軟件,,任何其他軟件都必須在操作系統(tǒng)的支持下才能運行。
注:計算機(硬件)---->OS----->應(yīng)用軟件
基本組成:
速率
帶寬
吞吐量
時延
發(fā)送時延
傳播時延
排隊時延和處理時延
時延帶寬積
往返時間
表示從發(fā)送端發(fā)送數(shù)據(jù)開始,,到發(fā)送端接收到來自接收端的確認(rèn)(發(fā)送端收到確認(rèn)立即發(fā)送確認(rèn)),總共經(jīng)歷的時間,;
利用率
協(xié)議: 是網(wǎng)絡(luò)中計算機或設(shè)備之間進(jìn)行通信的一系列規(guī)則的集合,。網(wǎng)絡(luò)協(xié)議的作用主要有兩個:一是建立對等層之間的虛擬通信,二是實現(xiàn)層次之間的無關(guān)性,。
協(xié)議棧: 在網(wǎng)絡(luò)中,,為了完成通信,必須使用多層上的多種協(xié)議,。這些協(xié)議按照層次順序組合在一起,,構(gòu)成了協(xié)議棧(Protocol Stack),也稱為協(xié)議族(Protocol Suite),。
層次間的無關(guān)性: 所謂層次間無關(guān)性,,就是指較高層次和相鄰的相低層次進(jìn)行通信時,只是利用較低層次提供的接口和服務(wù),,而不需了解底層實現(xiàn)該功能所采用的算法和協(xié)議的細(xì)節(jié),;較低層次也僅是使用從高層系統(tǒng)傳送來的參數(shù)和控制信息,這就是層次間的無關(guān)性,。
(1)底層的物理連接介質(zhì),,是為通信鋪好道路的
(2)一套統(tǒng)一的通信標(biāo)準(zhǔn)---->互聯(lián)網(wǎng)通信協(xié)議(計算機界的英語)
互聯(lián)網(wǎng)協(xié)議按照功能不同分為osi七層或tcp/ip五層或tcp/ip四層
用戶感知到的只是最上面一層應(yīng)用層,,自上而下每層都依賴于下一層,,所以我們從最下一層開始切入,比較好理解
用戶在用戶層輸入命令(數(shù)據(jù)),,到傳輸層包上tcp協(xié)議頭,,再到網(wǎng)絡(luò)層包裹上ip頭,再到數(shù)據(jù)鏈路層包上以太網(wǎng)頭,,通過client物理層經(jīng)過線路被server物理層接收,,然后一層層反解到server的應(yīng)用層,server應(yīng)用層拿到命令后請求操作系統(tǒng)去調(diào)用硬盤里面的數(shù)據(jù),,最后再返回到數(shù)據(jù)層,。
數(shù)據(jù)(可以加http協(xié)議等)----》傳輸層(包上tcp/udp協(xié)議)----》網(wǎng)絡(luò)層(包上ip協(xié)議)----》數(shù)據(jù)鏈接層(包上以太網(wǎng)協(xié)議)----》物理層
底層物理連接介質(zhì)。負(fù)責(zé)發(fā)送電信號高電壓對應(yīng)數(shù)字1,,低電壓對應(yīng)數(shù)字0,。兩個物理層通過光纜電纜雙絞纜等介質(zhì)連接
數(shù)據(jù)鏈路層的功能:定義了電信號的分組方式
ethernet規(guī)定
一組電信號構(gòu)成一個數(shù)據(jù)包,,叫做‘幀’
每一數(shù)據(jù)幀分成:報頭head(固定18個字節(jié))和數(shù)據(jù)data兩部分
數(shù)據(jù)包的具體內(nèi)容
head長度+data長度=最短64字節(jié),,最長1518字節(jié),超過最大限制就分片發(fā)送
mac地址(網(wǎng)卡的地址,,接入internet的設(shè)備都必須有網(wǎng)卡,,即可找到某個具體的設(shè)備):
head中包含的源和目標(biāo)地址由來:ethernet規(guī)定接入internet的設(shè)備都必須具備網(wǎng)卡,發(fā)送端和接收端的地址便是指網(wǎng)卡的地址,,即mac地址
廣播:
有了mac地址,,同一網(wǎng)絡(luò)內(nèi)的兩臺主機就可以通信了(一臺主機通過arp協(xié)議獲取另外一臺主機的mac地址,該主機再回應(yīng)時就不用吼了,,交換機的‘學(xué)習(xí)’特性)
pc1通過廣播方式發(fā)送以太網(wǎng)包給pc2,pc3,pc4,pc5,,大家收到pc1發(fā)來的包,拆開后如果發(fā)現(xiàn)不是自己的就丟棄,,是自己的就響應(yīng),,并返回給pc1自己的mac地址。
網(wǎng)絡(luò)層功能: 引入一套新的地址用來區(qū)分不同的廣播域/子網(wǎng),這套地址即網(wǎng)絡(luò)地址
IP協(xié)議:
規(guī)定網(wǎng)絡(luò)地址的協(xié)議叫ip協(xié)議,,它定義的地址稱之為ip地址,,廣泛采用的v4版本即ipv4,它規(guī)定網(wǎng)絡(luò)地址由32位2進(jìn)制表示
范圍0.0.0.0-255.255.255.255
一個ip地址通常寫成四段十進(jìn)制數(shù),,例:172.16.10.1
標(biāo)識地址的方式:
ip+mac就能標(biāo)識全世界范圍內(nèi)獨一無二的一臺計算機
ip+mac+port就能標(biāo)識全世界范圍內(nèi)獨一無二的一個基于網(wǎng)絡(luò)通信的應(yīng)用軟件
url地址:標(biāo)識全世界范圍內(nèi)獨一無二的一個資源
ARP協(xié)議:
arp協(xié)議功能:廣播的方式發(fā)送數(shù)據(jù)包,,獲取目標(biāo)主機的mac地址
協(xié)議工作方式:每臺主機ip都是已知的
例如:主機172.16.10.10/24訪問172.16.10.11/24
一:首先通過ip地址和子網(wǎng)掩碼區(qū)分出自己所處的子網(wǎng),子網(wǎng)掩碼固定為255.255.255.0(1111 1111.1111 1111.1111 1111.0000 0000),,即取ip的前三段,,以此判斷是不是在同一個子網(wǎng)
場景 數(shù)據(jù)包地址
同一子網(wǎng) 目標(biāo)主機mac,目標(biāo)主機ip
不同子網(wǎng) 網(wǎng)關(guān)mac,,目標(biāo)主機ip
二:分析172.16.10.10/24與172.16.10.11/24處于同一網(wǎng)絡(luò)(如果不是同一網(wǎng)絡(luò),,那么下表中目標(biāo)ip為172.16.10.1,通過arp獲取的是網(wǎng)關(guān)的mac)
源mac 目標(biāo)mac 源ip 目標(biāo)ip 數(shù)據(jù)部分
發(fā)送端主機 發(fā)送端mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24 數(shù)據(jù)
三:這個包會以廣播的方式在發(fā)送端所處的自網(wǎng)內(nèi)傳輸,所有主機接收后拆開包,,發(fā)現(xiàn)目標(biāo)ip為自己的,,就響應(yīng),返回自己的mac
傳輸層的由來: 網(wǎng)絡(luò)層的ip幫我們區(qū)分子網(wǎng),,以太網(wǎng)層的mac幫我們找到主機,,然后大家使用的都是應(yīng)用程序,你的電腦上可能同時開啟qq,暴風(fēng)影音,,等多個應(yīng)用程序,,那么我們通過ip和mac找到了一臺特定的主機,如何標(biāo)識這臺主機上的應(yīng)用程序,,答案就是端口,,端口即應(yīng)用程序與網(wǎng)卡關(guān)聯(lián)的編號。
傳輸層功能: 建立端口到端口的通信
補充: 端口范圍0-65535,,0-1023為系統(tǒng)占用端口,,1024-65535給軟件用
tcp協(xié)議(可靠傳輸):
以太網(wǎng)頭-------ip 頭---------tcp頭---------數(shù)據(jù)
udp協(xié)議(不可靠傳輸):
以太網(wǎng)頭-------ip 頭---------udp頭---------數(shù)據(jù)
注意: MAC地址由48位二進(jìn)制數(shù)組成,,在Windows操作系統(tǒng)命令提示符下,, 輸入"ipconfig / all"能夠看到計算機網(wǎng)卡的MAC地址,物理地址… : C8-60-00-2E-6E-EB,,這里顯示的是十六進(jìn)制表示的MAC地址,,使用MA和MB代替MAC地址是為了簡化說明。
目標(biāo)MAC地址決定了數(shù)據(jù)幀下一跳由哪個設(shè)備接收,;
目標(biāo)IP地址決定了數(shù)據(jù)包最終到達(dá)那個計算機,;
不同的網(wǎng)絡(luò)數(shù)據(jù)鏈路層使用不同的協(xié)議,幀格式也不相同,,路由器在不同網(wǎng)絡(luò)轉(zhuǎn)發(fā)數(shù)據(jù)包,,需要將數(shù)據(jù)包重新封裝;
數(shù)據(jù)封裝和解封(數(shù)據(jù)傳輸)
網(wǎng)絡(luò)通信協(xié)議的作用是負(fù)責(zé)在網(wǎng)絡(luò)上建立通信通道和控制通過通道的信息流的規(guī)則,。為了進(jìn)行網(wǎng)絡(luò)通信,,通信雙方必須遵守通信協(xié)議
Telnet協(xié)議
Telnet是TCP/IP中的一種應(yīng)用協(xié)議,可以為終端仿真提供支持,??墒褂脩暨B接到主機上,使主機響應(yīng)起來就像它直接連接在終端上一樣,。Telnet在發(fā)送端和接收端使用TCP的23號端口以進(jìn)行專用的通信,。
FTP協(xié)議
FTP協(xié)議使用TCP20號和21號端口,20號端口用于數(shù)據(jù)交換,,21號端口用于建立連接,,允許目錄和文件訪問,上傳下載,,不能遠(yuǎn)程執(zhí)行文件,。
TFTP是簡單文件傳輸協(xié)議(Trivial File Transfer Protocol,TFTP),,TFTP是無連接的,,使用UDP的69號端口,,用于當(dāng)數(shù)據(jù)傳輸錯誤無關(guān)緊要而且無須安全性時的小型文件的傳輸。
SMTP協(xié)議
SMTP是簡單郵件傳輸協(xié)議(Simple Mail Transfer Protocol,,SMTP)是為網(wǎng)絡(luò)系統(tǒng)間的電子郵件交換而設(shè)計的,。使用 25 端口。SMTP只需要在接收端的一個電子郵件地址即可發(fā)送郵件,。POP3 協(xié)議用來接收郵件.使用110端口
DNS服務(wù)
DNS是域名解析服務(wù)(Domain Name Service, DNS),,作用是將域名轉(zhuǎn)換為IP地址,或?qū)P地址轉(zhuǎn)換為域名,,用于解析完全合格域名(FQDN),。使用53號端口。
序列號seq: 占4個字節(jié),,用來標(biāo)記數(shù)據(jù)段的順序,,TCP把連接中發(fā)送的所有數(shù)據(jù)字節(jié)都編上一個序號,第一個字節(jié)的編號由本地隨機產(chǎn)生,;給字節(jié)編上序號后,,就給每一個報文段指派一個序號;序列號seq就是這個報文段中的第一個字節(jié)的數(shù)據(jù)編號,。
確認(rèn)號ack: 占4個字節(jié),,期待收到對方下一個報文段的第一個數(shù)據(jù)字節(jié)的序號;序列號表示報文段攜帶數(shù)據(jù)的第一個字節(jié)的編號,;而確認(rèn)號指的是期望接收到下一個字節(jié)的編號,;因此當(dāng)前報文段最后一個字節(jié)的編號+1即為確認(rèn)號。
確認(rèn)ACK: 占1位,,僅當(dāng)ACK=1時,,確認(rèn)號字段才有效。ACK=0時,,確認(rèn)號無效
同步SYN: 連接建立時用于同步序號。當(dāng)SYN=1,,ACK=0時表示:這是一個連接請求報文段,。若同意連接,則在響應(yīng)報文段中使得SYN=1,,ACK=1,。因此,SYN=1表示這是一個連接請求,,或連接接受報文,。SYN這個標(biāo)志位只有在TCP建產(chǎn)連接時才會被置1,握手完成后SYN標(biāo)志位被置0,。
終止FIN: 用來釋放一個連接,。FIN=1表示:此報文段的發(fā)送方的數(shù)據(jù)已經(jīng)發(fā)送完畢,并要求釋放運輸連接
源端口號: 表示發(fā)送端端口號,字段長為16位,。
目標(biāo)端口號: 表示接收端口號,,字段長為16位。
首部長度: 該字段長度為4位,,單位為4字節(jié)(32位),。TCP首部長度不包括選項的話,是20個字節(jié),,20/4=5,,5的二進(jìn)制序列:0101,報頭長度也叫數(shù)據(jù)偏移,,所以該字段可以設(shè)置為5,,選項字段最大的是40字節(jié),所以,,TCP首部長度為最大為20+40=60字節(jié),,該字段可以設(shè)置的最大長度為60/4=15。
保留: 該字段主要是為了以后擴展時使用,,其長度為4位,。一般設(shè)置為0,即使收到的包在該字段不為0,,此包也不會丟棄,。
控制位: 字段長為6,每一位從左到右分別為:URG,、ACK,、PSH、RST,、SYN,、FIN。當(dāng)對應(yīng)的值為1,,表示有具體含義,。
窗口大小: 接收緩沖區(qū)的大小,,TCP不允許發(fā)送超過此處所示大小的數(shù)據(jù),。
校驗和: 發(fā)送端填充,CRC校驗,,接收校驗不通過,,則認(rèn)為數(shù)據(jù)有問題。和UDP的區(qū)別是,,UDP校驗的是數(shù)據(jù)本身,,TCP校驗的不僅包含TCP首部,,而且包含TCP數(shù)據(jù)部分。
緊急指針: 只有在URG為1時有效,,該字段為1表示本報文的段中的緊急數(shù)據(jù)的指針,。
選項: 用于提高TCP的傳輸性能。需要根據(jù)首部長度進(jìn)行控制,,其最大長度為40字節(jié),。
第一次握手: 建立連接時,客戶端發(fā)送syn包(syn=j)到服務(wù)器,,并進(jìn)入SYN_SENT狀態(tài),,等待服務(wù)器確認(rèn);SYN:同步序列編號(Synchronize Sequence Numbers),。
第二次握手: 服務(wù)器收到syn包,,必須確認(rèn)客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),,即SYN+ACK包,,此時服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手: 客戶端收到服務(wù)器的SYN+ACK包,,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),,此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài),,完成三次握手,。
1)客戶端進(jìn)程發(fā)出連接釋放報文,并且停止發(fā)送數(shù)據(jù),。釋放數(shù)據(jù)報文首部,,F(xiàn)IN=1,其序列號為seq=u(等于前面已經(jīng)傳送過來的數(shù)據(jù)的最后一個字節(jié)的序號加1),,此時,,客戶端進(jìn)入FIN-WAIT-1(終止等待1)狀態(tài)。 TCP規(guī)定,,F(xiàn)IN報文段即使不攜帶數(shù)據(jù),,也要消耗一個序號。
2)服務(wù)器收到連接釋放報文,,發(fā)出確認(rèn)報文,ACK=1,,ack=u+1,,并且?guī)献约旱男蛄刑杝eq=v,此時,,服務(wù)端就進(jìn)入了CLOSE-WAIT(關(guān)閉等待)狀態(tài),。TCP服務(wù)器通知高層的應(yīng)用進(jìn)程,,客戶端向服務(wù)器的方向就釋放了,這時候處于半關(guān)閉狀態(tài),,即客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送了,,但是服務(wù)器若發(fā)送數(shù)據(jù),客戶端依然要接受,。這個狀態(tài)還要持續(xù)一段時間,,也就是整個CLOSE-WAIT狀態(tài)持續(xù)的時間。
3)客戶端收到服務(wù)器的確認(rèn)請求后,,此時,,客戶端就進(jìn)入FIN-WAIT-2(終止等待2)狀態(tài),等待服務(wù)器發(fā)送連接釋放報文(在這之前還需要接受服務(wù)器發(fā)送的最后的數(shù)據(jù)),。
4)服務(wù)器將最后的數(shù)據(jù)發(fā)送完畢后,,就向客戶端發(fā)送連接釋放報文,F(xiàn)IN=1,,ack=u+1,,由于在半關(guān)閉狀態(tài),服務(wù)器很可能又發(fā)送了一些數(shù)據(jù),,假定此時的序列號為seq=w,,此時,服務(wù)器就進(jìn)入了LAST-ACK(最后確認(rèn))狀態(tài),,等待客戶端的確認(rèn),。
5)客戶端收到服務(wù)器的連接釋放報文后,必須發(fā)出確認(rèn),,ACK=1,,ack=w+1,而自己的序列號是seq=u+1,,此時,,客戶端就進(jìn)入了TIME-WAIT(時間等待)狀態(tài)。注意此時TCP連接還沒有釋放,,必須經(jīng)過2∗∗MSL(最長報文段壽命)的時間后,,當(dāng)客戶端撤銷相應(yīng)的TCB后,才進(jìn)入CLOSED狀態(tài),。
6)服務(wù)器只要收到了客戶端發(fā)出的確認(rèn),,立即進(jìn)入CLOSED狀態(tài)。同樣,,撤銷TCB后,,就結(jié)束了這次的TCP連接??梢钥吹?,服務(wù)器結(jié)束TCP連接的時間要比客戶端早一些,。
因為當(dāng)Server端收到Client端的SYN連接請求報文后,,可以直接發(fā)送SYN+ACK報文。其中ACK報文是用來應(yīng)答的,,SYN報文是用來同步的,。但是關(guān)閉連接時,當(dāng)Server端收到FIN報文時,,很可能并不會立即關(guān)閉SOCKET,,所以只能先回復(fù)一個ACK報文,告訴Client端,,“你發(fā)的FIN報文我收到了”,。只有等到我Server端所有的報文都發(fā)送完了,我才能發(fā)送FIN報文,,因此不能一起發(fā)送,。故需要四步握手。
MSL即Maximum Segment Lifetime,,就是最大報文生存時間,是任何報文在網(wǎng)絡(luò)上的存在的最長時間,,超過這個時間報文將被丟棄,。《TCP/IP詳解》中是這樣描述的:MSL是任何報文段被丟棄前在網(wǎng)絡(luò)內(nèi)的最長時間,。RFC 793中規(guī)定MSL為2分鐘,,實際應(yīng)用中常用的是30秒、1分鐘,、2分鐘等,。
TCP的TIME_WAIT需要等待2MSL,當(dāng)TCP的一端發(fā)起主動關(guān)閉,,三次揮手完成后發(fā)送第四次揮手的ACK包后就進(jìn)入這個狀態(tài),,等待2MSL時間主要目的是:防止最后一個ACK包對方?jīng)]有收到,那么對方在超時后將重發(fā)第三次握手的FIN包,,主動關(guān)閉端接到重發(fā)的FIN包后可以再發(fā)一個ACK應(yīng)答包,。在TIME_WAIT狀態(tài)時兩端的端口不能使用,要等到2MSL時間結(jié)束才可以繼續(xù)使用,。當(dāng)連接處于2MSL等待階段時任何遲到的報文段都將被丟棄,。
我們來分析一種特殊情況,,假設(shè)客戶端請求建立連接,,發(fā)給服務(wù)器SYN包等待服務(wù)器確認(rèn),服務(wù)器收到確認(rèn)后,,如果是兩次握手,,假設(shè)服務(wù)器給客戶端在第二次握手時發(fā)送數(shù)據(jù),數(shù)據(jù)從服務(wù)器發(fā)出,,服務(wù)器認(rèn)為連接已經(jīng)建立,,但在發(fā)送數(shù)據(jù)的過程中數(shù)據(jù)丟失,客戶端認(rèn)為連接沒有建立,,會進(jìn)行重傳,。假設(shè)每次發(fā)送的數(shù)據(jù)一直在丟失,客戶端一直SYN,,服務(wù)器就會產(chǎn)生多個無效連接,,占用資源,這個時候服務(wù)器可能會掛掉,。這個現(xiàn)象就是我們聽過的“SYN的洪水攻擊”,。
總結(jié):第三次握手是為了防止:如果客戶端遲遲沒有收到服務(wù)器返回確認(rèn)報文,這時會放棄連接,,重新啟動一條連接請求,,但問題是:服務(wù)器不知道客戶端沒有收到,所以他會收到兩個連接,,浪費連接開銷,。如果每次都是這樣,就會浪費多個連接開銷,。
TCP還設(shè)有一個?;钣嫊r器,,顯然,客戶端如果出現(xiàn)故障,,服務(wù)器不能一直等下去,,白白浪費資源。服務(wù)器每收到一次客戶端的請求后都會重新復(fù)位這個計時器,,時間通常是設(shè)置為2小時,,若兩小時還沒有收到客戶端的任何數(shù)據(jù),服務(wù)器就會發(fā)送一個探測報文段,,以后每隔75秒鐘發(fā)送一次,。若一連發(fā)送10個探測報文仍然沒反應(yīng),,服務(wù)器就認(rèn)為客戶端出了故障,接著就關(guān)閉連接,。
雙方關(guān)閉連接要經(jīng)過雙方都同意,。所以,首先是客服端給服務(wù)器發(fā)送FIN,,要求關(guān)閉連接,,服務(wù)器收到后會發(fā)送一個ACK進(jìn)行確認(rèn)。服務(wù)器然后再發(fā)送一個FIN,,客戶端發(fā)送ACK確認(rèn),,并進(jìn)入TIME_WAIT狀態(tài)。等待2MSL后自動關(guān)閉,。
總結(jié):
(1)為了保證客戶端發(fā)送的最后一個ACK報文段能夠到達(dá)服務(wù)器,。即最后一個確認(rèn)報文可能丟失,服務(wù)器會超時重傳,,然后服務(wù)器發(fā)送FIN請求關(guān)閉連接,,客戶端發(fā)送ACK確認(rèn)。一個來回是兩個報文生命周期,。
如果沒有等待時間,,發(fā)送完確認(rèn)報文段就立即釋放連接的話,服務(wù)器就無法重傳,,因此也就收不到確認(rèn),,就無法按步驟進(jìn)入CLOSED狀態(tài),即必須收到確認(rèn)才能close,。
(2)防止已經(jīng)失效的連接請求報文出現(xiàn)在連接中,。經(jīng)過2MSL,在這個連續(xù)持續(xù)的時間內(nèi),,產(chǎn)生的所有報文段就可以都從網(wǎng)絡(luò)消失,。