http://blog.csdn.net/chenhanzhun/article/details/41549179
2014
最大傳輸單元(Maximum Transmission Unit,MTU)是指一種通信協(xié)議的某一層上面所能通過的最大數(shù)據(jù)包大?。ㄒ宰止?jié)為單位)。數(shù)據(jù)鏈路層中的網(wǎng)絡(luò)對數(shù)據(jù)幀的長度都有一個限制,不同網(wǎng)絡(luò)的 MTU 值不同,常用的以太網(wǎng)為 1500 個字節(jié)。
若在 IP 層要傳輸?shù)臄?shù)據(jù)報大小比鏈路層的 MTU 還大,那么 IP 層就會對這個數(shù)據(jù)報進行分片。一個數(shù)據(jù)報會被分為若干片,每個分片的大小都小于或者等于鏈路層的 MTU 值。
IP 數(shù)據(jù)報分片以后,只有到達目的地才進行重新組裝(這里的重新組裝是達到目的地才組裝,而不像其他網(wǎng)絡(luò)協(xié)議在下一站就進行重新組裝),IP 數(shù)據(jù)報的分片和組裝都是發(fā)生在網(wǎng)絡(luò)層,其目的就是使分片和組裝過程對傳輸層(TCP 和 UDP)是透明的,以及防止某些可能的性能降低。已經(jīng)分片的數(shù)據(jù)報有可能會再次進行分片(即可多次分片)。
當(dāng) IP 數(shù)據(jù)報被分片后,只有第一個分片存在運輸層協(xié)議首部,其余分片都不包含運輸層協(xié)議的首部,但是每個分片都具有 IP 首部,并且每一片都成為一個分組,在選擇路由時每一組與其他分組相互獨立。由于分組之間是獨立的,所以分片傳輸?shù)?IP 數(shù)據(jù)報不一定按照順序到達目的地,但是每個分片的 IP 首部能夠使接收端按照正確的順序組裝這些 IP 數(shù)據(jù)報分片。
最大報文段長度(Maximum Segment Size,MSS)是 TCP 數(shù)據(jù)包每次能夠傳輸?shù)淖畲髷?shù)據(jù)分段。當(dāng) TCP 報文段的長度大于 MSS 時,需要將 TCP 數(shù)據(jù)包進行分段傳輸。
MSS 是在 TCP 三次握手建立連接時,在兩端主機之間被計算得出,會在 TCP 首部中寫入 MSS 選項,告訴對方自己的接口能夠適應(yīng)的 MSS 的大小。為了達到最佳的傳輸效能 TCP 協(xié)議在建立連接時通常要協(xié)商雙方的 MSS 值,然后會在兩者之間選擇一個較小的值來限制傳輸數(shù)據(jù)的大小。TCP 報文段的每個分段中都有 TCP 首部,到了端點后根據(jù) TCP 首部的信息在傳輸層進行重組(即 TCP 的分段和重組都發(fā)生在傳輸層)。
采用 TCP 協(xié)議進行數(shù)據(jù)傳輸是不會造成 IP 分片的,因為一旦 TCP 數(shù)據(jù)超過了 MSS,則在傳輸層會對 TCP 數(shù)據(jù)包進行分段,自然到了 IP 層的數(shù)據(jù)報肯定不會超過 MTU,所以就不用分片了。而對于 UDP 數(shù)據(jù)報,如果 UDP 組成的 IP 數(shù)據(jù)報長度超過了 MTU,那么 IP 數(shù)據(jù)報顯然就要進行分片,因為 UDP 不能像 TCP 一樣自己進行分段。傳輸層中的 TCP 會分段,網(wǎng)絡(luò)層中的 IP 會分片。IP 層的分片更多的是為運輸層的 UDP 服務(wù)的,由于 TCP 自己會避免 IP 的分片,所以使用 TCP 傳輸在 IP層都不會發(fā)生分片的現(xiàn)象。
IP 層沒有超時重傳機制,所以 IP 數(shù)據(jù)報的分片丟失時,必須重傳整個 IP 數(shù)據(jù)報。超時和重傳機制由更高層來實現(xiàn)(TCP 有超時重傳機制,但 UDP 沒有)。當(dāng)來自 TCP 報文段的某一片丟失后,TCP 在超時后重發(fā)整個 TCP 報文段,該報文段對應(yīng)于一份 IP 數(shù)據(jù)報。沒有辦法只重傳數(shù)據(jù)報中的一個數(shù)據(jù)報片。
參考資料:
《TCP/IP 詳解》
《圖解 TCP/IP》
聯(lián)系客服