1. 程式人生 > >IP分片 與 TCP分段的區別 !!!!careful

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分片的情況。 

若資料過大,只會在傳輸層進行資料分段,到了IP層就不用分片。

而我們常提到的 IP分片是由於UDP傳輸協議造成的,因為UDP傳輸協議並未限定傳輸資料報的大小。

——————————————————————————————————————————————————————

 

                                               總結

UDP不會分段,就由IP來分片。   TCP會分段,當然就不用IP來分片了!

                                                  區分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分片。