IPv6標頭架構與IPv4比較解析

格式
pdf
大小
2.78 MB
頁數
24
收藏 ⬇️ 下載檔案
提示: 文件格式为 pdf,轉換可能會出現排版或格式的些許差異,請以實際檔案為準。
此檔案建立於 2015-05-05,离现在 10 186 天,建議確認內容是否仍然適用。
PDF 加载中...
background image

本章將說明

 IPv6 標頭架構,並與 IPv4 標頭做比較。並將討論 IPv6 新出現的 Extension  

標頭。

瞭解通訊協定標頭架構與伴隨的資訊型態,是處理通訊協定的首要基本功。對此瞭解有助

於確認通訊協定最佳組態方式與選項用途。在問題修復時,亦有助於確認可能的問題來源

與爭議。

IPv6 封包標頭架構規格定義於 RFC 2460。標頭擁有固定長度 40 位元組。針對 Source 與 
Destination 位址兩個欄位分別使用 16 位元組(128 位元),因此通用標頭訊息僅 8 位元
組。

Base IPv6 標頭因此比 IPv4 標頭更簡單精實,可做更有效率的處理,我們將會看到,

它擴充了通訊協定滿足未來需求更具彈性。

通用標頭架構

IPv6 移除五個來自 IPv4 的標頭:

z

z

Header Length

z

z

Identification

z

z

Flags

z

z

Fragment Offset

z

z

Header Checksum

IPv6 通訊協定架構

第三章

background image

50

   

第三章

Header  Length  移除是由於固定標頭長度之後已不再需要。IPv4  最小標頭長度為  20  位
元組,但若添加選項,則以

 4 位元組為單位增加,擴充到 60 位元組。因此,對 IPv4 而

言,標頭總長相關資訊非常重要。在

 IPv6 下,選項定義於 Extension 標頭(本章稍後將 

提及)。

Identification、Flags 與 Fragment Offset 欄,皆用於分段 IPv4 標頭裡的封包。當大型封包
必須在僅支援較小封包的網路上傳送時就會產生

 Fragmentation。這種狀況下,IPv4 路由

器會將封包切割成較小片段,再轉送多個封包。目的地主機會收集這些封包再重組。若只

遺失一個封包或一個封包有誤,整個傳輸過程式重來,會很沒效率。

IPv6 下,主機透過 

RFC 1981 裡定義的 Path MTU Discovery 處理程序,得知 Path Maximum Transmission Unit

MTU)大小。IPv4 裡的 Don't Fragment Bit(DF Bit)就是用於 Path MTU Discovery。

若路由器因封包大小無法轉送封包,又因為設定了

 DF Bit 而不能分段,會回傳 ICMP 的

Packet Too Big」訊息給來源端點。若傳送 IPv6 的主機要分段封包,它會使用 Extension 

標頭來做。

IPv6 路由器會依循不分段封包的路徑,就像在 IPv4 裡那樣。因此路由器一定

會回傳「

Packet Too Big」訊息給來源端點。這就是IPv6 標頭移除 Identification、Flags 與 

Fragment Offset 欄位,由來源主機視需求決定是否插入 Extension 標頭的理由。稍後本章
會解釋

 Extension 標頭。

  第四章解說 Path MTU Discovery。 

移除

 Header Checksum 欄是為了改善處理速度。若路由器不必檢查與更新 checksum,就能

更快處理。

IPv4 開發之際,在媒體存取層作 checksum 還不普遍,因此 checksum 欄出現

 IPv4 標頭很合理。而今,未偵測到錯誤與錯誤路由封包的風險非常小。傳輸層(UDP 

 TCP)下還是有 checksum 欄。使用 IPv4,UDP checksum 為選擇性,使用 IPv6,UDP 

checksum 為強制性。由於 IP 屬於 

盡力傳送

best-effort delivery)通訊協定,確保完整性

是上層通訊協定的責任。

Traffic Class 欄取代 IPv4 的「Type of Service」欄。IPv6 有不同的機制處理偏好。IPv4 
裡的

 Protocol Type 欄更名為 Next Header 欄,而 Time-to-Live(TTL)欄則更名為 Hop 

Limit。Flow Label 欄為加入的欄位。

background image

IPv6 通訊協定架構

   

51

IPv6 標頭欄位

熟悉

 IPv6 標頭欄位,可更瞭解 IPv6 運作方式。

 3-1 提供了 IPv6 標頭概述。這些欄位於下列清單有詳盡探討。

 3-1  IPv6 標頭欄位

 3-1 顯示了即便標頭總共 40 位元組,為預設 IPv4 標頭的兩倍,但其實很有效率,因為

大部份標頭已由兩組

 16 位元組的 IPv6 位址填滿。剩下只有 8 位元組給其餘標頭資訊。

Version

位元

 4 位元欄位內容為通訊協定版本。在 IPv6 下,數字為 6。版本編號 5 不能用,因為

已被指派給實驗性資料流通訊協定(

RFC 1819)。

Traffic class

位元組

此欄位置換

 IPv4 的 Type of Service 欄。幫助即時資料處理,與需要特殊處理的其他

資料,而傳送節點與轉送的路由器可以利用它確認與辯識

  IPv6  封包裡各種類別與優 

先權。

RFC 2474「Definition of the Differentiated Services Field(DS Field)in the IPv4 and IPv6 
Headers」說明如何利用 IPv6 的 Traffic Class 欄。RFC 2474 用 DS Field 這個字指 IPv4 
標頭的

 Type of Service 欄,以及 IPv6 標頭的 Traffic Class 欄。

通訊協定版本

用來辯認

 IPv6 封包中不同的優先權。 

更多資訊請參考

 RFC 2474。

IPv6 標頭後所攜帶的資料長度。

用來為路由上的封包依序貼上標籤,

 

使處理更有效率。

Extension 標頭包含的通訊協定數字或值。 
請參閱表

 3-1。

中繼器(

hops)數量值。 

每經過一個路由都會將之減

1。

background image

52

   

第三章

  參考第五章可瞭解 Traffic Class 欄使用的更多資訊。 

Flow label20 

位元

此欄位識別為促進即時流量封包處理而必須一視同仁的封包。傳送主機可以一組選項為

封包依序貼上標籤。路由器對資料流保持追蹤,且能夠更有效率處理屬於相同資料流的

封包,因為無須重新處理每個封包標頭。資料流標籤與來源端位址可以當成資料流唯一

識別。不支援

 Flow Label 欄位功能的節點,轉送封包時需傳送未經更動的欄位,接收封

包時則忽略該欄位。所有屬於相同資料流的封包必須擁有相同

 Source 與 Destination IP 

位址。

  使用 Flow Label 欄屬實驗性質,撰文此時仍處於 IETF 討論狀態。參考第五章

可瞭解更多資訊。

Payload length

位元組

此欄定義

 

負載

payload)── 例如 IPv6 標頭後所攜帶的資料長度。IPv6 計算方式與 

IPv4 不同。IPv4 的 Length 欄包含 IPv4 標頭長度,但 IPv6 的 Payload Length 欄僅接續 
IPv6 標頭後的資料。Extension 標頭被視為負載的一部份,因此會計算進去。

事實上

  2  位元組的  Payload  Length  欄將最大封包負載大小限制在  64  KB。IPv6  有 

Jumbogram Option,在必要時可支援更大封包。Jumbogram Option 攜於 Hop-by-Hop 
Option 標頭(將於本章稍候探討)內。Jumbograms 只有在 IPv6 節點附加至連結 MTU 
大於

 64 KB 連結時才會派上用場,它們定義於 RFC 2675。

Next Header

位元組

IPv4 下,此欄位稱之為 Protocol Type 欄,但 IPv6 將之更名,反映 IP 封包新的組織方
式。若下一個標頭為

 UDP 或 TCP,此欄內容為與 IPv4 相同通訊協定編號,例如 TCP 

的通訊協定編號

 6,或 UDP 的 7。但若在 IPv6 使用 Extension 標頭,此欄內容則為下一

 Extension 標頭型態。Extension 標頭定位在 IP 標頭與 TCP 或 UDP 標頭之間。表 3-1 

列出了

 Next Header 欄可能值。IPv6 相關新標頭以粗體顯示。

background image

IPv6 通訊協定架構

   

53

 3-1  Next Header 欄位值       

說明

0

IPv4 標頭:保留未使用 
IPv6 標頭:Hop-by-Hop Option 標頭之後

1

Internet Control Message Protocol(ICMPv4)—IPv4 支援

2

Internet Group Management Protocol(IGMPv4)—IPv4 支援

4

IPv4

5

Stream Protocol(RFC 1819)

6

TCP

8

Exterior Gateway Protocol(EGP)

9

IGP

 ── 

任一私有內部閘道器(用於

 Cisco IGRP)

17

UDP

41

IPv6

43

路由標頭

44

分段標頭

45

域間路由通訊協定(

Interdomain Routing Protocol;IDRP)

46

資源預留通訊協定(

Resource Reservation Protocol;RSVP)

47

一般路由封裝(

General Routing Encapsulation;GRE)

50

Encapsulating Security Payload 標頭

51

身份認證標頭

58

ICMPv6

59

IPv6 的 No Next Header

60

Destination Options 標頭

88

EIGRP

89

OSPF

103

PIM

108

IP負載壓縮通訊協定(IP Payload Compression Protocol)

115

Layer 2 Tunneling Protocol(L2TP)

132

Stream Control Transmission Protocol(SCTP)

135

Mobility Header(Mobile IPv6)

background image

54

   

第三章

說明

140

Shim6(RFC 5533)

143–252 

未指派

253, 254 

用於實驗與測試性質(

RFC 3692)

255

保留

標頭型態編號源自通訊協定型態編號相同範圍數字,因而不致混淆。

[54]

  在

http://www.iana.org/assignments/protocol-numbers 可找到現行清單。 

Hop limit

位元組

此欄與

 IPv4 的 TTL 欄類似。最初,IPv4 TTL 欄內含秒數,指出封包被丟棄前在網路裡

停留了多久時間。事實上,

IPv4 路由器每跳一個點就減去此值。此欄在 IPv6 裡更名為 

Hop Limit 反映這樣的處理。此欄位裡的值表示中繼器(hops)數量。每個轉送節點都
會將此數字減

 1。若路由器接收 Hop Limit 為 1 的封包,會被減成 0,丟棄封包,然後

回傳

 ICMPv6 訊息「Hop Limit exceeded in transit」給傳送者。

Source address16 

位元組

此欄內容為封包發起者

 IP 位址。

Destination address16 

位元組

此欄內容為封包預期接收者

 IP 位址。可以是最終目的地,或在出現 Routing 標頭時,可

為下一個中繼路由器位址。

 3-2 顯示了追蹤檔 IPv6 標頭。

background image

IPv6 通訊協定架構

   

55

 3-2  追蹤檔的 IPv6 標頭

此追蹤檔顯示所有探討的標頭欄位,說明它們在追蹤檔裡的呈現方式。

Version  欄為  6 

 IPv6。Traffic Class(Priority)與 Flow Label 欄在此封包裡未使用,設為 0。Payload 

Length 為 40,且 Next Header 值設為 58 指 ICMPv6。Hop Limit 設為 128 且 Source 與 
Destination 位址內含我的 IPv6 節點 link-local 位址。細節資訊視窗第一行顯示 

Ethertype 

0x86DD

。此值指出這是

 IPv6 封包。若為 IPv4 封包,值為 

0x0800

。此欄位可用於設定分析

器過濾所有原生

 IPv6 封包。

  分析器工具程式可以以不同方式解碼。若使用其他分析器版本或型態,解碼看

起來就會稍有不同。差異不在封包,而是封包在分析器介面裡的呈現方式。

Extension 標頭

IPv4 標頭可以為了 Security Options、Source Routing 或 Time stamping 這類特殊選項,從
最小值

 20 位元組擴充到最大值 60 位元組。此功能極少使用,因為會導致效能衝擊。例

如,

IPv4 硬體轉送實作就必須傳遞涵蓋選項的封包給主要處理器(軟體處理)。

簡化封包標頭,可以加快處理程序。

IPv6 提供新的方式處理選項,充份改善處理程序:

它以所謂

 Extension 

標頭

的方式處理額外選項。

Extension 標頭只在選項需要時才插入封

包。大部份情況下,只有最終目的地要處理

 Extension 標頭,中間裝置不用。

background image

56

   

第三章

時下

 IPv6 規格文件定義六個 Extension 標頭,所有 IPv6 節點皆須支援:

z

z

Hop-by-Hop Options 標頭

z

z

Routing 標頭

z

z

Fragment 標頭

z

z

Destination Options 標頭

z

z

Authentication 標頭

z

z

Encapsulating Security Payload 標頭

IPv6 封包裡可以有 0 個、1 個甚至 1 個以上的 Extension 標頭。Extension 標頭位於 IPv6 
標頭與上層通訊協定標頭之間。每個

 Extension 標頭僅由 IPv6 標頭 Destination 位址裡認

定的節點檢查與處理。若

 Destination address 欄裡的位址為多點傳送位址,則 Extension 標

頭由屬於該多點傳送群組的所有節點檢查與處理。

Extension 標頭必須由出現在封包標頭

裡的確切順序處理。

只有目的地節點處理

 Extension 標頭的規則有個例外。若 Extension 標頭為 Hop-by-Hop 

Options 標頭,則其攜帶的資訊必須由封包路徑沿線所有節點檢查與處理。如有 Hop-by-
Hop Options 標頭,必須緊接於 IPv6 標頭後。會以 IPv6 標頭 Next Header 欄值為 0 的方式
表示(見本章先前表

 3-1)。

  前四個 Extension 標頭說明於 RFC 2460。Authentication 說明於 RFC 4302,

 Encapsulating Security Payload 標頭則在 RFC 4303 裡。Extension 標頭的

未來更新將於

 RFC 6564 定義。

這種架構對未來必須開發額外

 Extension 標頭來說非常彈性。可定義新 Extension 標頭使

用之,無須變更

 IPv6 標頭。定義 Mobile IPv6(RFC 6275)的 Mobility 標頭就是不錯的例

子,這將於第八章探討。

 3-3 說明了 Extension 標頭使用方式。

background image

IPv6 通訊協定架構

   

57

 3-3  Extension 標頭的使用

每個

 Extension 標頭長度為八位元組倍數,因此接續標頭一定是對齊的。若節點被要求

處理下一個標頭,但無法辯識

 Next Header 欄裡的值,就必須拋棄封包並回傳 ICMPv6 

Parameter Problem 訊息給封包來源。

  ICMPv6 訊息詳細內容,請參考第四章。 

若在單一封包中使用一個以上的

 Extension 標頭,應使用下列標頭順序(RFC 2460):

1.   IPv6 標頭  

2.   Hop-by-Hop Options 標頭

3.   Destination Options 標頭(由 IPv6 Destination 位址欄裡出現的第一個目的地處理的

選項,加上列於

 Routing 標頭裡接續的目的地)

4.   Routing 標頭

5.   Fragment 標頭

6.   Authentication 標頭

7.   Encapsulating Security Payload 標頭

8.   Destination Options 標頭(只有封包最後目的地要處理的選項)

9.   Upper-Layer 標頭

background image

58

   

第三章

RFC 2460 留下詮釋的空間。雖然這是建議順序,但 IPv6 節點一定會試圖以各種順序處

 Extension 標頭。不過還是強烈建議 IPv6 封包來源使用建議的順序,除非有新規格文件 

修訂。

 IPv4 裡封裝 IPv6 時,Upper-Layer 標頭可以是另一個 IPv6 標頭,且可包含必須依循相

同規則的

 Extension 標頭。

Hop-by-Hop Options 標頭

Hop-by-Hop Options 標頭攜有必須由封包沿途路徑所有節點檢查的選擇性資訊。它必須緊
接在

 IPv6 標頭後,並以 Next Header 值為 0 的方式表示。舉例來說,Router Alert(RFC 

2711)使用 Hop-by-Hop Options 指出像 Resource Reservation Protocol(RSVP)這類通訊
協定、

Multicast Listener Discovery(MLD)訊息,或 Jumbogram Option。使用 IPv4,路

由器決定是否需要確認資料流的唯一方式是:在整個資料流裡至少局部解析上層資料。這

種處理方式會嚴重拖慢路由處理過程。使用

 IPv6,缺乏 Hop-byHop Options 標頭時,路由

器知道它不需要處理路由器專用資訊,並能立刻將封包路由至最後目的地。如有

 Hop-by-

Hop Options 標頭,路由器只需要確認這個標頭,不必進一步查探進入封包。

Hop-by-Hop Options 標頭格式如圖 3-4 所示。

 3-4  Hop-by-Hop Options 標頭格式

以下列出各欄說明:

Next Header

位元組

Next Header 欄確認接在 Hop-by-Hop Options 標頭後的標頭型態。Next Header 欄使用表 
3-1 所列的值,本章稍早已做說明。

選項型態

選項資料長度

接續標頭識別符型態。

 

參考表

 3-1。

含括一或多個選項

以八位元組為單位的

 Hop-by-Hop 選項標頭長度,

不包括第一組八位元組。

background image

IPv6 通訊協定架構

   

59

Extension Header Length

位元組

此欄以八位元組為單位確認

 Hop-by-Hop Options 標頭長度。長度計算不包括第一個八位

元組。所以若標頭比八位元組還短,此欄內容值為

 0。

Options

變量

可為一或多個選項。選項長度可變動,由

 Header Extension Length 欄決定。

Option Type 欄為 Options 欄第一個位元組,內容為處理的節點無法識別此選項時,如何處
理選項的資訊。前兩個位元指定採取動作:

z

z

00:跳過並繼續處理。

z

z

01:丟棄封包。

z

z

10:丟棄封包並傳送 ICMP Parameter Problem, Code 2 訊息至封包 Source 位址,點出
不認識此選項型態。

z

z

11:僅在目的地非多點傳送位址時丟棄封包,並傳送 ICMP Parameter Problem, Code 
2 訊息至封包 Source 位址。

Options Type 欄第三位元指出在路由中選項資訊可改變(值 1),或不可改變(值 0)。

選項型態

 Jumbogram

Hop-by-Hop Option Type 支援 IPv6 Jumbograms 傳送。IPv6 Payload Length 欄支援最大封

 65,535 位元組。Jumbo Payload Option(RFC 2675)允許傳送更大封包。

IPv6 標頭帶有 Jumbo Payload 選項的封包裡,Payload Length 欄位設定為 0。Next Header 
欄內容為值

 0,表示 Hop-by-Hop Options 標頭。Option Type 值為 194 表示 Jumbo Payload 

選項。

Jumbo Payload Length 欄有 32 位元,因此支援介於 65,536 與 4,294,967,295 位元組

的封包傳輸。

RFC 2675 還定義在需要支援 Jumbograms 傳送的主機中必須實作的 UDP 與 

TCP 擴充。Jumbograms 路徑上所有裝置都必須支援此選項。

選項路由器警示

 Option Type 指示路由器,該封包內含重要訊息轉送封包時必須處理。此選項現在大多

 MLD(Multicast Listener Discovery)與 RSVP(Resource Reservation Protocol)使用。

它定義於

 RFC 2711,而該 RFC 已由 RFC 6398 更新。

background image

60

   

第三章

RSVP  控制內含必須由沿途路由器詮釋或更新的資訊。這些控制封包使用  Hop-by-Hop 
Options 標頭,因而僅路由器處理封包,正規資料封包沒有這類 Extension 標頭,因此會立
即轉送路由器無須做進一步檢查。

Option Type 欄前三個位元設定為 0。不認得這個選項的路由器會忽略並轉送封包。第一個
位元組剩下的五個位元中,選項型態

 5 已定義。Option Data Length 欄內容為值 2,表示接

下來欄位值為兩個位元組長度(參考圖

 3-4)。

  此  Router  Alert  值清單可於 http://www.iana.org/assignments/ipv6-routeralert-

values 找到。

 3-5 顯示了追蹤檔裡的 Hop-by-Hop Options 標頭。

 3-5  追蹤檔裡的 Hop-by-Hop Options 標頭

螢幕截圖顯示了封包編號

  10  的詳細內容。這是  MLDv2  Multicast  Listener  Report 

Message。如前面所述,這些多點傳送註冊訊息必有  Hop-by-Hop  Options  標頭(Next 
Header 值 0),因為這是路由器無須轉送的封包,但它必須處理內容資訊。你會發現 Hop 
Limit 設為 1 指出這是 MDL 訊息;Destination 位址 

ff02::16

 指 MLDv2 路由器多點傳

送位址;

Hop-by-Hop Options 標頭內容值 58 指 ICMPv6 下一個標頭欄位;Length 欄與 

Router Alert 選項型態 5 的 value 欄為 0 指 MLD。

background image

IPv6 通訊協定架構

   

61

路由標頭

Routing 

標頭

提供一或多個封包路徑到其目的地間應拜訪的中間節點清單。在

 IPv4 世界,

稱之為

 Loose Source Route 選項。Routing 標頭可由前一個標頭裡的 Next Header 值設為 43 

辯識。圖

 3-6 顯示了 Routing 標頭格式。

 3-6  Routing 標頭格式

以下列出各欄位說明:

Next Header

位元組

Next Header 欄確認 Routing 標頭之後的標頭型態。使用與 IPv4 Protocol Type 欄位裡的
相同值(見本章先前表

 3-1)。

Extension Header Length

位元組

此欄識別以八位元組為單位的

 Routing 標頭長度。長度計算不包含第一組八位元。

Routing Type

位元組

此欄確認

 Routing 標頭型態。RFC 2460 陳述的 Routing Type 0 基於安全性理由已被 RFC 

5095 推翻。Mobile IPv6 規格文件定義 Routing Type 2(此規格文件於第八章探討)。撰
文此時有部份草案仍在處理中,它們定義名為

 Segment Routing 標頭的新片段路由結構

與新路由標頭型態。本章最後

 draft 處可以找到這些草案。這些規格文件能否能出現,

在你讀到這裡時就會知道。

Segments Left

位元組

此欄確認封包抵達其最終目的地前,還有多少節點要拜訪。

接續標頭的識別符長度。

 

參考表

 3-1。

路由標頭識別符型態。

視路由型態而定。

以八位元組為單位的路由標頭長度,
不包括第一組八位元組。

直至最終目的地的表列節點數。

background image

62

   

第三章

Type-Specific Data

變動長度

此欄長度端視

 Routing Type 而定。完整標頭必為八位元倍數。

若處理

 Routing 標頭的節點無法確認 Routing Type 值,將視 Segments Left 欄內容採取

行動。若

 Segments Left 欄未涵蓋任何需拜訪節點,節點必須忽略 Routing 標頭接著處理

封包下一個標頭,這是由

 Next Header 欄位值決定。若 Segments Left 欄非零,節點必須

丟棄封包並傳送

 ICMP Parameter Problem, Code 0 訊息給封包 Source 位址,指出不認識

 Routing Type。若轉送節點因下一個連結 MTU 太小無法處理封包,會丟棄封包並傳送 

ICMP Packet Too Big 訊息回傳予封包來源。

 3-7 顯示了追蹤檔裡的 Type 2 Routing 標頭。

 3-7  追蹤檔裡的 Routing 標頭 Type 2

為表示

 Type 2 Routing 標頭必須採取 Mobile IPv6 追蹤,此規格文件定義這類 Routing 標頭

型態。

IPv6 標頭裡的 Next Header 欄以顯示值 43 表示 Routing 標頭。Routing 標頭涵蓋本

段稍前探討的欄位。路由標頭中

 Next Header 值為 135 時指出它是 Mobility 標頭。Header 

Length 內容為兩個八位元組,會被添加為總長 16 位元組的長度(一個位址)。Segments 
Left 欄內容為值 1,因為 Options 欄裡為一筆位址紀錄。最後,Options 欄會列出帶有本地
位址的

 Home Address 選項。

  參考第八章可以找到在 Mobility 上使用 Routing 標頭的方式。 

background image

IPv6 通訊協定架構

   

63

關於新

 Routing 標頭選項的例子,可以參考 RFC 6554「An IPv6 Routing Header for Source 

Routes with the Routing Protocol for Low-Power and Lossy Networks(RPL)」。在 Low-
power and Lossy Networks(LLNs)下,路由器記憶體多半相當有限,僅允許少量預設路
由且沒有其他目的地。這份

 RFC 定義 Source Routing HeaderSRH),嚴格限定 RPL 路

由器間使用。

 

Fragment Header

要傳送封包至

 IPv6 目的地的 IPv6 主機,使用 Path MTU 探索可確認為到達目的地的路徑

上最大封包大小。若被傳送的封包大於支援的

 MTU,則來源主機會分段處理封包。不同

 IPv4 的是,使用 IPv6 時路徑沿途的路由器不會分段封包。分段動作只發生在傳送封包

的來源主機。目的地主機進行重新組裝。

Fragment 標頭可由前一個標頭的 Next Header 值

 44 確認。Fragment 標頭格式顯示如圖 3-8。

 3-8  Fragment 標頭格式

以下列出各欄位說明:

Next Header

位元組

Next Header 欄確認接在 Fragment 標頭後的標頭型態。使用與 IPv4 Protocol Type 欄相同
值。(見表

 3-1)

Reserved

位元組

未使用,設為

 0。

接續標頭識別符型態。

 

參考表

 3-1。

起始原始封包相關封包資料以八位元組
為單位的

 offset。

來源節點為辨識所有屬於原始封包的封包
所產生的識別符。

 1 = 更多分段。值 0 = 最後分段。

未使用;設為零。

未使用;設為零。

background image

64

   

第三章

Fragment Offset13 

位元

此封包相對於原始封包起始資料的八位元組單位資料偏移量。

Reserved

位元

未使用,設為

 0。

M-Flag

位元

 1 指出有更多分段,值 0 則指最後分段。

Identification

位元組

來源主機為確認所有封包屬於原始封包所產生,此欄通常以計數器的方式實作,每個由

來源主機分段的封包必需加一。

  Fragment 標頭未如 IPv4 含括 Don't Fragment 欄。不需要,因為 IPv6 下的路

由器不再需要分段。只有來源主機可以分段封包。

初始未分段封包稱之為

 

原始封包

。未分段部份由

 IPv6 標頭加上抵達目的地路徑沿途節

點必須處理的所有

 Extension 標頭(例如 Hop-by-Hop Options 標頭)組成。原始封包可分

段部份則為只需最終目的地處理的

 Extension 標頭,加上 Upper-Layer 標頭與所有資料組

成。圖

 3-9(RFC 2460)說明了分段處理程序。

 3-9  IPv6 分段

原始封包不可分段的部份會顯示於每個分段,接在

 Fragmentation 標頭後再接上可分段資

料。原始封包

 IPv6 標頭必須稍作修改。Length 欄會影響分段長度(除了 IPv6 標頭外)而

非原始封包長度。

background image

IPv6 通訊協定架構

   

65

目的地節點收集所有分段再重新組合。所有分段必須擁有相同

 Source 與 Destination 位

址,以及相同識別值以利重組。若有分段未於第一個分段抵達後

  60  秒內到達目的地,

目的地會拋棄所有封包。若目的地已接收第一個分段(

Offset  =  0),會回傳  ICMPv6 

Fragment Reassembly Time Exceeded 訊息至來源處。

 3-10 顯示了 Fragment 標頭。

 3-10  追蹤檔裡的 Fragment 標頭

整組分段由兩個封包組成,第一個顯示如圖

 3-10。IPv6 標頭中,Payload Length 欄位值

 1,456,這是分段標頭與該分段長度,不是整個原始封包長度。Next Header 欄指定為

 44,指的是 Fragment 標頭。此欄接著 Hop Limit 欄與 Source 與 Destination IP 位址。

Fragment 標頭裡第一個欄位為 Next Header 欄。由於這是 ping 的動作,所以內容值 58 指 
ICMPv6。並且因為這是分段組第一個封包,Offset 欄值為 0 且 M-Flag 設為 1,意即不會
再有分段。

Identification 設為 1 且必須與屬於此分段組所有封包一致。圖 3-11 說明分段組

裡的第二個封包。

 3-11  分段組最後一個封包

background image

66

   

第三章

此分段組裡第二與最後封包擁有

 

0x00b5

 的 Offset 值,轉換十進制標記為 181,為第一個

分段長度。

M-Flag 設為 1,指出它是最末封包,告知接收的主機該重組分段了。兩個封包

裡的

 Identification 欄皆設為 1。

RFC 2460 規格文件允許重疊分段,產生安全性疑慮。RFC 5722「Handling of Overlapping 
IPv6 Fragments」說明安全性議題,更新 RFC 2460 並禁止重疊分段。RFC 6980 說明何

 IPv6 分段會因去除安全性機制有效性像是 RA Guard 而變成安全問題,並禁止於傳統 

Neighbor Discovery 訊息使用 IPv6 Fragmentation。

  請參考第四章 Neighbor Discovery 說明,與第六章對 RA Guard 與 Fragment 

標頭安全性實作的探討。

Destination Options Header

Destination Options 標頭負載只有目的地節點(IPv6 標頭裡 Destination 位址)需確認的選
擇性資訊。值為

 60 的 Next Header 確認此型態標頭。如前面所述,Destination Options 標

頭可於

 IPv6 封包出現兩次。當它插在 Routing 標頭前時,內容為 Routing 標頭所列路由器

需處理的訊息。當它插入上層通訊協定標頭前,內容為封包最後目的地使用的資訊。圖

 

3-12 顯示了 Destination Options 標頭格式。

 3-12  Destination Options 標頭格式

如你所見,這個格式與

 Hop-by-Hop Options 標頭格式類似。以下列出各欄位說明:

 Option Data Length 欄裡 

指定的資料長度

選項型態

選項資料長度

background image

IPv6 通訊協定架構

   

67

Next Header

位元組

Next Header 欄確認 Destination Options 標頭後的標頭型態。使用表 3-1 所列相同值,
如本章稍前所示。

Extension Header Length

位元組

此欄以八位元組為單位確認

 Destination Options 標頭長度。長度計算不含括第一個八位

元組。

Options

可變長度

選項可能一或多個。選項長度可以變動,且由

 Header Extension Length 欄位決定。

Options 欄使用方式與 Hop-by-Hop Options 標頭相似,這點本章稍早已探討過。Destination 
Options 標頭使用範例為 Mobile IPv6。可於第八章找到 Mobile IPv6 詳細說明。另一個已
定義的

 Destination Option Header 選項為 RFC 2473 裡的 Tunnel Encapsulation Limit Option

Generic Packet Tunneling in IPv6 Specification」,用於限制封包進一步封裝的次數。

  可於  http://www.iana.org/assignments/ipv6parameters/  找到  Routing  與 

Destination Options 標頭已定義選項的最新清單。

 3-13 顯示了追蹤檔裡的 Destination Options 標頭。

 3-13  追蹤檔裡的 Destination Options 標頭

background image

68

   

第三章

為了說明

 Destination Options 標頭,我們再次參考 Mobile IPv6 追蹤。這是 Binding Update 

訊息。在

 IP 標頭 Next Header 欄裡使用值為 60 的 Destination Options 標頭。Destination 

Options 標頭 Next Header 欄位值為 135 表示 Mobile IPv6 訊息,並含括 Home Address 選
項與行動節點內部位址。 

  參考第八章,找出 Mobility 使用 Destination Options 標頭的方式。 

 Extension 標頭格式

 Hop-by-Hop 與 Routing 標頭外,Extension 標頭通常只由封包最終目的地處理。實作

上,封包路徑上的裝置,像是路由器與防火牆,都有能力解析流經的封包或線速(

wire 

speed)下忽略 Extension 標頭的能力。為因應真實世界實作與最佳化 Extension 標頭處理

 Extension 標頭調查,有了 RFC 6564「A Uniform Format for IPv6 Extension Headers」定

義的新

 Extension 標頭格式。圖 3-14 說明了此新格式。

 3-14  新 Extension 標頭格式

以下列出各欄位說明:

Next Header

位元組

Next Header 欄確認 Extension 標頭後標頭型態。使用表 3-1 相同值,如本章稍前所示。

Extension Header Length位元組)

此欄以八位元為單位確認

 Extension 標頭長度。長度計算不含括第一組八位元。

Options

變動大小

選項長度可以變動且由

 Header Extension Length 欄決定。  

接續標頭識別符型態。

 

參考表

 3-1。

指定給擴充標頭的欄位。

以八位元組為單位的擴充標頭長度,

 

不包括第一個八位元組。

background image

IPv6 通訊協定架構

   

69

本章說明的基本

 Extension 標頭格式不會改變。但若未來定義新的 Extension 標頭,就必須

依循該格式。這代表處理

 Extension 標頭的所有裝置,像是防火牆,不但都必須能適切處

理基本

 Extension 標頭,還要能處理使用新格式的新 Extension 標頭。

RFC 6564 定義部份規則與摘要如下:

z

z

可能的話,不應該定義新

 Extension 標頭,而該使用 Destination Options 標頭新選

項。只有在不得已的情況下才定義

 Extension 標頭。

z

z

不必為逐跳(

hop-by-hop)行為模式產生新標頭,且針對現有 Hop-by-Hop Options 

標頭的新選項,只應於有限環境下產生。

 

Extension 標頭處理與標頭鏈長度

RFC 2460 裡基礎規格文件表示 Extension 標頭僅由終點站端點處理(帶有 Hop-by-Hop 
Options 標頭例外)。這種架構的目的可導入新 Extension 標頭,且只有終點站端點必須更
新。這樣處理可使封包路徑沿途轉送端點透明化。實作上已顯示這麼做不一定可行。有些

路由器與各種中介裝置像是防火牆、負載平衡與封包歸類

 ── 亦稱為中介軟體,可能會

檢查

 IPv6 基礎標頭外 IP 標頭其他部份。極常見的是,若它們不認識 Extension 標頭,可

能直接丟掉封包,導致連結性失敗。再者

 Hop-by-Hop Extension 標頭通常若非高速路由器

掌控,就是於漫長路徑處理。

RFC 7045「Transmission and Processing of Extension Headers」探討了這些議題。雖然根據
這份基礎規格文件,終點站端點應丟棄不認識的

 Extension 標頭,但封包路徑上的轉送裝

置不應該這麼做。另一方面,這些轉送裝置可能會丟棄它們還不認識的新定義

 Extension 

標頭封包。

RFC  表示這些裝置上的政策應能獨立組態。預設組態應允許所有標準的 

Extension 標頭。就防火牆而言,RFC 特別要求內含標準 Extension 標頭的封包只有在內
部組態政策之下才能丟棄。以

 Hop-by-Hop Extension 標頭而言,規定所有轉送裝置都應處

理,但實作者必須警覺,這通常會遇上漫長路徑。

另一個問題是:沒有單獨地點可找到所有

 Extension 標頭,而數字可能會如新規格文件出

現規律成長。因此對廠商而言,很難確認在其環境下必須支援哪個

 Extension 標頭。該 

RFC 因而定義在 IANA(Internet Assigned Numbers Authority)IPv6 Parameters 裡必須有新
段落列出所有

 IPv6 Extension 標頭型態。

background image

70

   

第三章

  新  IANA  針對「IPv6  Extension  header」註冊段落可於 http://bit.ly/1na7H1Q  

 153 頁找到。

關於標頭鏈(包括

 IPv6 標頭、所有 Extension 標頭,以及上層通訊協定標頭),以下必

須注意:在

 IPv4 我們已修正上層對所有 IPv4 封包中 IPv4 選項的限制。在 IPv6 基礎規格

文件中並未限制封包裡

 Extension 標頭數量。因此當封包分段後,標頭鍊可能生成多個分

段。這麼做會有問題,尤其在防火牆無法將規則套用至分段的時候,因為它們所需要的資

訊在第一個分段裡會找不到。

RFC 7112「Implications of Oversized IPv6 Header Chains」敘

述此問題並更新

 RFC 2460,例如分段後資料流的第一個分段必須含括完整 IPv6 標頭鍊。

在熟悉了

 IPv6 標頭與 Extension 標頭後,下一個章節將介紹 ICMPv6 的進階功能,提供給

讀者

 ICMPv4 裡沒聽過的管理功能。

參考文件

以下為本章內容提及的重要

 RFC 清單。有時會納入額外相關主題 RFC,以利進一步做自

我學習。

RFCs

z

z

RFC 791,“Internet Protocol,”1981

z

z

RFC 1812,“Requirements for IP Version 4 Routers,”1995

z

z

RFC 1819,“Internet Stream Protocol Version 2,”1995

z

z

RFC 1981,“Path MTU Discovery for IP version 6,”1996

z

z

RFC 2460,“Internet Protocol, Version 6(IPv6)Specification,”1998

z

z

RFC 2473,“Generic Packet Tunneling in IPv6 Specification,”1998

z

z

RFC 2474,“Definition of the Differentiated Services Field(DS Field),”1998

z

z

RFC 2475,“An Architecture for Differentiated Services,”1998

z

z

RFC 2507,“IP Header Compression,”1999

z

z

RFC 2675,“IPv6 Jumbograms,”1999

background image

IPv6 通訊協定架構

   

71

z

z

RFC 2711,“IPv6 Router Alert Option,”1999

z

z

RFC 3168,“The Addition of Explicit Congestion Notification(ECN)to IP,”2001

z

z

RFC 3175,“Aggregation of RSVP for IPv4 and IPv6 Reservations,”2001  

z

z

RFC 3514,“The Security Flag in the IPv4 Header,”April 1, 2003

z

z

RFC 4301,“Security Architecture for the Internet Protocol,”2005

z

z

RFC 4302,“IP Authentication Header,”2005

z

z

RFC 4303,“IP Encapsulating Security Payload(ESP),”2005

z

z

RFC 4305,“Cryptographic Algorithm Implementation Requirements for Encap sulating 
Security Payload(ESP)and Authentication Header(AH),”2005

z

z

RFC 4727,“Experimental Values in IPv4, IPv6, ICMPv4, ICMPv6, UDP, and TCP 
Headers,”2006

z

z

RFC 5095,“Deprecation of Type 0 Routing Headers in IPv6,”2007

z

z

RFC 5350,“IANA Considerations for the IPv4 and IPv6 Router Alert Options,”2008

z

z

RFC 5722,“Handling of Overlapping IPv6 Fragments,”2009

z

z

RFC 5871,“IANA Allocation Guidelines for the IPv6 Routing Header,”2010

z

z

RFC 6105,“IPv6 Router Advertisement Guard,”2011

z

z

RFC 6275,“Mobility Support in IPv6,”2011

z

z

RFC 6398,“IP Router Alert Considerations and Usage,”2011

z

z

RFC 6434,“IPv6 Node Requirements,”2011

z

z

RFC 6437,“IPv6 Flow Label Specification,”2011

z

z

RFC 6553,“The Routing Protocol for Low-Power and Lossy Networks(RPL)Op tion 
for Carrying RPL Information in Data-Plane Datagrams,”2012

z

z

RFC 6554,“An IPv6 Routing Header for Source Routes with the Routing Protocol for 
Low-Power and Lossy Networks(RPL),”2012

z

z

RFC 6564,“A Uniform Format for IPv6 Extension Headers,”2012

z

z

RFC 6621,“Simplified Multicast Forwarding,”2012

z

z

RFC 6946,“Processing of IPv6‘Atomic’Fragments,”2013

z

z

RFC  6980,“Security  Implications  of  IPv6  Fragmentation  with  IPv6  Neighbor  Dis 
covery,”2013

background image

72

   

第三章

z

z

RFC 7045,“Transmission and Processing of IPv6 Extension Headers,”2014

z

z

RFC 7112,“Implications of Oversized IPv6 Header Chains,”2014

z

z

RFC  7113,“Implementation Advice  for  IPv6  Router Advertisement  Guard(RA 
Guard),”2014

z

z

RFC 7136,“Significance of IPv6 Interface Identifiers,”2014

草案

你可以在

 http://www.ietf.org/ID.html 找到 Draft,最新版本草案可參考 https://datatracker.

ietf.org/public/pidtracker.cgi。無需版本編號,只要輸入草案名稱就會出現最新版本。若草
案未顯示,有可能已刪除。若被公佈為

 RFC,則會顯示 RFC 編號。http://tools.ietf.org/wg 

相當方便。更多標準化處理程序、

RFC 與草案資訊,可於附錄 A 找到。

以下是我針對本章列出的草案清單,再加上一些本章主題相關的有趣草案提供給讀者:

Segment Routing Architecture

draft-filsfils-spring-segment-routing-02

Segment Routing Use Cases

draft-filsfils-spring-segment-routing-use-cases-00

IPv6 Segment Routing HeaderSRH)"

draft-previdi-6man-segment-routing-header-00

版權說明: 檔案資源由用戶上傳,僅供學習交流使用,尊重著作權。 若您認為內容涉及侵權,請點擊「侵權舉報」提交相關資料,我們將儘快核實並處理。