IPv6扩展头部 (四) 分片头部 Fragment Header for IPv6
上一篇博客介紹了IPv6擴(kuò)展頭部的路由頭部類型,這篇博客介紹一下更常見的擴(kuò)展頭部分片頭部。
分片頭部用于IPv6源節(jié)點(diǎn)向目的節(jié)點(diǎn)發(fā)送一個(gè)大于路徑MTU的數(shù)據(jù)報(bào)。對(duì)于路徑MTU以及如何確定它,以后有機(jī)會(huì)在提,1280字節(jié)是整個(gè)網(wǎng)絡(luò)中針對(duì)IPv6定義的鏈路層最小MTU(見[RFC2460]的第五節(jié))。在IPv4中,這個(gè)值可能是576。在IPv4中,如果數(shù)據(jù)報(bào)大小超過下一跳MTU,任何主機(jī)或路由器可將該數(shù)據(jù)報(bào)分片,IPv4頭部中第二個(gè)32位字段標(biāo)識(shí)分片信息。如下圖
標(biāo)識(shí)、標(biāo)志和片偏移三個(gè)字段用于處理IPv4分片報(bào)文。
在IPv6中,僅數(shù)據(jù)報(bào)的發(fā)送者可以執(zhí)行分片操作。這就是說,中間路由器或著主機(jī)不再需要處理分片報(bào)文,這樣會(huì)提高分片報(bào)文處理效率,因?yàn)榉制瑘?bào)文的重組和分片都是耗cpu的。在這種情況下需要添加一個(gè)分片頭部。
分片頭部包括的信息與IPv4頭部中的相同,只不過標(biāo)識(shí)符字段變成32位,而不是IPv4采用的16位。這個(gè)更大的字段提供了在網(wǎng)絡(luò)中容納更多分片的能力。下圖顯示了分片頭部采用的格式,(書上拍的圖):
IPv6分片頭部包含一個(gè)32位的標(biāo)識(shí)符字段(是IPv4中標(biāo)識(shí)符字段的兩倍).M位字段表明該分片是否為原始數(shù)據(jù)報(bào)的最后一個(gè)分片。與IPv4一樣,分片偏移字段給出了有效載荷在原始數(shù)據(jù)報(bào)中以8字節(jié)為單位的偏移量。
上圖中,保留字段和2位的Res字段都為0,并且都會(huì)被接收方所忽略。分片偏移字段表明數(shù)據(jù)以8字節(jié)為單位的偏移量放置在分片頭部之后(相對(duì)于原始IPv6數(shù)據(jù)報(bào)的“可分片部分”),如果M字段設(shè)置為1,表示在數(shù)據(jù)報(bào)中包含更多分片。如果該值為0,表示該分片是原始數(shù)據(jù)報(bào)的最后一個(gè)分片。
?????? 在分片過程中,輸入的數(shù)據(jù)報(bào)稱為"原始數(shù)據(jù)報(bào)",它由兩部分組成:"不可分片部分"和"可分片部分"。不可分片部分包括IPv6頭部和任何到達(dá)目的地之前需要由中間節(jié)點(diǎn)處理的擴(kuò)展頭部(即包括路由頭部之前的所有頭部,如果有逐跳選項(xiàng)擴(kuò)展頭部,則是該頭部之前的所有頭部)。可分片部分包括數(shù)據(jù)報(bào)的其余部分(即目的選項(xiàng)頭部,上層頭部和有效載荷數(shù)據(jù))。簡單說,就是有些擴(kuò)展頭部是不允許分片的,需要每個(gè)分片報(bào)文都攜帶不允許分片的部分。
????? 當(dāng)原始數(shù)據(jù)報(bào)被分片后,將會(huì)產(chǎn)生多個(gè)分片,其中每個(gè)分片都包含一個(gè)原始數(shù)據(jù)報(bào)綜合那個(gè)不可分片部分的副本,但是需要修改每個(gè)IPv6頭部的負(fù)載長度字段,以反映它所描述的分片報(bào)文大小。在不可分片部分之后,每個(gè)新的分片都包含一個(gè)分片頭部,其中包含一個(gè)分片相應(yīng)的分片偏移字段(例如第一個(gè)分片的偏移量為0),以及一個(gè)原始分組的標(biāo)識(shí)符字段的副本,最后一個(gè)分片的M(更多分片)位字段設(shè)置為0。
????? 下面結(jié)合一個(gè)栗子演示一下IPv6源節(jié)點(diǎn)對(duì)數(shù)據(jù)報(bào)的分片過程。在該栗子中,一個(gè)3960字節(jié)的有效載荷被分片,其中分片的大小都沒有超過1500字節(jié)(一個(gè)典型的以太網(wǎng)MTU),分片數(shù)據(jù)的大小仍為8字節(jié)的倍數(shù)。
IPv6分片報(bào)文栗子,一個(gè)3960字節(jié)的有效載荷被分為3個(gè)1448字節(jié)或更小的分片。每個(gè)分片包含一個(gè)帶相同的標(biāo)識(shí)符字段的分片頭部。除了最后一個(gè)分片,所有分片的更多分片(M)字段設(shè)置為1。偏移量以8字節(jié)為單位。例如最后一個(gè)分片包含的數(shù)據(jù)是從原始數(shù)據(jù)開始出偏移(362*8)=2896字節(jié)。這個(gè)方案與IPv4中分片相似。
在上圖中,可以看到較大的原始數(shù)據(jù)報(bào)被分為3個(gè)較小的分片。每個(gè)分片都包含一個(gè)分片頭部。IPv6頭部的負(fù)載長度字段被修改,以反映數(shù)據(jù)和新生成的分片頭部的大小。每個(gè)分片中的分片頭部包含一個(gè)公共標(biāo)識(shí)符字段,以確保網(wǎng)絡(luò)中不同的原始數(shù)據(jù)報(bào)在其生存期內(nèi)不會(huì)被分配相同的標(biāo)識(shí)符字段。接收端會(huì)將標(biāo)識(shí)符相同的報(bào)文重組起來。
?????? 分片頭部中的偏移量字段以8字節(jié)為單位。因此分片需要在8字節(jié)的邊界處進(jìn)行,這就是第一個(gè)和第二個(gè)分片包含1448字節(jié),而不是1452字節(jié)的原因。因此,除了最后一個(gè)分片之外的所有分片都是8字節(jié)的倍數(shù)(最后一個(gè)分片也可能是)。接收方在對(duì)分片進(jìn)行重組之前,必須確保已接收原始數(shù)據(jù)報(bào)的所有分片。重組過程中需要聚合所有分片以形成原始數(shù)據(jù)報(bào)。與IPv4分片一樣,分片可能不按順序到達(dá)接收方,但需要按順序重組為一個(gè)數(shù)據(jù)報(bào),以便交給高層的其它協(xié)議處理。
????? 在win10系統(tǒng)使用如下命令構(gòu)造一個(gè)分片報(bào)文:
????? ping -l 3952 (IPv6網(wǎng)關(guān))
IPv6擴(kuò)展首部分片首部就介紹到這,有問題歡迎提出哈
IPv6擴(kuò)展頭部(一)擴(kuò)展頭部格式、類型和擴(kuò)展選項(xiàng):https://blog.csdn.net/fuyuande/article/details/81146615
IPv6擴(kuò)展頭部(三)路由擴(kuò)展頭部:https://blog.csdn.net/fuyuande/article/details/81122628
?
參考資料:
?1. 《TCP/IP詳解-卷一:協(xié)議》W.Richard Stevens。原書第二版。5.3.3節(jié)。
2.?? RFC2460 : https://tools.ietf.org/html/rfc2460
3.?? IPv6技術(shù)課件 https://wenku.baidu.com/view/17627f53581b6bd97f19eae6
總結(jié)
以上是生活随笔為你收集整理的IPv6扩展头部 (四) 分片头部 Fragment Header for IPv6的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IPv6扩展头部 (三) 路由头部 Ro
- 下一篇: IPv6扩展头部 (一) 扩展头部格式、