IPv6擴展頭的用法
發表于:2007-05-26來源:作者:點擊數:
標簽:
將IPv4選項合并到標準IPv4頭比較復雜。IPv4頭最短為20字節,最長為60字節,附加數據包含IPv4選項,必須由路由器翻譯以對IP包進行處理。這種方法有兩個影響:其一,路由器實現時往往對附加選項的包進行分流處理,因此導致處理效率降低;其二,由于選項導致 性
將IPv4選項合并到標準IPv4頭比較復雜。IPv4頭最短為20字節,最長為60字節,附加數據包含IPv4選項,必須由路由器翻譯以對IP包進行處理。這種方法有兩個影響:其一,路由器實現時往往對附加選項的包進行分流處理,因此導致處理效率降低;其二,由于選項導致
性能下降,應用
開發者傾向于不使用選項。
使用IPv6擴展頭,可以在不影響性能的前提下實現選項。開發者可以在必要時使用選項,而無須擔心路由器會對帶擴展選項的包區別對待,除非是設置了選路擴展頭或逐跳選項。即使設置了這兩個選項,路由器仍可以進行必要的處理,比使用IPv4選項容易。
擴展頭的標識
所有的IPv6頭長度都一樣,并且看起來幾乎相同,唯一的區別在于下一個頭字段。在沒有擴展頭的IPv6包中,此字段的值表示上一層
協議。即,若IP包中含有TCP段,則下一個頭字段的8位二進制值是6(源自RFC1700(已指派號碼));若IP包中含有UDP數據報,這個值就是17。表7-1中列舉了下一個頭字段的某些值。
下一個頭字段值指明是否有下一個擴展頭及下一個擴展頭是什么,因此,IPv6頭可以鏈接起來,從基本的IPv6頭開始,逐個鏈接各擴展頭。這種頭連接鏈的構成見圖7-1。圖中第一個IPv6包沒有擴展頭;第二個包有選路擴展頭,其后為TCP頭和包的其余部分;最后一個包有更復雜的頭鏈,IPv6頭后面有分段擴展頭,然后是身份驗證擴展頭,后接ESP擴展頭,最后是TCP頭和包的其余部分。
下表IPv6下一個頭字段的一些可能值,用以指明擴展頭


三個不同的IPv6包:第一個包沒有擴展頭,第二個包有一個選路擴展頭,第三個包有三個擴展頭擴展頭的順序
一個IPv6包可以有多個擴展頭,但是,只有一種情況允許同一類型的擴展頭在一個包中多次出現,而且各擴展頭在鏈接時有一個首選順序。RFC1883規定,擴展頭應該依照如下順序:
(1)IPv6頭。
(2)逐跳選項頭。
(3)目的地選項頭(應用于IPv6目的地址字段的第一個目的地和選路頭中所列的附加目的地中)。
(4)選路頭。
(5)分段頭。
(6)身份驗證頭。
(7)ESP頭。
(8)目的地選項頭(當使用選路頭時,僅應用于包的最終目的地)。
(9)上層頭。從以上順序可知,在同一個IP包中只有目的地選項擴展頭可以多次出現,并且僅限于包中包含選路擴展頭的情況。
上述順序并不是絕對的。例如,前面已提及,在包的其余部分要加密時,ESP頭必須是最后一個擴展頭。同樣,逐跳選項優先于所有其他擴展頭,因為每個接收IPv6包的節點都必須對該選項進行處理。
建立新的選項
擴展頭必須通過IPv6頭的下一個頭字段來確認。這意味著由于這個字段為8位,最多只能有256個不同值。即使將來該字段的可能取值的個數有所減少,也必須支持上一層頭的所有可能值。即,該值不僅對擴展頭進行標識,還標識著封裝在IP包內的所有其他
協議。因此,目前已經指派了很多值,未指派的值相當有限。
IPv6用于擴展頭的某些
協議標識符沿自IPv4,例如身份驗證頭和ESP頭。到目前為止,已指派了很多擴展頭,但也允許通過逐跳選項擴展頭和目的地選項擴展頭來建立新的選項。
除了為下一個頭字段保存
協議值以外,通過使用這些選項頭擴展,很容易健壯地實現新選項。如果使用一個全新的頭類型來發送IP包,若目的節點支持新的頭類型,則一切順利;反之,如果新的頭類型對目的節點是未知的,則目的節點只能丟棄該包。另一方面,所有的IPv6節點都必須支持逐跳選項擴展頭、目的地選項擴展頭以及一些基本選項。此時,如果目的節點收到帶有目的地選項擴展頭的包,即使不支持該擴展頭中的選項,它也能夠響應。即,這些選項可以向接收節點請求適當的響應,即使接收節點對選項并不理解。例如,選項可能是“做X,如果不理解X,就丟棄此包”這樣的形式,或者可以是“做X,如果不理解X,就跳過此選項,并完成對擴展頭的處理”。選項也可以請求目的節點發回一個ICMP出錯報文,以指明目的節點不理解此選項。
選項擴展頭
逐跳選項擴展頭和目的地選項擴展頭可以包含特定的選項。RFC1883中定義了兩個填充選項,用于確保擴展頭字段符合邊界要求。即,如果選項使用3個8位字段后接一個32位字段,就必須插入(即填充)附加的8位,以確保在越過一個32位字邊界時,選項中的32位字段不會被拆開。下圖給出了該過程。如果無需填充,則只定義一個功能選項,即逐跳選項擴展頭中使用的巨型凈荷選項。

選項頭可能需要填充,以保證字段在越過32位字邊界時不會被拆開所有的選項擴展頭—逐跳選項擴展頭和目的地選項擴展頭都有類似的幀格式,見圖7-3。很簡單,這些擴展頭只有兩個預定義的字段:下一個頭字段和頭擴展長度字段。所有IPv6頭都包含下一個頭字段。頭擴展長度字段占8位,指明該選項頭的長度。該長度以8字節為單位,不包含擴展頭的第一個8字節,即如果選項擴展頭只有8字節長,該字段值即為0。該字段限制了擴展頭最多為2048字節。擴展頭的其余部分為該擴展頭所包含的選項。

RFC1883中定義的標準選項頭格式選項
IPv6選項包含如下三個字段:
•選項類型:該字段為8位標識符,指明選項的類型。即使目的節點不能夠識別選項,也可以由該字段的前3位編碼翻譯出選項的類型。
•選項數據長度:該字段為8位整數,表示選項數據字段的長度。該字段最大值為255。
•選項數據:該字段包含選項特定的數據,最大長度為255字節。
選項類型字段的前2位表示目的節點在不能識別特定的選項時應該采取的動作,共有如下四種選項類型:
•00:忽略此選項,完成對擴展頭其余部分的處理。
•01:丟棄整個包。
•10:丟棄包,不論該包的目的地址是否是組播地址,都向該包的源地址發送一個ICMP報文。
•11:丟棄包,如果該包的目的地址是單播地址或任意點播地址(即非組播地址),則向該包的源地址發送一個ICMP報文。選項類型的第3位指明在包從源地址到目的地址的傳送過程中,選項數據的值是否可以改變。若為0,則不允許改變;若為1,則選項數據是可變的。
逐跳選項擴展頭和目的地選項擴展頭都包含的相同選項是兩個填充選項:填充選項1和填充選項N。填充選項1很特別,它只有8位,全部置為0,沒有選項數據長度字段和其他選項數據。
而填充選項N是由前面的四種選項類型之一來標識的,它使用多個字節來填充擴展頭。如果擴展頭需要N字節填充,則選項數據長度字段值為N-2,即選項數據字段占N-2個字節,全部置為0。再加上1字節的選項類型字段、1字節的選項數據長度字段,一共填充了N字節。
逐跳選項
從源節點到目的節點的路由上的每個節點,即每個轉發包的路由器都檢查逐跳選項中的信息。到目前為止,只定義了一個逐跳選項:巨型凈荷選項。下圖描述了RFC1883所定義的使用巨型凈荷選項的逐跳擴展頭。

RFC1883中定義的包含巨型凈荷選項的逐跳擴展頭,允許IPv6包中的凈荷超過65535字節與其他選項擴展頭相同,前兩個字段指明了下一個頭
協議和擴展頭的長度(此時,由于整個選項只有8位,擴展頭長度的字段值為0)。巨型凈荷選項從擴展頭的第三個字節開始。第三個字節為擴展頭類型,其值為194;第四個字節,即巨型凈荷選項數據長度的值為4。選項的最后一個字段為巨型凈荷長度,指明包括逐跳選項擴展頭在內,IP包中所包含的實際字節數,但不包括IPv6頭。
只有沿途每個路由器都能夠處理時,節點才能使用巨型凈荷選項來發送大型IP包。因此,該選項在逐跳擴展頭中使用,要求沿途的每個路由器都必須檢查此信息。巨型凈荷選項允許IPv6包凈荷長度超過65535字節,最多可以為232-1字節,超過了40億字節。如果使用該選項,要求IPv6頭的16位凈荷長度字段值必須為0,擴展頭中的巨型凈荷長度字段值不小于65535。如果不滿足這兩個條件,接收包的節點應該向源節點發送ICMP出錯報文,通知有問題發生。此外還有一個限制:如果包中有分段擴展頭,就不能同時使用巨型凈荷選項,因為使用巨型凈荷選項時不能對包進行分段。
選路頭
選路頭代替了IPv4中所實現的源選路。源選路允許用戶指定包的路徑,即到達目的地沿途必須經過的路由器。在IPv4源選路中,使用IPv4選項,對用戶可以指定的中間路由器的個數有一定限制:帶擴展的IPv4頭有40個附加字節,最多只能填入10個32位地址。此外,由于路徑上的每個路由器都必須處理整個地址列表,而不論該路由器是否在列表中,因而對源路由包的處理很慢。
IPv6定義了一個通用的選路擴展頭,有兩個字段,各占1字節:選路類型字段和剩余段數字段。其中選路類型字段表示所使用的選路頭的類型;而剩余段數字段表示擴展頭的其余部分所列出的附加路由器的個數,這些路由器是在到達最終目的地的途中包必須經過的。擴展頭的其余部分為類型特定的數據,與選路頭類型相關。RFC1883中定義了一種類型,即類型0選路頭。
類型0選路擴展頭解決了IPv4源選路的主要問題。只有列表中的路由器才處理選路頭,其他路由器則不必處理。而且列表中最多可以指定256個路由器。對選路頭的操作過程如下:
•由源節點構造包必須經過的路由器的列表,并構造類型0選路頭,頭中包括路由器的列表、最終目的節點地址和剩余段數,剩余段數(8位整數)指明在包向目的節點交付之前所必須經過的特定路由器的數目。
•源節點發送包時,將IPv6頭目的地址設置為選路頭列表中的第一個路由器的地址。
•該包一直轉發,直到到達路徑中的第一站,即IPv6頭的目的地址(選路頭列表中的第一個路由器),只有該路由器才檢查選路頭,沿途的中間路由器都忽略選路頭。
•在第一站和所有后續其他站,路由器檢查選路頭以確保剩余段數與地址列表一致。若剩余段數的值等于0,則表示此路由器節點實際上是該包的最終目的地,節點將繼續對包的其他部分進行處理。
•假定此節點不是該包的最終目的地,它將自己的地址從IPv6頭的目的地址字段取出,并以選路頭列表中的下一個節點地址來替代。同時,節點將剩余段數字段的值減1。然后將包發送往下一站。列表中的其他節點重復此過程,直到包到達最終目的地。
RFC1883對類型0選路頭的定義中,在剩余段數字段后保留了一個字節,并增加了24位嚴格/寬松位映射字段。該字段將24個標志映射到最多24個中間路由器,由此源節點可以指定使用嚴格選路還是寬松選路。嚴格選路不允許經過列表中不包含的中間路由器,而寬松選路則允許。目前沒有采納該方案,剩余段數字段之后的整個32位都作為保留位。未使用嚴格/寬松位映射字段表示頭中所列舉的路由器個數只受限于8位的剩余段數字段,當然也表示在類型0選路頭中不能使用嚴格選路。
分段頭
IPv6只允許源節點對包進行分段,簡化了中間節點對包的處理。而在IPv4中,對于超出本地鏈路允許長度的包,中間節點可以進行分段。這種處理方式要求路由器必須完成額外的工作,并且在傳輸過程中包可能被多次分段。當一個節點要發送的包對于本地鏈路的單個數據傳送單元來說太大時,就需要分段。例如,以太網允許傳送的MTU為1500字節,要發送一個4000字節的IP包,如果不分成三段,每段均小于1500字節,就無法在以太網鏈路上傳送。前方有些鏈路可能具有更小的MTU,比如576字節,這種鏈路上的路由器就必須將已經分成1500字節的IP包分段,再次分成更小的段。
IPv4中的分段很令人煩惱,它使得中間節點和目的節點都必須增加處理分段的必要開銷。通過使用路徑MTU發現機制,源節點可以確定源節點到目的節點之間的整個鏈路中能夠傳送的最大包長度,從而可以避免中間路由器的分段處理。RFC1883規定最小的MTU為576字節,但在將用來代替RFC1883的文檔草案中,最小的MTU要求已增加到1280字節,并建議將鏈路配置為應該至少可以傳送1500字節長的包。
上述規定表明,源節點可以發送長達1280字節的包,而不必顧慮這些包會被分段。長達1500字節的包也很可能不被分段。但是,IPv6規范建議所有節點都執行路徑MTU發現機制,并只允許由源節點分段。換言之,在發送任意長度的包之前,必須檢查由源節點到目的節點的路徑,計算出可以無需分段而發送的最大長度的包。如果要發送超出此長度的包,就必須由源節點進行分段。
在IPv6中,分段只發生在源節點,并使用分段頭來表示。RFC1883中規定的幀格式如圖7-5所示。分段頭字段包括:
•下一個頭字段:此8位字段對所有的IPv6頭是共同的。
•保留:此8位字段目前未用,設置為0。
•分段偏移值字段:與IPv4的分段偏移值字段很相似。此字段共13位,以8字節為單位,表示此包(分段)中數據的第一個字節與原來整個包中可分段部分的數據的第一個字節之間的位置關系。換言之,若該值為175,表示分段中的數據從原包的第1400字節開始。
•保留字段:此2位字段目前未用,設置為0。
•M標志:此位表示是否還有后續字段。若值為1,表示后面還有后續字段;若值為0則表示這是最后一個分段。
•標識字段:該字段與IPv4的標識字段類似,但是為32位,而在IPv4中為16位。源節點為每個被分段的IPv6包都分配一個32位標識符,用來唯一標識最近(在包的生存期內)從源地址發送到目的地址的包。

RFC1883中定義的IPv6分段擴展頭字段整個IPv6包中只有部分可以被分段,可分段的部分包括:凈荷和只能在到達最終目的地時才處理的擴展頭。對于IPv6頭和在發往目的節點的途中必須由路由器處理的擴展頭,如選路頭或逐跳選項頭,則不允許進行分段。
目的地選項
類似逐跳選項頭,目的地選項頭提供了一種隨著IPv6包來交付可選信息的機制。其余的擴展頭選項,如分段頭、身份驗證頭和ESP頭,都是每次出于某一個特定的理由而定義的,而目的地選項擴展頭則是允許為目的節點而定義的新選項。目的地選項將使用前面所描述的構造選項的格式。
到目前為止,除了前面提到的填充選項,在已發布的RFC中尚未定義任何目的地選項,但是Internet草案中定義了一些和移動IP相關的選項
原文轉自:http://www.kjueaiud.com
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
|