tcp分片和ip分片的區(qū)別

ip分片

我們在計(jì)算機(jī)網(wǎng)絡(luò)上所看到的分片一般是指ip分片,ip分片是指在網(wǎng)絡(luò)傳輸過程中若遇到鏈路MTU比自己報(bào)文小的情況則進(jìn)行分片。

MTU(最大傳輸單元)

MTU是鏈路層中的網(wǎng)絡(luò)對數(shù)據(jù)幀的一個(gè)限制,以以太網(wǎng)為例,MTU為1500個(gè)字節(jié)。一個(gè)IP數(shù)據(jù)報(bào)在以太網(wǎng)中傳輸,如果它的長度大于該MTU值,就要進(jìn)行分片傳輸,使得每片數(shù)據(jù)報(bào)的長度小于MTU。分片傳輸?shù)腎P數(shù)據(jù)報(bào)不一定按序到達(dá),但I(xiàn)P首部中的信息能讓這些數(shù)據(jù)報(bào)片按序組裝。IP數(shù)據(jù)報(bào)的分片與重組是在網(wǎng)絡(luò)層進(jìn)完成的。

ip首部中分片的標(biāo)志位

image.png

標(biāo)識(Identification):

占16位。IP軟件在存儲器中維持一個(gè)計(jì)數(shù)器,每產(chǎn)生一個(gè)數(shù)據(jù)報(bào),計(jì)數(shù)器就加1,并將此值賦給標(biāo)識字段。但這個(gè)“標(biāo)識”不是序號,因?yàn)镮P是無連接服務(wù),數(shù)據(jù)報(bào)不存在按序接收的問題。當(dāng)數(shù)據(jù)報(bào)由于長度超過網(wǎng)絡(luò)的MTU而必須分片時(shí),這個(gè)標(biāo)識字段的值就被復(fù)制到所有的數(shù)據(jù)報(bào)片的標(biāo)識字段中。相同的標(biāo)識字段的值使分片后的各數(shù)據(jù)報(bào)片最后能正確地重裝成為原來的數(shù)據(jù)報(bào)。

標(biāo)志(Flags ):

標(biāo)志(flags)占用3位(即16 - 18),這三位分別是:R,DF,MF三位,第一位是保留位,沒有被使用,目前只有后兩個(gè)比特有意義。
R:標(biāo)志字段中的第一位是一個(gè)保留位,現(xiàn)在還沒有使用,可能將來會(huì)用到這位
D:標(biāo)志字段中間的一位是 DF (Don’t fragment),表示傳輸?shù)臄?shù)據(jù)不允許分片。一般DF = 1的話,表示數(shù)據(jù)一次性傳輸過去,不允許分片。
M:標(biāo)志字段的最低位是 MF (More fragment)。代表數(shù)據(jù)是否分片,如果MF位值為1,表示后面還有數(shù)據(jù),還沒有傳輸完畢,相當(dāng)于數(shù)據(jù)分片,分批次傳輸,如果MF = 0表示最后一個(gè)分片或者只有一個(gè)分片。
這三位同一時(shí)刻也是只能有一個(gè)位的值能設(shè)置為1

片偏移(Fragment offset):

占用13位:每次分片傳輸?shù)臄?shù)據(jù)之間的偏移距離,也就是某分片的數(shù)據(jù)在原數(shù)據(jù)中的相對位置,一般偏移以8字節(jié)為單位。比如:在網(wǎng)絡(luò)層傳輸?shù)膇p數(shù)據(jù)報(bào)總長度最大不能超過65535字節(jié),如果超過了,要么對ip數(shù)據(jù)報(bào)進(jìn)行分片傳輸,否則將丟棄。
互聯(lián)網(wǎng)協(xié)議使網(wǎng)絡(luò)互相通信。設(shè)計(jì)要迎合不同物理性質(zhì)的網(wǎng)絡(luò); 它是獨(dú)立于鏈路層使用的基礎(chǔ)傳輸技術(shù)。具有不同硬件的網(wǎng)絡(luò)通常會(huì)發(fā)生變化,不僅在傳輸速度,而且在最大傳輸單元(MTU)。當(dāng)一個(gè)網(wǎng)絡(luò)要的數(shù)據(jù)報(bào)發(fā)送到具有較小MTU的一個(gè)網(wǎng)絡(luò),它可能片段的數(shù)據(jù)報(bào)。
當(dāng)路由器收到一個(gè)數(shù)據(jù)包時(shí),它會(huì)檢查目的地址,并確定出接口使用,并且該接口的MTU。如果分組的大小是比MTU大,并且在該分組的頭中的不分段(DF)位被設(shè)置為0,則路由器可對其進(jìn)行分片。
分片機(jī)制有一定的缺陷:分片越多,分片丟失的機(jī)率就越大,對于一個(gè)數(shù)據(jù)報(bào),一旦一個(gè)分片丟失,那么整個(gè)數(shù)據(jù)報(bào)就要重傳;每一個(gè)數(shù)據(jù)報(bào)都要復(fù)制報(bào)頭(只復(fù)制ip包頭),這在一定程度上增加了帶寬消耗。

重組

組裝時(shí),需要重新設(shè)置首部的某些字段
修改分片標(biāo)志和片偏移量字段
首部其他字段復(fù)制原來數(shù)據(jù)報(bào)首部的相應(yīng)字段。

在IP頭里面有16bit的識別號唯一記錄了一個(gè)IP包的ID,以確定這幾個(gè)分片是否屬于同一個(gè)包,具有同一個(gè)ID的IP分片將會(huì)從新組裝。13bit的片偏移記錄了一個(gè)IP分片相對于整個(gè)包的位置。3bit的標(biāo)志位記錄了該分片后面是否還有新的分片。這三個(gè)分片組成了IP分片的所有的信息。

分片的具體場景

1.如果在源主機(jī)的以太網(wǎng)上進(jìn)行數(shù)據(jù)包裝,且tcp/udp向ip傳送的數(shù)據(jù)包大于MTU1500字節(jié),將在ip層進(jìn)行分片。
2.在數(shù)據(jù)在數(shù)據(jù)鏈路(路由器)中傳輸?shù)臅r(shí)候,每個(gè)路由器的MTU不一定相同,如果其中一個(gè)MTU只為800,則會(huì)觸發(fā)ip分片,將1500字節(jié)的數(shù)據(jù)包拆成兩個(gè)符合長度的數(shù)據(jù)包(但不一定會(huì)分片,由ip首部的兩個(gè)標(biāo)志位MF:More Fragment 和DF:Don't Fragment決定)如果是DF被設(shè)置,將會(huì)觸發(fā)ICMP協(xié)議,將當(dāng)前數(shù)據(jù)包丟棄,并把當(dāng)前路由的MTU回傳給源主機(jī)。

TCP分片與重組

MSS(Maximum Segment Size,最大報(bào)文長度)是TCP里的一個(gè)概念(首部的選項(xiàng)字段中)。MSS是TCP數(shù)據(jù)包每次能夠傳輸?shù)淖畲髷?shù)據(jù)分段,TCP報(bào)文段的長度大于MSS時(shí),要進(jìn)行分段傳輸。TCP協(xié)議在建立連接的時(shí)候通常要協(xié)商雙方的MSS值,每一方都有用于通告它期望接收的MSS選項(xiàng)(MSS選項(xiàng)只出現(xiàn)在SYN報(bào)文段中,即TCP三次握手的前兩次)。MSS的值一般為MTU值減去兩個(gè)首部大?。ㄐ枰獪p去IP數(shù)據(jù)包包頭的大小20Bytes和TCP數(shù)據(jù)段的包頭20Bytes)所以如果用鏈路層以太網(wǎng),MSS的值往往為1460。而Internet上標(biāo)準(zhǔn)的MTU(最小的MTU,鏈路層網(wǎng)絡(luò)為x2.5時(shí))為576,那么如果不設(shè)置,則MSS的默認(rèn)值就為536個(gè)字節(jié)。很多時(shí)候,MSS的值最好取512的倍數(shù)。TCP報(bào)文段的分段與重組是在運(yùn)輸層完成的。
TCP在建立連接時(shí)進(jìn)行三次握手,前兩個(gè)握手包中雙方互相聲明自己的MSS,客戶端聲明MSS=8960,服務(wù)器端聲明了MSS=1460。三次握手之后,客戶端的MTU值比服務(wù)器端大,如果發(fā)送一個(gè)9000字節(jié)的包過去可能被分片或丟棄。因此客戶端會(huì)把自己的MSS也降到1460字節(jié)。
TCP分段的原因是MSS,IP分片的原因是MTU,由于一直有MSS<=MTU,很明顯,分段后的每一段TCP報(bào)文段再加上IP首部后的長度不可能超過MTU,因此也就不需要在網(wǎng)絡(luò)層進(jìn)行IP分片了。因此TCP報(bào)文段很少會(huì)發(fā)生IP分片的情況。
再來看UDP數(shù)據(jù)報(bào),由于UDP數(shù)據(jù)報(bào)不會(huì)自己進(jìn)行分段,因此當(dāng)長度超過了MTU時(shí),會(huì)在網(wǎng)絡(luò)層進(jìn)行IP分片。同樣,ICMP(在網(wǎng)絡(luò)層中)同樣會(huì)出現(xiàn)IP分片情況。

tcp mss

TCP在三次握手建立連接過程中,會(huì)在SYN報(bào)文中使用MSS(Maximum Segment Size)選項(xiàng)功能,協(xié)商交互雙方能夠接收的最大段長MSS值。
MSS是傳輸層TCP協(xié)議范疇內(nèi)的概念,顧名思義,其標(biāo)識TCP能夠承載的最大的應(yīng)用數(shù)據(jù)段長度,因此,MSS=MTU-20字節(jié)TCP報(bào)頭-20字節(jié)IP報(bào)頭,那么在以太網(wǎng)環(huán)境下,MSS值一般就是1500-20-20=1460字節(jié)。
客戶端與服務(wù)器端分別根據(jù)自己發(fā)包接口的MTU值計(jì)算出相應(yīng)MSS值,并通過SYN報(bào)文告知對方。

tcp分片和ip分片的區(qū)別

IP分片產(chǎn)生的原因是網(wǎng)絡(luò)層的MTU;TCP分段產(chǎn)生原因是MSS
IP分片由網(wǎng)絡(luò)層完成,也在網(wǎng)絡(luò)層進(jìn)行重組;TCP分段是在傳輸層完成,并在傳輸層進(jìn)行重組
對于以太網(wǎng),MSS為1460字節(jié),而MUT往往會(huì)大于MSS
故采用TCP協(xié)議進(jìn)行數(shù)據(jù)傳輸,是不會(huì)造成IP分片的。若數(shù)據(jù)過大,只會(huì)在傳輸層進(jìn)行數(shù)據(jù)分段,到了IP層就不用分片。而我們常提到的IP分片是由于UDP傳輸協(xié)議造成的,因?yàn)閁DP傳輸協(xié)議并未限定傳輸數(shù)據(jù)報(bào)的大小。

TCP的分片和IP分片的區(qū)別
TCP的分片和IP分片的區(qū)別
MTU和MSS詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 個(gè)人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,195評論 0 8
  • # 圖解TCP/IP 標(biāo)簽(空格分隔): 2018招聘 --- ##第1章 網(wǎng)絡(luò)基礎(chǔ)知識 ### ### 1.1 ...
    Kai_a3da閱讀 1,568評論 0 2
  • 1.OSI七層 TCP/IP五層 1.1 OSI七層參考模型 對于OSI七層參考模型,我想說只有這七個(gè)詞條.任何與...
    破弓閱讀 1,342評論 3 0
  • 1、首先根據(jù)Ethernet II類型以太網(wǎng)幀格式可以得知,Ethernet II類型以太網(wǎng)幀的最小長度為64字節(jié)...
    晚歌歌閱讀 11,252評論 2 11
  • 鏈路層具有最大傳輸單元MTU這個(gè)特性,限制了數(shù)據(jù)幀的最大長度,不同的網(wǎng)絡(luò)類型都有一個(gè)上限值。如以太網(wǎng)Etherne...
    mysimplebook閱讀 11,285評論 0 0

友情鏈接更多精彩內(nèi)容