資料幀,資料報,資料包相互關係包含關係的理解
資料包是什麼
這段地方究竟誰包含誰有些不太理解,所以整理了下
資料幀(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分片。網路