IPv6扩展头部 (三) 路由头部 Routing Header for IPv6
IPv6在我國發(fā)展算是早的,網(wǎng)上相關(guān)的資源也是比較多但是涉及實(shí)際的應(yīng)用方面就比較少了。隨著今年國家對(duì)IPv6的加大投入,估計(jì)未來一段時(shí)間IPv6會(huì)變的熱門。在學(xué)校里老師對(duì)這一塊沒怎么講,平常工作的時(shí)候也沒啥接觸。最近的項(xiàng)目開發(fā)涉及IPv6這一部分,產(chǎn)品需要支持IPv6協(xié)議,因此學(xué)習(xí)了相關(guān)的知識(shí)。在此分享一下,有錯(cuò)誤的地方還請指出哈。
這篇博客主要介紹IPv6擴(kuò)展頭部里的路由頭部,結(jié)合報(bào)文具體分析一下它的作用。主要包括以下幾方面內(nèi)容:
1. 路由頭部作用。
2. 路由頭部格式。
IPv6路由頭部為發(fā)送方提供了一種IPv6數(shù)據(jù)報(bào)控制機(jī)制,以控制(至少部分控制)數(shù)據(jù)報(bào)通過網(wǎng)絡(luò)的路徑。目前,路由擴(kuò)展頭部有兩個(gè)不同版本,分別稱為類型0(RH0)和類型2(RH2)。RH0出于安全方面的考慮已被否決[RFC5095], RH2被定義為與移動(dòng)IP共同使用。為了更好地理解路由頭部,先討論RH0,然后研究它為什么被放棄,以及它和RH2的不同之處(其實(shí)沒啥不同)。RH0規(guī)定了數(shù)據(jù)包轉(zhuǎn)發(fā)時(shí)可“訪問”的一個(gè)或多個(gè)IPv6節(jié)點(diǎn)。下圖顯示了這個(gè)頭部。
圖1. 路由頭部格式
這個(gè)頭部包含一個(gè)8位的路由類型標(biāo)識(shí)符和一個(gè)8位的剩余部分字段。對(duì)于RH0,IPv6地址類型標(biāo)識(shí)符為0;對(duì)于RH2,該標(biāo)識(shí)符為2; 剩余部分字段指出還有多少段路由需要處理,也就是說,在到達(dá)目的地之前仍需訪問的中間結(jié)點(diǎn)數(shù)。緊接著是32位的保留字段開始的地址塊,有發(fā)送方設(shè)置為0,并由接收方忽略。在數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)時(shí),這些地址并非可訪問的組播IPv6地址。
IPv6路由頭部在轉(zhuǎn)發(fā)過程中不會(huì)處理,直至目的IP地址字段中包含的地址所在的節(jié)點(diǎn)。這時(shí),剩余部分字段用于確定來自地址向量的下一跳地址,并將該地址與IPv6頭部中的目的IP地址交換。因此,在這個(gè)數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)過程中,剩余部分字段將會(huì)變得越來越小,頭部中的地址列表反映轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)的節(jié)點(diǎn)地址。這個(gè)轉(zhuǎn)發(fā)過程可以借助下圖這個(gè)栗子更好的理解。
在上圖中,我們可看到中間節(jié)點(diǎn)如何處理路由頭部。發(fā)送方(S) 使用一個(gè)目的地址R1以及一個(gè)包含地址R2、R3和D的路由頭部(類型0 RH0)來構(gòu)造數(shù)據(jù)報(bào)。數(shù)據(jù)報(bào)的最終目的是列表中的最后一個(gè)地址D。剩余部分字段(圖中的Left字段)從3開始。數(shù)據(jù)報(bào)由S和R0 自動(dòng)向R1轉(zhuǎn)發(fā)。由于R0的地址在數(shù)據(jù)報(bào)中不存在,因此R0沒有修改路由頭部或地址。當(dāng)數(shù)據(jù)報(bào)到達(dá)R1時(shí),將基本頭部的目的地址和路由頭部的第一個(gè)地址交換,并將剩余部分字段遞減1.
? ? ? 當(dāng)數(shù)據(jù)報(bào)被轉(zhuǎn)發(fā)時(shí),重復(fù)上述將目的地址與路由頭部地址列表中下一個(gè)地址交換的過程,直至路由頭部中的最后一個(gè)目的地址為止。
下面看幾個(gè)實(shí)際的含有路由頭部的IPv6報(bào)文:
可以看到路由頭部下面的幾個(gè)字段:
Next header: 指出路由頭部后面的頭部類型,這里是icmpv6.
Length : 指的是當(dāng)前路由頭部的總長度,單位8字節(jié),這里顯示是2,16字節(jié),實(shí)際計(jì)算要加1,即24字節(jié)。因?yàn)闀?huì)有0值,有一點(diǎn)需要注意,擴(kuò)展頭部一般都是8字節(jié)對(duì)齊的。
Type : 路由類型標(biāo)識(shí),這里是0,即RH0,現(xiàn)在已經(jīng)不用這個(gè)值,改用RH2。
Left Segments : 剩余字段。
保留字段 : 4字節(jié)全0
Address: 地址。IPv6地址,長度16個(gè)字節(jié)。
算一下總長: Next header(1字節(jié)) + Length(1字節(jié)) + Left Segments(1字節(jié))?+ Type(1字節(jié)) + 保留字段32位(4字節(jié)) +? IPv6地址(16字節(jié))= 24字節(jié),正好和length字段相等。
最后說一下為什么RH0被丟棄[RFC5095],這是出于安全。因?yàn)镽H0可用于增加DoS攻擊效果。RH0的問題是允許在路由頭部中的多個(gè)位置指定相同地址。這可能導(dǎo)致流量在一條特定路徑上的兩臺(tái)或多臺(tái)路由器或主機(jī)之間重復(fù)轉(zhuǎn)發(fā)。大量的流量負(fù)載可能在網(wǎng)絡(luò)走會(huì)難過沿著特定路徑創(chuàng)建,與相同路徑上的其他流量競爭帶寬而造成干擾。因此,RH0目前已過時(shí),IPv6唯一支持的路由頭部是RH2。RH2和RH0基本相當(dāng),區(qū)別在于它只容納一個(gè)地址,而且在路由類型字段中使用的值不同。
關(guān)于路由頭部就介紹到此。
關(guān)于IPv6擴(kuò)展頭部的內(nèi)容:
IPv6擴(kuò)展頭部(一)擴(kuò)展頭部格式、類型和擴(kuò)展選項(xiàng):https://blog.csdn.net/fuyuande/article/details/81146615
IPv6擴(kuò)展頭部(四)分片擴(kuò)展頭部:https://blog.csdn.net/fuyuande/article/details/81145145
參考資料:
1. 《TCP/IP詳解-卷一:協(xié)議》W.Richard Stevens。原書第二版。5.3.2節(jié)。
總結(jié)
以上是生活随笔為你收集整理的IPv6扩展头部 (三) 路由头部 Routing Header for IPv6的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一升水等于多少斤?
- 下一篇: IPv6扩展头部 (四) 分片头部 Fr