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