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