《IPv6技术精要》一2.4 扩展报头
本節書摘來自異步社區《IPv6技術精要》一書中的第2章,第2.4節,作者【美】Rick Graziani,更多章節內容可以訪問云棲社區“異步社區”公眾號查看
2.4 擴展報頭
IPv6技術精要
理解擴展報頭相對較為困難,所以本節將采取步步深入的方式進行介紹。有些擴展報頭很簡單,而有些擴展報頭則比較復雜,因此,即便有些內容理解起來有些含糊,也不必太在意,本節的目的是讓大家熟悉擴展報頭的概念以及相應的使用方式。
擴展報頭是可選項,位于IPv6基本報頭之后,如前所述,IPv6報頭包含下一報頭字段,該字段的作用有兩個:
一是標識IPv6包數據部分所承載的協議;
二是指示擴展報頭的存在。
在前面已經說過,下一報頭字段能夠標識IPv6包數據部分所承載的協議,這一點與IPv4報頭的協議字段相似(如圖2-5所示)。
第二個作用是對IPv6報頭的重要補充,用于指示被稱為擴展報頭的額外報頭的存在。在必需的IPv6基本報頭之后,可以有0個、1個或多個擴展報頭。所有擴展報頭中都有的一個字段是另外的下一報頭字段,表示接下來還有其他擴展報頭,或者是數據(凈荷)協議(如TCP報文段)。因此,最后的擴展報頭總是指示哪種協議被封裝在數據部分(凈荷),這一點與IPv4的協議字段相似。
目前在RFC 2460中定義了6種擴展報頭(如表2-3所示)。大家可能還記得,在IPv4報頭中有一個很少使用的可變長度的選項字段,可以為IPv4提供一定的靈活性,而IPv6也有兩個擴展報頭提供了類似的功能:逐跳選項(Hop-by-Hop Option)報頭和目的選項(Destination Option)報頭。圖2-7給出了使用這兩種報頭的IPv6包示例。
IPv6基本報頭擁有前面討論過的全部字段,包括源地址和目的地址字段,IPv6基本報頭中的下一報頭字段為0則表示后面緊跟的是逐跳選項擴展報頭。
逐跳選項擴展報頭位于IPv6基本報頭之后,有關擴展報頭的詳細內容將在下一節討論,這里需要注意的是,該字段也包含自己的下一報頭字段,值51表示后面還有其他的擴展報頭,即AH(Authentication Header,認證頭)擴展報頭。
最后的擴展報頭就是AH,其下一報頭字段值為6,表示后面跟的是TCP上層協議報頭,也就意味著本數據包沒有其他的擴展報頭了。
注:
下一報頭字段的作用是將多個IPv6報頭鏈接在一起,鏈條的末尾是IPv6包的數據部分。
RFC 2460建議同一個數據包使用多個擴展報頭時,這些擴展報頭的出現順序如下:
1.IPv6基本報頭;
2.逐跳選項報頭;
3.目的選項報頭;
4.路由報頭;
5.分段報頭;
6.AH報頭;
7.ESP報頭;
8.目的選項報頭;
9.上層協議報頭。
2.4.1 逐跳選項擴展報頭
逐跳選項報頭用于承載選項信息,并且數據包傳送路徑上每臺路由器都必須處理這些信息。逐跳選項報頭是與IPv4選項字段類似的包含可變長度選項字段的兩個擴展報頭之一,顧名思義,逐跳選項報頭是一種要求傳送路徑上每臺路由器都必須處理的擴展報頭。
注:
目的選項報頭是另一種使用選項的擴展報頭,顧名思義,該擴展報頭包含的信息只傳遞給目的端,本節將在最后詳細討論目的選項報頭。
下面就來分析一下選項的使用。選項為IPv6包提供了很好的靈活性,可以通過擴展報頭標準組中未定義的一組值對IPv6包進行補充定義,這組值也被稱為TLV(Type-Length-Value,類型-長度-值)三元組。目前已經定義了兩種使用選項的擴展報頭:逐跳選項報頭和路由選項報頭。如圖2-8所示,這兩類擴展報頭都有下一報頭字段和報頭擴展長度字段,然后是一個或多個選項組,每個選項都包含一組選項類型(Option Type)字段、選項長度(Option Length)字段和選項數據(Option Data)字段(即TLV)。
圖2-9顯示了包含巨包凈荷選項(Jumbo Payload Option)的逐跳選項報頭格式。巨包凈荷選項用于表示該IPv6包大于65 535字節。由于這是逐跳選項,因而路徑上的所有路由器都必須檢查該信息。
下面列出了與逐跳選項擴展報頭相關的字段信息。
IPv6基本報頭:下一報頭(Next Header,8比特):除了IPv6基本報頭的其他信息之外,還有一個值為0的下一報頭字段,表明基本報頭后面有一個逐跳選項擴展報頭。
逐跳選項擴展報頭。
下一報頭(Next Header,8比特):下一報頭字段值為6,表明該報頭后面是TCP報頭,沒有其他擴展報頭。
報頭擴展長度(Header Extension Length,8比特):表示以八位組為單位的逐跳選項報頭的長度,不包含第一個八位組。可以有多個選項,每個選項都包含一個TLV(選項類型、選項長度和選項數據字段)。
選項類型(Option Type,8比特):表示該報頭所承載的選項類型,十六進制值C2表明這是一個巨包凈荷選項。
選項長度(Option Length,8比特):表示選項數據字段中的字節數,值4表示選項數據長度為4字節(32比特)。
選項數據(可變長度):本例中的數據是巨包凈荷長度。巨包凈荷長度是一個32比特字段,表示以字節為單位的IPv6包大小,不包括IPv6報頭,但包括逐跳選項擴展報頭以及其他擴展報頭。巨包凈荷長度必須大于65 535字節,最大可以達到4 294 967 295字節。
TCP報文段:由于只有一個選項且沒有其他擴展報頭,因而后面跟著的是TCP報文段,從前面的逐跳選項擴展報頭中下一報頭值為6即可看出。
如果使用了逐跳選項擴展報頭,那么該報頭必須緊跟在IPv6基本報頭之后。
2.4.2 路由擴展報頭
路由擴展報頭允許數據包源端指定去往目的端的路徑,該報頭包含去往數據包目的端路徑上的一臺或多臺中間路由器,該功能與IPv4使用的松散源路由選項非常類似,路由擴展報頭由前一個報頭中的下一報頭值43來標識。
圖2-10顯示了路由類型為2(在IPv6中支持移動性)的路由擴展報頭結構。該擴展報頭允許將數據包從通信端直接路由到移動節點的轉交地址(Care-of Address),擴展報頭提供了移動節點的當前位置信息。
下面列出了與路由擴展報頭相關的字段信息。
下一報頭(Next Header,8比特):表示路由擴展報頭后面下一個報頭的類型,要么是其他的擴展報頭,要么是凈荷協議。
報頭擴展長度(Header Extension Length,8比特):表示以八位組為單位的路由報頭的長度,不包含第一個八位組。
路由類型(Routing Type,8比特):值為2。
剩余段(Segments Left,8比特):值為1。
保留(Reserved,32比特):該字段被保留,傳輸時被初始化為0,并且被接收端忽略。
家鄉地址(Home Address,128比特):表示目的端移動節點的家鄉地址。
注:
有關路由器如何處理路由擴展報頭的內容超出了本書范圍,如果感興趣,可以參考RFC 2460或Cisco Press出版的Cisco Self-Study: Implementing Cisco IPv6 Networks”。許多ISP對源節點在數據包的下一跳選擇問題上持懷疑態度,通常都會根據管理需要阻塞包含了路由擴展報頭的數據包,目前唯一有效的路由擴展報頭就是類型2,該類型報頭用于IPv6中的移動性支持。
2.4.3 分段擴展報頭
如圖2-11所示,分段擴展報頭與IPv4報頭中用于分段目的的字段相似。當IPv6數據包的源端需要將數據包分段并將每個分段都作為一個單獨的數據包進行發送時,就需要用到分段擴展報頭。數據包的接收端再重組這些分段后的數據包,每個數據包都有自己的IPv6基本報頭和分段擴展報頭。
與IPv4不同,對每個被分段的數據包來說,源端會生成一個唯一的標識值,并且每個分段后的數據包中都會包含該標識值。該標志值可以確保接收端能夠正確地重組來自原始數據包的各個片段。如果源端還需要對同一條消息中的其他數據包進行分段,那么就要使用不同的標志值。
下面列出了與分段擴展報頭相關的字段信息。
下一報頭(Next Header,8比特):表示原始數據包被分段后的數據的協議號。
保留(Reserved,8比特):該字段被保留,傳輸時被初始化為0,并且被接收端忽略。
分段偏移(Fragment Offset,13比特):表示被分段后的數據在該報頭之后的相對偏移量或位置,以八位組為單位。與IPv4報頭中的分段偏移相似,該字段的目的是指示接收端如何將該分段后的數據包與其他分段后的數據包進行排列。
Res(2比特):該字段被保留,傳輸時被初始化為0,并且被接收端忽略。
M標志(M flag,3比特):M(More Fragments,更多分段)標記用來表示是否是最后一個分段(比特0)或者后面還有更多分段(比特1),該字段與IPv4報頭的更多分段標志(More Fragments Flag)相似。
標識符(Identification,32比特):該字段與IPv4報頭的標識符字段相似,用來唯一的標識同一個原始數據包中的所有分段數據包,該字段從IPv4中的16比特擴充到IPv6中的32比特。
2.4.4 IPSec:AH和ESP擴展報頭
IPv6利用以下兩種擴展報頭來實現IPSec中的兩種關鍵的安全協議:
AH(Authentication Header,認證頭);
ESP(Encapsulating Security Payload,封裝安全凈荷)。
1.IPSec
在討論AH和ESP擴展報頭之前,首先簡要回顧一下IPSec以及這兩種安全協議的主要功能,目的不是要求大家完全掌握IPSec、AH和ESP,而是希望為大家理解其重要性以及在IPv6中的使用分方法提供足夠的背景知識。
IPSec是保障數據包在IP網絡中傳輸安全性的一組協議集。
AH和ESP是為整個IPv6包或部分IPv6包提供認證與完整性功能的主要安全協議,此外,ESP還能夠提供加密功能。
注:
IPSec是IPv4和IPv6的一部分,但實現IPv4協議棧的設備并不強制要求提供IPSec功能,早期的RFC要求所有的IPv6實現都必須強制支持IPSec,描述方式是“必須支持”IPSec,不過最新的RFC 6343“IPv6 Node Requirements”放松了這一要求,相應的描述方式調整為“應該實現”IPSec。
AH可以提供數據包的真實性和完整性保證,認證(Authentication)的作用是確保數據包的發送方和接收方身份都是真實的,完整性(Integrity)的作用是保證數據包在發送途中未被更改。AH可以提供認證和完整性功能,但不提供加密功能,加密(Encryption)是利用一定的算法(被稱為密碼)轉換信息(通常是明文)的過程,以確保只能由擁有特殊信息(通常稱為密鑰)的接收方讀取。
ESP可以提供認證、完整性和加密功能,ESP不僅可以保護數據包不被中間設備更改,而且還能保護數據包的內容不被查看,ESP有自己的認證方案,也可以與AH配合使用。總得來說,AH僅提供認證和完整性功能,而ESP除了提供認證和完整性功能之外,還能對數據包進行加密。
到現在為止,還沒有說到究竟需要對數據包的多少內容進行認證或加密,這個問題的答案取決于IPSec的工作模式,即傳輸模式或隧道模式。
2.傳輸模式與隧道模式
顧名思義,傳輸模式保護傳輸層及更高層,仍然使用原始的IP報頭。由于原始的源IP地址和目的IP地址都在IP基本報頭內,因而中間設備路由器不是IPSec的參與者。傳輸模式通常用于主機之間的通信。
隧道模式用于保護IP包的全部內容,包括IP報頭。實現方式是將原始IP包(包括IP報頭)封裝到一個新的IP報頭中,隧道端點作為新的源IP地址和目的IP地址,隧道端點可以是路由器或主機本身。隧道模式可以保護整個IP包,而傳輸模式不行。圖2-12解釋了傳輸模式與隧道模式之間的區別。
下面將開始討論AH擴展報頭和ESP擴展報頭,如果是初次接觸IPSec,那么對某些內容感到困惑是完全可以理解的。
2.4.5 ESP擴展報頭
ESP擴展報頭是一種可變長度的擴展報頭,如前所述,該報頭用于提高認證、完整性和加密等功能,ESP擴展報頭是由前一個報頭中的下一報頭字段值50來標識的。
圖2-13顯示了ESP擴展報頭的結構,ESP擴展報頭可以分為4部分。
ESP報頭:SPI(Security Parameter Index,安全參數索引)和序列號字段。
凈荷:ESP凈荷數據字段。
ESP報尾:填充、填充長度以及下一報頭字段。
ESP認證數據。
圖2-13顯示了ESP擴展報頭的各個字段,ESP被視為端到端通信機制,也就是說,路徑上的路由器不會處理ESP報頭。請注意,ESP為原始數據包提供了認證完整性與機密性機制,因此,ESP擴展報頭被封裝在IPv6基本報頭、逐跳選項擴展報頭、路由擴展報頭以及分段擴展報頭之后(如圖2-14所示)。對IPv6來說,加密操作會涵蓋整個傳輸層報文段、ESP報尾以及目的選項擴展報頭(如果目的選項擴展報頭位于ESP報頭之后),目的選項擴展報頭可以位于ESP報頭之前或之后,這取決于設計意圖。
與前面討論過的擴展報頭不同,有關ESP擴展報頭各個字段的內容已超出了本書范圍,需要大家對IPSec有比較深入的認識和理解,如果大家初次接觸IPSec,那么對某些內容感到困惑是完全可以理解的,有關IPSec的詳細信息,可參考Cisco Press出版的由James Henry Carmouche編寫的圖書IPSec Virtual Private Network Fundamentals,這是一本非常好的學習IPSec知識的圖書。
AH擴展報頭
AH擴展報頭也是一種可變長度的擴展報頭,與ESP不同的是,AH僅提供認證和完整性功能,并不使用加密機制來提供機密性功能,AH擴展報頭是由前一個報頭中的下一報頭字段值51來標識的。
圖2-15顯示了AH擴展報頭的結構,與ESP一樣,AH也被視為端到端通信機制,請注意,AH僅提供數據的完整性機制,可以確保通信參與方的身份,并且接收方可以據此檢測出數據包內容在傳送過程中是否被更改。與ESP相似,AH擴展報頭也被封裝在IPv6基本報頭、逐跳選項擴展報頭、路由擴展報頭以及分段擴展報頭之后(如圖2-16所示)。目的選項擴展報頭可以位于ESP報頭之前或之后,這取決于設計意圖。
與其他IPSec擴展報頭一樣,有關AH擴展報頭各個字段的內容已超出了本書范圍,需要大家對IPSec有比較深入的認識和理解。
2.4.6 目的選項擴展報頭
目的選項擴展報頭用于承載僅需要數據包目的節點處理的選項信息,除了逐跳選項擴展報頭之外,目的選項擴展報頭是另一個使用選項的擴展報頭,目的選項擴展報頭是由前一個報頭中的下一報頭字段值60來標識的。如圖2-17所示,目的選項擴展報頭的格式如下。
下一報頭(Next Header,8比特):用于標識目的選項擴展報頭后面的報頭類型,既可以是其他擴展報頭,也可以是凈荷協議。
報頭擴展長度(Header Extension Length,8比特):表示以八位組為單位的目的選項擴展報頭的長度,不包含第一個八位組。
選項(可變長度):該字段包含一個和多個采取TLV編碼的選項。
選項類型(Option Type,8比特):表示該報頭所承載的選項類型。
選項長度(Option Length,8比特):表示選項數據字段中的字節數。
選項數據(可變長度):即數據包的數據內容。
注:
有關目的選項擴展報頭的一種建議使用方式是IPv6的移動性支持,相關內容定義在RFC 6275“Mobility Support in IPv6”。
“對每個移動節點來說,無論其連接互聯網的當前附著點在哪里,都是由其家鄉地址來標識的。當移動節點離開家鄉時,就會與一個轉交地址產生關聯,轉交地址可以提供該移動節點的當前位置信息,傳送給移動節點的IPv6數據包都會被透明路由到這個轉交地址,協議要求IPv6節點緩存移動節點的家鄉地址與轉交地址之間的綁定關系,然后就可以將發送給該移動節點的數據包直接發送給轉交地址。為了支持該操作,移動IPv6定義了一個新的IPv6協議和一個新的目的選項,這樣一來,所有IPv6節點(移動節點或固定節點)都能與移動節點進行通信。”
2.4.7 無下一報頭
下一報頭字段值為59時表示該報頭后面無其他數據。它僅僅是一個占位符,表示該報頭后面無任何數據。假如凈荷長度指示該報頭后面還有其他字節,那么這些字節都會被忽略。
總結
以上是生活随笔為你收集整理的《IPv6技术精要》一2.4 扩展报头的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《信息存储与管理(第二版):数字信息的存
- 下一篇: 《虚拟化安全解决方案》一1.1 虚拟化架