您當前的位置:首頁 > 遊戲

資料幀,資料報,資料包相互關係包含關係的理解

作者:由 藏刀陌客 發表于 遊戲時間:2019-04-11

資料包是什麼

這段地方究竟誰包含誰有些不太理解,所以整理了下

資料幀(Frame):

是一種資訊單位,它的起始點和目的點都是

資料鏈路層

資料包(Packet):

也是一種資訊單位,它的起始和目的地是

網路層

資料報(Datagram):

通常是指起始點和目的地都使用無連線網路服務的的

網路層

的資訊單元。

段(Segment):

通常是指起始點和目的地都是

傳輸層

的資訊單元。

訊息(message):

是指起始點和目的地都在網路層以上(經常在

應用層

)的資訊單元。

但是如果一段傳輸資料特別長,那會發生什麼呢?

UDP:直接附上ip頭,但在網路層會根據資料幀所能走大小執行分片。

TCP:雙方會互相通報最大報文長度,從而在傳輸層分片

首先需要理解的是資料報是不能比資料幀大的,資料幀根據不同網路(無線有線)長度會有所區別,資料包(一塊資料)進行為網路層傳輸時會進行判別,如果長過是網路層要進行分片,成為資料報。

原因:

乙太網的MTU是1500,你可以用 netstat -i 命令檢視這個值。如果IP層有資料包要傳,而且資料包的長度超過了MTU,那麼IP層就要對資料包進行分片(fragmentation)操作,使每一片的長度都小於或等於MTU。我們假設要傳輸一個UDP資料包,乙太網的MTU為1500位元組,一般IP首部為20位元組,UDP首部為8位元組,資料的淨荷(payload)部分預留是1500-20-8=1472位元組。如果資料部分大於1472位元組,就會出現分片現象。

IP分片發生在IP層,不僅源端主機會進行分片,中間的路由器也有可能分片,因為不同的網路的MTU是不一樣的,如果傳輸路徑上的某個網路的MTU比源端網路的MTU要小,路由器就可能對IP資料報再次進行分片。而分片資料的重組只會發生在目的端的IP層。

但是正常情況下要避免在網路層分片:

原因是IP層是沒有超時重傳機制的,如果IP層對一個數據包進行了分片,只要有一個分片丟失了,只能依賴於傳輸層進行重傳,結果是所有的分片都要重傳一遍,這個代價有點大。由此可見,IP分片會大大降低傳輸層傳送資料的成功率,所以我們要避免IP分片。

所以UDP:對於UDP包,我們需要在應用層去限制每個包的大小,一般不要超過1472位元組,即乙太網MTU(1500)—UDP首部(8)—IP首部(20)。

TCP:對於TCP資料,應用層就不需要考慮這個問題了,因為傳輸層已經幫我們做了。在建立連線的三次握手的過程中,連線雙方會相互通告MSS(Maximum Segment Size,最大報文段長度),MSS一般是MTU—IP首部(20)—TCP首部(20),每次傳送的TCP資料都不會超過雙方MSS的最小值,所以就保證了IP資料報不會超過MTU,避免了IP分片。網路

資料幀,資料報,資料包相互關係包含關係的理解

資料幀,資料報,資料包相互關係包含關係的理解

標簽: 分片  IP  MTU  資料包  網路層