《圖解TCP與IP》之要點提煉

基礎

OSI七層結構

7.應用層:負責使用特殊的協議
6.表示層:將數據轉換爲標準的形式
5.會話層:通信管理,負責建立連接與斷開連接的時機(考慮什麼時候開始連接,以哪種方式連接)
4.傳輸層:負責可靠傳輸,進行實際的建立連接與斷開連接
3.網絡層:地址管理和路由選取,選取哪條路由來傳輸數劇
2.數據鏈路層:負責物理層面上的互聯
1.物理層:將0,1轉換爲物理介質

例子: 主機A要向主機B發送一個早上好。
在這裏插入圖片描述
應用層:在發送端會在所發送信息前附加一個首部。在接收端會分析其數據首部以及收據正文,並將由郵件存儲。
表示層:發送端將"早上好"轉換成網絡通用的數據格式,在接收端將網絡通用的數據格式轉換爲該計算機特定的數據格式。
會話層:會話層判斷如何高效地進行數據交互、採用何種方式傳輸。
連接層:由連接層建立實際的連接與斷開連接,同時保持數據的可靠性:如果在接收端數據沒有完全到達,則會重發。
網絡層:基於目的地址,在網絡層進行數據包的發送處理。
數據鏈路層:通過傳輸介質互連的設備之間進行數據處理。
物理層:將數據的0,1轉換爲電壓和脈衝光,而相互直連的設備之間使用地址傳輸。

爲什麼有了MAC地址還要有IP地址

MAC地址與IP地址相比,IP地址具有層次性。

電路交換與分組交換

在電路交換時,當計算機在收發消息時,會獨佔整個電路,而其他計算機只能等待它處理結束後纔可以使用這條電路。而分組通信中將計算機所要發送的數據分成多個組,按順序的發送消息。同時,分組的首部有發送者和接收者的地址,允許同一條線路同時爲多個用戶提供服務,這樣就提高了通信線路的利用率

在分組交換中由路由器連接通信線路。分組交換的大致過程爲:發送端計算機將數據分組發送到路由器,路由器將數據緩存到自己的緩衝區,然後在轉發給目標計算機。
在這裏插入圖片描述

TCP/IP的四層結構

四層結構

應用層、傳輸層、網絡層、網絡接口層(物理層和數據鏈路層)。
在這裏插入圖片描述
網絡接口層利用以太網中的數據鏈路進行通信

網絡層基於IP地址轉發分包數據。其中包括協議:IP協議(使用IP地址作爲唯一標識,雖然是分組交換的協議,但不具有重發的功能,屬於非可靠性傳輸機制)、ICMP協議:用於當數據包發送失敗時,返回給發送者異常的協議。ARP協議:(Address resloution protocol)用於將數據包中IP地址中的MAC地址解析出來。

傳輸層讓應用程序之間實現通信。其中包括協議:TCP協議/UDP協議。TCP協議這裏簡單介紹爲有連接的傳輸協議,可以有效利用帶寬,緩解網絡擁堵;而UDP爲無連接(不關注對端是否接收到了信息)的傳輸協議,適用於視頻通信等多媒體領域

應用層實現了OSI模型中的應用層、表示層、會話層的功能。其中包含協議:HTTP(用於瀏覽器與服務端通信),SMTP(simple Mail Transfer Protocol用於郵件的協議),FTP(file transfer protocol,用於文件的協議),TELNET、SSH協議(遠程登錄協議)、SNMP(simple Network Manger protocol網絡管理協議)

TCP/IP傳輸實例

發送數據包

(1)應用程序處理:編碼處理,並開始建立TCP連接;

(2)TCP模塊處理:負責建立連接,發送數據域斷開連接;並在應用層前端加上TCP首部;

(3)IP模塊處理:IP將TCP模塊發來的TCP首部與數據當做數據,並在TCP首部前加上IP首部;IP包生成後,參考路由控制表決定接受此IP包的路由或主機,隨後將發送給這些路由或主機的驅動程序。如果沒有MAC地址,將通過ARP協議查找。擁有了MAC地址和IP地址就可以交給以太網的驅動程序。

(4)網絡接口的處理:在IP模塊傳來的IP包前加上以太網首部,並進行發送處理。通過物理層傳輸發送給接收者
在這裏插入圖片描述

數據包

每層協議都會對所發送的數據前面加上一個首部,其中包括髮送端與接送端的地址,以及協議信息。在發送端時,從上往下傳輸的過程中,會直接把發過來的數據包當做內容,直接在前面加上自己的首部。下圖分別是網絡接口層、網絡層、傳輸層。
在這裏插入圖片描述
注意:這裏的首部至少都會包含兩個信息:發送端與接收端的地址,上一層的協議類型。對於
發送端和接收端的地址
,以太網中用的是MAC地址,IP會用IP地址,而TCP中使用的是識別兩端主機的地址(端口號)此外,每個分組包的首部都會帶有標識位,它是用來標識上一層協議的種類信息
在這裏插入圖片描述

TCP與UDP

有連接與無連接

在這裏插入圖片描述
面向有連接時,在發送數據之前,需要在收發主機之間連接一條通信線路。也就是說,在通信傳輸後,要專門進行建立和斷開連接的處理。如果與對端之間無法通信,就可以避免發送無謂的數據

面向無連接時,則不要求建立連接和斷開連接,發送端可以由任何時候自由地發送數據。即使接收端不存在或無法接受數據,發送端也會將數據發送。

TCP

TCP是面向連接的,可靠的流協議。TCP爲提供可靠性傳輸,實行順序控制重發控制機制,此外還具有流控制擁塞控制提高網絡利用率等諸多功能。

通過序列號與確認應答提高可靠性

當數據從A發送到主機B時,主機B會返回主機A一個確認應答(ACK)
在這裏插入圖片描述
在一定時間內,沒有收到確認應答,則認爲數據丟失,需要重新發數據,因此即使丟包,仍然能保證數據到達對端。
在這裏插入圖片描述
但未收到應答,不代表是數據丟包,也可能是應答在傳輸回去的時候丟失。這種情況也會導致發送端重新發送數據。在這種情況下接收端會判斷已經接收到1-1000的數據而放棄接收。
在這裏插入圖片描述
TCP中使用序列號來完成應答與判斷是否接受過相同數據。

  • 序列號是按順序給發送的每一個字節都標上號碼的編號。
  • 接收端查詢接收數據TCP的首部與數據長度,將自己下一步要接收的數據作爲應答返送回發送端。

這裏要注意:ACK只是TCP包中ACK標誌位爲1,而具體的應答值在序列ack中(比如已經接收到了1-1000,下一次期望接收的數據就是從1001開始)
在這裏插入圖片描述

重發超時的確定

**重發超時是指當應答沒有收到的時間超過多久時需要重發數據。**會在每次發包之前計算往返時間與計算偏差,並將二者求和後,變成重發超時。

根據網絡環境的不同可能會對往返時間造成較大影響,之所以造成這種情況的原因是因爲分組的數據包是在不同的線路中到達的。一般的重發超時設置爲0.5s的整數倍,初始一般爲6s。
在這裏插入圖片描述
數據在重發之後,如果還是沒有收到應答會再次發送;但不會始終重複發送,達到一定次數後,仍然沒有應答就會強制關閉連接。

建立連接(三次握手,發的是三個數據包)

TCP在傳輸數據前必須要建立連接。

位碼即tcp標誌位,有6種標示:SYN(synchronous建立聯機) **ACK(**acknowledgement 確認位) PSH(push傳送) FIN(finish結束位) RST(reset重置) URG(urgent緊急)Sequence number(序號) Acknowledge number(確認號碼)。

可以理解seq序號是傳送數據時的第一個數據字節。ack是確認號,也就是ACK返回的具體序號,也就是期待下一次發送數據包時數據的第一個字節的序號。

三次握手(會發送三個包)過程如下:
第一次握手:首先發送端會發送一個(SYN位爲1,seq序列號爲當前第一個數據字節(以k爲例))的數據包到接收端嘗試與接收端建立連接;

第二次握手:接收端會返回發送端一個(ACK位爲1,ack位(確認號)等於seq值+1,seq位爲當前第一個數據字節(以N爲例),SYN位爲1)的數據包;

第三次握手:會檢查返回的數據包中ACK位是否爲1且ack確認號是否爲k+1,正確的話,發送端將發送給接收端一個數據包(ACK=1,ack=N+1)返回接收端。接收端會判斷是否ACK=1且ack爲N+1,全部正確的話則建立連接,可以發送數據。
在這裏插入圖片描述
引申:爲什麼不是兩次握手呢?
爲了防止發送端的連接請求受到延遲到達接收端,而接收端誤以爲這是一個連接請求,而發送迴應答,如果僅是兩次握手的應答就開始連接的話,此時發送端不會向接收端發送數據,就會造成資源浪費。而如果是三次握手,當服務端沒有收到客戶端應答服務端的應答時,就不會建立連接

TCP以段爲單位發送數據(MSS最大消息長度)

在建立連接時,也可以確定發送數據包的單位。我們稱其爲MSS(最大消息長度)。兩端的主機在三次握手時,會在TCP首部寫入MSS,告訴對方能夠自己所能適應的MSS大小,最終MSS會選擇二者中較少的那個。
TCP在發送大量數據時,是以MSS的大小進行分割的,進行重發時,也是以MSS爲單位重發。
在這裏插入圖片描述

利用窗口控制提高速度(窗口內每段數據無需等待前一段的應答)

TCP以一個段爲傳輸的單位來發送數據,這樣的話在發送下一段數據之前需要收到第一段的應答(ACK)。這樣段越長,就會導致等待時間越長。
在這裏插入圖片描述
TCP中設置了滑動窗口這個概念,**在窗口中的數據,可以不用等待前一段數據的確認應答,直接發送到發送端。**以窗口爲4000爲例,1-1000,1001-2000,20001-3000,3001-4000可以直接按順序發送。而當1001這個確認應答返回後,纔可以繼續發送下一個窗口的數據(4001-5000)
在這裏插入圖片描述
可以看到上圖中窗口中分爲四個段,窗口中未發送的及未收到應答的都要在發送端的緩衝區緩存,當收到確認應答後,纔可以清除。
下圖爲窗口的滑動。
在這裏插入圖片描述

窗口控制與重發控制(根據後面的應答可以確定前面,快重傳:三次重傳)

首先窗口控制沒有確認應答也不受影響。例子爲1001這個應答沒有返回,但返回了2001應答,就可以證明當前接收端已經接受了1-2000的數據。
在這裏插入圖片描述
當接收主機接收到的數據與應該接收的信息不同時,會根據當前所接收到的數據返回確認應答(比如下圖中一直沒有接收到1001-2000,所以即使接收到了2001-3000,之後仍然返回1001);同時即使接收端接收的數據包序列號不連續,也不會丟棄,而是暫時存在緩存區。

**高速重發控制(快啓動)**的概念:當發送端主機連續三次接收到相同的應答,就會將所對應的數據重傳。
在這裏插入圖片描述

流控制(根據返回值動態調整窗口大小)

發送端根據自己情況想接收端發送數據,但接收端接收的可能不是自己想要的數據(例如上圖中接收端一直想要的是1001,但一直傳送的是其他的),然後容量有限,當接收端超負荷後,有可能將自己想要的數據丟棄,導致再次重傳,降低了網絡效率。

爲了防止上述問題的發送,TCP提供了流控制。接收端在發送應答響應時同時會附帶當前所能接收數據的大小,該大小又叫做窗口長度TCP首部中專門有字段代表窗口長度,在接收端發送確認應答時一起返回發送端,發送端就會隨之調整窗口大小,這樣就形成了TCP中的流量控制

如果所能接收的數據爲0,則發送端會暫時停止發送,直到接收端發送 窗口更新通知纔可以繼續通信。爲防止該通知丟包,允許發送端使用窗口探測,可以向接收端發送窗口探測的數據段,此數據段僅包含一位信息以獲得最大窗口長度。
在這裏插入圖片描述

擁塞控制(慢啓動,擁塞窗口,快恢復)

在網絡擁塞的情況下,如果突然發送一個較大量的數據,極有可能造成網絡癱瘓。

而TCP爲防止該情況提供了慢啓動的方法。慢啓動方法會在剛開始發送數據時將擁塞窗口長度賦值爲1,注意當發送數據時,要將擁塞窗口長度與接收端返回的可接收窗口長度相比較,使用較小值。,之後在應答返回的情況下,將擁塞窗口長度逐漸增大(以2的倍數增大)

同時爲了防止增長過大設立了慢啓動閾值,慢啓動閾值會在發生超時重傳後設立,當窗口長度大於該值時,下一次的窗口增長遵循公式:
在這裏插入圖片描述
TCP在開始時沒有設置慢啓動閾值,

只有當超時重傳後,會將慢啓動閾值設爲當前窗口長度的一半同時會將擁塞窗口長度重新賦值爲1開始,這種可以理解爲慢恢復

當發生快重傳時,同樣設立閾值,但擁塞窗口長度不從1開始,而是從慢啓動閾值+3數據段開始,上述過程叫做快恢復
在這裏插入圖片描述

提高網絡利用率的方法

1.延遲確認應答:如果接收端在接收數據後立刻應答,那麼返回的可接收數據長度就會很小,因爲正在處理,會導致窗口長度很小,所以TCP採取延遲確認應答。
(1)在沒有接到2*最大段長度(MSS)的數據不應答;
(2)最大延遲0.5s後應答。

TCP中絕大多數是每兩個數據段返回一次確認應答
在這裏插入圖片描述
2.捎帶應答:根據應用層協議,當發送端數據到達接收端時,會發送一個回執,我們可以將應答跟回執一同返回發送端;
例如SMTP、fFTP等,在此類應用中回執和應答可以放在一個數據包中傳輸。
注意:如果沒有采用延遲確認,就無法使用捎帶應答。因爲一到接收端就要發送應答響應,就無法等待回執了、

斷開連接(四次揮手)

(1)當傳輸結束後,發送端會向接收端發送一個斷開數據包,其中FIN=1,seq=u(這個是隨機的);

(2)接收端接收到之後,會返回發送端一個應答數據包,其中ACK=1,seq=v,ack=u+1此時從A到B這個方向已經斷開連接了,但A還是可以接收到B的數據。

(3)若接收端沒有數據發送給發送端了,接收端會發送一個斷開數據包,其中FIN=1,ACK=1,seq=w,ack=u+1😭注意包中序列號seq已經變了,但ack沒變);

(4)當發送端收到數據包後,也會給接收端發送應答的數據包,其中ACK=1,ack=w+1,seq=u+1這裏使用的是自己的序列號);當服務端接收到數據包後就會關閉;

注意:這裏發送端在發出數據包必須等待2MSL的時間才能關閉,爲的是將自己的最後一個ACK數據包能夠發送到服務端。(因爲有可能這個應答數據包丟失了,這樣B就會重新發關閉請求數據包,A只有沒有關閉,纔可能繼續發送應答數據包,否則就無法應答)
在這裏插入圖片描述
引申:爲什麼不是兩次揮手或三次揮手呢?
答:因爲TCP是全雙工的,因此兩個方向必須都進行關閉,兩次揮手僅能讓發送端到接收端停止連接,而發送端依然可以接收數據。因此需要接收端同樣發送FIN數據包,然後發送端響應纔可以斷開接收端到發送端的連接,這樣TCP連接纔算是斷開了

補充:在斷開連接時,主動斷開方的叫主動關閉,而被動斷開方的叫被動關閉。

TCP首部格式

在這裏插入圖片描述

UDP

UDP利用IP提供面向無連接的服務,UDP無法進行流量控制等避免擁堵的操作,此外傳輸過程出現丟包,UDP也不負責重傳,當發送順序出現問題,也沒有糾正的能力。

UDP由於無連接,可以隨時發送數據,因此它的主要應用場景
(1)包量較少的通信;
(2)視頻、音頻等多媒體場景
(3)廣播通信
舉個例子:以電話爲例,如果使用TCP的話,當有一個數據包丟失,就會重發那個數據包,這樣就無法暢通的傳輸通話的人聲音,而使用UDP的話,就不會有聲音大幅度延遲到達的問題,即使有一個數據包丟失,人也可以通過前後說的話來推測意圖。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章