IP分片 與 TCP分段的區別 !!!!careful
首先宣告:TCP分片應該稱為TCP分段
在TCP/IP分層中,資料鏈路層用MTU(Maximum Transmission Unit,最大傳輸單元)來限制所能傳輸的資料包大小,MTU是指一次傳送的資料最大長度,不包括資料鏈路層資料幀的幀頭,如乙太網的MTU為1500位元組,實際上資料幀的最大長度為1518 = 6+6+2+4+1500 位元組,其中乙太網資料幀的幀頭為6+6+2位元組。
當傳送的IP資料報的大小超過了MTU時,IP層就需要對資料進行分片,否則資料將無法傳送成功。
分片傳輸的IP資料報不一定按序到達,但IP首部中的資訊能讓這些資料報片按序組裝。IP資料報的分片與重組是在網路層進完成的。
區別:
1;========== TCP分段產生原因是MSS.(最大分段大小)
2.IP分片由網路層完成,也在網路層進行重組; TCP分段是在傳輸層完成,並在傳輸層進行重組. //透明性
3. 到了這裡有一個問題自然就明瞭了,TCP分段的原因是MSS,IP分片的原因是MTU,由於一直有MSS<=MTU,很明顯,分段後的每一段TCP報文段再加上IP首部後的長度不可能超過MTU,因此也就不需要在網路層進行IP分片了。因此TCP報文段很少會發生IP分片的情況。
4 而我們常提到的 IP分片是由於UDP傳輸協議造成的,因為UDP傳輸協議並未限定傳輸資料報的大小。
——————————————————————————————————————————————————————
總結
區分TCP分段和IP分片,瞭解它們工作在不同的層
避免IP分片!!!! why 如下:
在網路程式設計中,我們要避免出現IP分片,那麼為什麼要避免呢?
原因是IP層是沒有超時重傳機制的,如果IP層對一個數據包進行了分片,只要有一個分片丟失了,只能依賴於傳輸層進行重傳,結果是所有的分片都要重傳一遍,這個代價有點大。
由此可見,IP分片會大大降低傳輸層傳送資料的成功率,所以我們要避免IP分片。
對於UDP包,我們需要在應用層去限制每個包的大小,一般不要超過1472位元組,即乙太網MTU(1500—UDP首部(8)—IP首部(20)。
對於TCP資料,應用層就不需要考慮這個問題了,因為傳輸層已經幫我們做了。在建立連線的三次握手的過程中,連線雙方會相互通告MSS(Maximum Segment Size,最大報文段長度),MSS一般是MTU—IP首部(20)—TCP首部(20),每次傳送的TCP資料都不會超過雙方MSS的最小值,所以就保證了IP資料報不會超過MTU,避免了IP分片。