1、1 印月962月 本標準非經本局同意得翻印 中華民國國家標準 CNS 總號 號 ICS 35.100.30 X126615068經濟部標準檢驗局印 公布日期 修訂公布日期 962月27日 月日 (共26頁)網際網路協定第 6 版 (IPv6)規格 Internet protocol, version 6 (IPv6) specification 1. 適用範圍 本標準適用於網際網路社群 (Internet community)的網際網路標準進程之協定(protocol),並尋求討論和建議以便有所改進。 本標準規定網際網路協定第 6 版 (IPv6),亦可稱為下一代 IP 或 IPng。 備考:
2、IP第6版(IPv6)為網際網協定之新版本,設計做為IP第4版(IPv4)RFC-791的後繼者。從IPv4到IPv6之改變主要為下種: (a) 擴大定址能力 IPv6 將 IP 位址 (IP address)的大小從 32 位元增加為 128 位元,以支援更多層的定址階層 (hierarchy)、更大數量的可定址節點 (node),以及較簡單的位址自動組態設定 (auto- configuration)。藉由增加 “scope”欄位到多播 (multicast)位址,改進多播選路 (routing)的可縮放能力。並且定義新的位址型式 “anycast address”(任播位址 ),用以發送
3、 (send)封包 (packet)至某組節點中之任意節點。 (b) 標頭格式簡化 去除部分 IPv4 標頭 (header)欄位或改為選項,以減少封包處置共同情況的處理成本,並限制 IPv6 標頭的頻寬成本。 (c) 改進對延伸和選項之支援 藉由對 IP 標頭選項 (option)編碼之改變,使得轉送更有效率,選項長度更少限制,以及未來新增選項更有彈性。 (d) 訊流加標籤之能力 增加新能力,使得屬於發送者請求 (request)特別處置之特定訊務 (traffic)“訊流 ”(flow)的封包能加上標籤,例如非預設 (non-default)服務品質或 “即時(real-time)”服務。
4、 (e) 鑑別和隱私能力 IPv6 規定支援鑑別 (authentication)、資料完整性 (integrity),以及 (選項的 )資料機密性 (confidentiality)之延伸 (extension)。 本標準規定基本 IPv6 標頭和初始定義之 IPv6 延伸標頭及選項。本標準亦討論封包大小議題、訊流標籤和訊務類別之語意,以及 IPv6 在上一層協定中的作用。 IPv6位址之格式和語意分別規定於 ADDRARCH。所有 IPv6 實作 (implementation)都被要求需包含之 ICMP 的 IPv6 版本規定於 ICMPv6。 2. 用語釋義 (1) 節點 (node)
5、:實作 IPv6 之裝置 (device)。 2 CNS 15068, X 1266 (2) 路由器 (router):轉送 (forward)非明確發給自己之 IPv6 封包的節點。 參見下方備考 (3) 主機 (host):非路由器之節點。 (參見下方備考 ) (4) 上一層 (upper layer):直接居 IPv6 之上的協定層。例子有傳送 (transport)協定如TCP 和 UDP、控制協定如 ICMP、選路協定如 OSPF,以及 “穿隧 (tunnel)”過 (亦即囊封於 )IPv6 之網際網路或較低層協定如 IPX、 AppleTalk 或 IPv6 本身。 (5) 鏈路
6、(link):通信設施或媒介,節點可藉以在鏈路層通信,亦即直接居 IPv6 之下的層。例子有乙太網路 (Ethernet)(簡單或橋接的 )、 PPP 鏈路、 X.25、訊框中繼 (Frame Relay)或 AT M 網路,以及網際網路 (或較高 )層 “隧道 ”如穿隧過 IPv4 或IPv6 本身。 (6) 鄰節點 (neighbor):附加於相同鏈路之節點。 (7) 介面 (interface):節點對鏈路之附接物。 (8) 位址 (address):用於介面或一組介面之 IPv6 層識別符 (identifier)。 (9) 封包 (packet): IPv6 標頭加上酬載 (payl
7、oad)。 (10) 鏈路 MTU(link MTU):鏈路可運送之最大傳輸單位 (maximum transmission unit, MTU),亦即以八位元組 (octet)為單位的最大封包大小。 (11) 路徑 MTU(path MTU):從來源 (source)節點至目的地 (destination)節點之路徑(path)中所有鏈路的最小鏈路 MTU。 備考: 雖然不尋常,具備多介面的裝置有可能被設定成轉送來自它的某些組介面 (少於全部 )非以自身為目的地的封包,並且丟棄 (discard)來自它的其餘介面非以自身為目的地的封包。當接收 (receive)來自前一種 (轉送 )介面的封
8、包且與鄰節點互動時,此種裝置必須服從有關路由器的協定要求(requirement)。當接收來自後一種 (不轉送 )介面的封包且與鄰節點互動時,它必須服從有關主機的協定要求。 3. IPv6標頭格式 3 CNS 15068, X 1266 版本(version) 訊務類別 (traffic class) 訊流標籤 (flow label) 酬載長度 (payload length) 下個標頭 (next header ) 中繼段限制 (hop limit) 來源位址 (source address) 目的地位址 (destination address) (1) 版本 (version): 4
9、位元網際網路協定版本號碼 6。 (2) 訊務類別 (traffic class): 8 位元訊務類別欄位,參見第 7 節。 (3) 訊流標籤 (flow label): 20 位元訊流標籤,參見第 6 節。 (4) 酬載長度 (payload length): 16 位元無正負號整數 (unsigned integer)。 IPv6 酬載 (亦即跟隨於 IPv6 標頭之後的封包剩餘部分 )之長度,八位元組為單位。注意:任何延伸標頭 (參見第 4 節 )皆視為酬載的一部分,亦即長度計算需包含之。 (5) 下個標頭 (next header): 8 位元選擇符 (selector),識別緊跟在 I
10、Pv6 標頭之後的標頭型式 (type)。使用與 IPv4 協定欄位 RFC1700 等相同的值。 (6) 中繼段限制 (hop limit): 8 位元無正負號整數,封包每轉送一個節點就減 1,當中繼段限制減至 0 時即丟棄封包。 (7) 來源位址 (source address):封包發信者之 128 位元位址,參見 ADDRARCH。 (8) 目的地位址 (destination address):封包預定接受者 (recipient)(若出現選路標頭時,可能不是最終接受者 )之 128 位元位址。參見 ADDRARCH和第 4.4 節。 4. IPv6 延伸標頭 在 IPv6 中,選項
11、之網際網路層資訊可分別編碼於封包裡 IPv6 標頭和上一層標頭之間的分開標頭中。這樣的延伸標頭僅有少數,各自由不同的下個標頭值所識別。 IPv6封包可能攜帶 0、 1 或更多個延伸標頭,各自由前一個標頭的 下個標頭欄位所識別,如下列例子所描述: 4 CNS 15068, X 1266 IPv6標頭 TCP標頭資料 下個標頭 (next header)TCP IPv6標頭 選路 (routing)標頭 TCP標頭資料 下個標頭 (next header)選路 下個標頭 (next header) TCP IPv6標頭 選路標頭 分段標頭 TCP分段 標頭資料 下個標頭 (next header)
12、選路 下個標頭 (next header)分段 下個標頭 (next header) TCP 有個例外情形如下:延伸標頭不被封包傳遞 (delivery)路徑沿途中的任何節點所檢驗(examine)或處理 (process),直到封包抵達 IPv6 標頭目的地位址欄位所識別的節點 (或是在多播情況下,一組節點的每一個 )為止。 該處對 IPv6 標頭下個標頭欄位的正常解多工 (demultiplex)調用 (invoke)模組來處理第 1 個延伸標頭,若無延伸標頭則處理上一層標頭。每一個延伸標頭的內容 (content)和語意 (semantics)決定是否進一步處理下個標頭。因此延伸標頭必須
13、依其在封包中的出現次序嚴謹地處理,例如接收器不能掃瞄封包以尋找特定種類的延伸標頭且先於所有居前的標頭來處理該標頭。 前段文中所稱的例外係指逐中繼段選項標頭,其所攜帶的資訊必須由封包傳遞路徑沿途 (包括來源節點及目的地節點 )中的每一個節點加以檢驗或處理 。逐中繼段選項標頭,若是出現,必須緊跟在 IPv6 標頭之後。其存在由 IPv6 標頭之下個標頭欄位值 0 來指示。 若處理標頭的結果要求節點進一步處理下個標頭,但該節點卻無法辨識現行標頭中的下個標頭值時,宜丟棄該封包並傳送 ICMP 參數問題訊息 (message)給封包的來源,其 ICMP 碼值為 1(遇到無法辨識的下個標頭型式 )且 IC
14、MP 指標欄位包含該無法辨識值在原始封包中的偏置量。若節點遇到非 IPv6 標頭之其他任何標頭的下個標頭值為 0 時,宜採取相同的動作。 為了與後續標頭保持 8 個八位元組對齊 (alignment),每一個延伸標頭的長度皆為 8個八位元組的整數倍。每一個延伸標頭內的多個八位元組欄位都對齊它們的自然邊界,亦即 n 個八位元組寬的欄位置於距標頭起點 n 個八位元組的整數倍處,其中 n 1、 2、 4 或 8。 IPv6 的完整實作包括下列延伸標頭的實作: 逐中繼段選項 (hop-by-hop options) 選路型式 0(routing (type 0) 分段 (fragment) 5 CNS
15、 15068, X 1266 目的地選項 (destination options) 鑑別 (authentication) 囊封的安全酬載 (encapsulating security payload) 前四項規定於本標準,最後兩項分別規定於 CNS_RFC-2402及 CNS_RFC-2406。 4.1 延伸標頭次序 當同一個封包使用一個以上的延伸標頭時,建議將它們依下列次序排列: IPv6 標頭 (IPv6 header) 逐中繼段選項標頭 (hop-by-hop options header) 目的地選項標頭 (destination options header)(1) 選路標頭
16、(routing header) 分段標頭 (fragment header) 鑑別標頭 (authentication header)(2) 囊封的安全酬載標頭 (encapsulating security payload header) (2) 目的地選項標頭 (destination options header) (3) 上一層標頭 (upper-layer header) 註(1) 由出現於IPv6目的地位址位中的第1個目的地加上舉於選標頭中的後續目的地所處的選項。 (2) 關於鑑別標頭和囊封的安全酬載標頭相關次序的附加建議RFC-2406。 (3) 只由封包最終目的地所處的選項。
17、 除了目的地選項標頭宜至多出現至多兩次 (一次於選路標頭之前,另一次於上一層標頭之前 )之外,每一延伸標頭宜至多出現一次。 若上一層標頭為另一個 IPv6 標頭 (於 IPv6 被穿隧過或囊封於 IPv6 的情況 ),則其後方可跟隨自己的延伸標頭,並分別依以相同建議次序排列。 當有其他延伸標頭被定義時,其相對於上述標頭的次序限制必須規定。 除了逐中繼段選項標頭只限於緊跟著 IPv6 標頭之外, IPv6 節點必須接受並試圖處理同一封包內以任意次序和任意 次數出現的延伸標頭。儘管如此,還是強烈建議 IPv6 封包的來源遵循上述的建議次序,除非本標準有所修訂。 4.2 選項 兩個目前已定義的延伸標
18、頭 逐中繼段選項標頭及目的地選項標頭 攜帶可變數量的 “型式 ” “長度 ” “值 ” (type-length-value, TLV) 編碼 “option”,其格式如下: 選項型式(option type) 選項資料長度 (opt data len) 選項資料 (option data) (1) 選項型式 (option type):選項型式的 8 位元指示符。 (2) 選項資料長度 (opt data len): 8 位元無正負號整數,以八位元組計的選項資料欄位長度。 (3) 選項資料 (option data):可變長度欄位,選項型式特定的 (option-type-specific)
19、6 CNS 15068, X 1266 資料。 標頭內選項之序列 (sequence)必須嚴格依其在標頭中的出現次序處理,例如接收器不得掃瞄標頭以尋找特定種類之 選項且在處理所有居前的選項之前加以處理該選項。 選項型式識別符為內部編碼,其最高 2 位元規定了若處理 IPv6 的節點無法辨識該選項型式時所必須採取的動作: 00跳略此選項繼續處理標頭。 01丟棄封包。 10丟棄封包,且不論封包的目的地位址是否為多播位址,送一 ICMP 參數問題 (碼值為 2)訊息至封包的來源位址,指向無法辨識的選項型式。 11丟棄封包,且只有封包的目的地位址不是多播位址時,才送一 ICMP 參數問題 (碼值為 2
20、)訊息至封包的來源位址,指向無法辨識的選項型式。 選項型式的第三最高位元規定該選 項的選項資料在往封包最終目的地的路徑中可以改變。當封包中出現鑑別標頭 時,對任何可能在路徑中改變其值的選項,它的整個選項資料欄位在計算或查證該封包鑑別值時,必須都當作值為 0 之八位元組。 0選項資料在路徑中不改變。 1選項資料在路徑中可改變。 上述 3 個高位元被當作選項型式的一部分,而非與選項型式無關。亦即,特定選項係由全部 8 個位元選項型式所識別,而不只是選項型式較低的 5 個位元。 逐中繼段選項標頭和目的地選項標 頭兩者使用相同的選項型式編號空間。無論如何,特定選項的規定可將其使用限制於此兩種標頭之一。
21、 個別選項可能有特定的對齊要求, 以確保選項資料欄位裡的多個八位元組值可落在自然邊界上。選項的對齊要求係以記法 (notation) xn+y 規定之,意指該選項型式必須出現於自標頭開始處起 x 個八位元組的整數倍,加上 y 個八位元組。例如: 2n 表示從標頭開始處起偏置 2 個八位元組的整數倍。 8n+2 表示從標頭開始處起偏置 8 個八位元組的整數倍,加上 2 個八位元組。 當需要對齊後續選項時,有兩種填充選項可用以將包含這些選項的標頭的長度填充 (pad)成 8 個八位元組的整數倍。所有 IPv6 實作都必須能辨識這些填充選項: (1) Pad1 選項 (對齊要求:無 ) 0 注意,
22、Pad1 選項的格式為特例無長度和值欄位。 Pad1 選項係用以將一個八位元組填充插入標頭的選項區。若需填充一個以上的八位元組,則應使用下述的 PadN 選項,而非多個 Pad1 選項。 7 CNS 15068, X 1266 (2) PadN 選項 (對齊要求:無 ) 1 選項資料長度 選項資料 PadN 選項係用以將二或多個八位元組填充插入標頭的選項區。就 N 個 8 位元填充而言,選項資料長度欄位值為 N-2,且選項資料由 N-2 個值為零的八位元組所組成。 附錄 B 包含設計新選項的格式化指導綱要。 4.3 逐中繼段選路標頭 逐中繼段選項標頭係用以攜帶必須 由封包傳遞路徑沿途中的每一個
23、節點加以檢驗的選項資訊。逐中繼段選項標頭係由 IPv6 標頭中的下個標頭欄位值 0 予以識別,其格式如下: 下個標頭 (next header) 標頭延伸長度(hdr ext len) 選項 (options) (1) 下個標頭 (next header): 8 位元選擇符,識別緊跟於逐中繼段選項標頭之後的標頭的型式。使用與 IPv4 協定欄位 RFC-1700 等 相同的值。 (2) 標頭延伸長度 (hdr ext len): 8 位元無正負號整數,以 8 個八位元組計的逐中繼段選項標頭長度,但不包括最前 8 個八位元組。 (3) 選項 (options):可變長度欄位,應使得完整逐中繼段選
24、項標頭的總長度為 8個八位元組的整數倍。包含一或多個 TLV 編碼選項,如第 4.2 節所述。 本標準所定義的逐中繼段選項只有第 4.2 節所規定的 Pad1 和 PadN 選項。 4.4 選路標頭 選路標頭被 IPv6 來源用來表列至封包目的地路途上擬 “拜訪 ”的一或多個中間節點。此功能非常類似 IPv4 的鬆散來源和記錄路徑 (loose source and record route)選項。選路標頭係由緊接於前之標頭中的下個標頭值 43 所識別,其格式如下: 8 CNS 15068, X 1266 下個標頭 (next header) 標頭延伸長度(hdr ext len) 選路型式(
25、routing type) 區段剩餘數(segment left) 型式特定的資料 (type-specific data) (1) 下個標頭 (next header): 8 位元選擇符,識別緊跟於選路標頭之後的標頭的型式。使用與 IPv4 協定欄位RFC-1700 等相同的值。 (2) 標頭延伸長度 (hdr ext len): 8 位元無正負號整數,以 8 個八位元組計的選路標頭長度,但不包括前 8 個八位元組。 (3) 選路型式 (routing type): 8 位元識別符,用以識別不同的特定選路標頭。 (4) 區段剩餘數 (segments left): 8 位元無正負號整數,路徑
26、區段的剩餘數,亦即到達最終目的地之前尚待拜訪的列舉中間節點數。 (5) 型式特定的資料 (type-specific data):可變長度欄位,其格式係由選路型式所決定,且其長度應使得完整選路標頭的總長度為 8 個八位元組的整數倍。 當節點處理接受的封包若遇到選路 標頭帶有無法辨識的選路型式值時,該節點依 “區段剩餘數 ”欄位值而有以下的處理方式: (1) 若區段剩餘數為 0,該節點必須忽略選路標頭,並進一步處理封包中的下個標頭,其型式由選路標頭中下個標頭欄位來識別。 (2) 若區段剩餘數不為 0,該節點必須丟棄該封包,並傳送 ICMP 參數問題 (碼值為 0)給封包的來源位址,指標指向無法辨
27、識的選路型式。 節點處理所接受封包的選路標頭之後,若 決定將封包經由鏈路轉送至中間節點,但此鏈路的 MTU 卻小於該封包的 大小時,該節點必須丟棄封包並發送ICMP“封包太大 ”(packet too big)訊息至該封包的 “來源位址 ”。 型式 0 選路標頭的格式如下: 9 CNS 15068, X 1266 下個標頭 (next header) 標頭延伸長度(hdr ext len) 選路型式 (routing type) 0 區段剩餘數(segments left) 保留 (reserved) 位址 1 位址 2 : : 位址 n (1) 下個標頭 (next header): 8 位
28、元選擇符,識別緊跟於選路標頭之後的標頭的型式。使用與 IPv4 協定欄位 RFC-1700 等 相同的值。 (2) 標頭延伸長度 (hdr ext len): 8 位元無正負號整數,以 8 個八位元組計的選路標頭長度,但不包括前 8 個八位元組。就型式 0 選路標頭而言,標頭延伸長度等於標頭中位址數的 2 倍。 (3) 選路型式 (routing type): 0。 (4) 區段剩餘數 (segments left): 8 位元無正負號整數,路徑區段的剩餘數,亦即到達最終目的地之前尚待拜訪的列舉中間節點數。 (5) 保留 (reserved): 32 位元保留欄位,傳輸時初始為 0,接收端則忽
29、略之。 (6) 位址 1 至 n(address1n): 128 位元位址的向量,編號由 1 至 n。 多播位址不得出現於型式 0 選路標頭中,亦不得出現於帶有型式 0 選路標頭之封包的 IPv6 目的地位址欄位中。 在封包到達 IPv6 標頭目的地位址欄位所識別的節點之前,選路標頭不被檢驗或處理。在該節點中,緊接於前之標 頭中下個標頭欄位的發送,導致選路標頭模組被調用,在選路型式 0 的情況下實施下列演算法: if 區段剩餘數 = 0 進一步處理 封包中的 “下個標頭 ”,其型式由 “選路標頭 ”中的 “下個標頭 ”欄位所識別 10 CNS 15068, X 1266 else if 標頭延
30、伸長度為奇數 發送 ICMP 參數問題訊息 (碼值為 0)至來源位址,指標指向標頭延伸長度欄位,並丟棄封包 else 將標頭延伸長度除以 2,計算出尋路標頭中的位址數 n if 區段剩餘數大於 n 發送 ICMP 參數問題訊息 (碼值為 0)至來源位址,指標指向標頭延伸長度欄位,並丟棄封包 else 將區段剩餘數減少 1; 將 n 減去區段剩餘數減,計算出位址向量中下一個要拜訪位址的索引 i if 位址 i或 IPv6 目的地位址為多播位址 丟棄封包 else 將 IPv6 目的地位址和位址 i互換 if IPv6 中繼段限制小於或等於 1 發送 ICMP 逾時 (time exceeded)
31、運送中超過中繼段限制 (hop limit exceeded in transit)訊息至來源位址並丟棄封包 else 將中繼段限制減少 1 重提交封包給 IPv6 模組以便傳輸至新目的地 舉例說明上述演算法的作用,考慮來源節點 S 利用選路標頭使得封包經由中間節點 I1、 I2 及 I3 發送至目的地節點 D 的情況。封包傳遞路徑每一個區段上的相應 IPv6 標頭和選路標頭欄位的值將會如下所述: 當封包從 S 行進到 I1: 來源位址 S 標頭延伸長度 6 目的地位址 I1 區段剩餘數 3 位址 1 I2 位址 2 I3 位址 3 D 11 CNS 15068, X 1266 當封包從 I1
32、 行進到 I2: 來源位址 S 標頭延伸長度 6 目的地位址 I2 區段剩餘數 2 位址 1 I1 位址 2 I3 位址 3 D 當封包從 I2 行進到 I3: 來源位址 S 標頭延伸長度 6 目的地位址 I3 區段剩餘數 1 位址 1 I1 位址 2 I2 位址 3 D 當封包從 I3 行進到 D: 來源位址 S 標頭延伸長度 6 目的地位址 D 區段剩餘數 0 位址 1 I1 位址 2 I2 位址 3 13 4.5 分段標頭 分段標頭適用於當 IPv6 來源發送往目的地的封包大於其路徑 MTU 時,使 用。 (注意:與 IPv4 不同, IPv6 中的分段化 (fragmentation)
33、只能由來源節點實施,而非封包傳遞路徑沿途的節點,見第 5 節。 )分段標頭係由緊接於前之標頭中的下個標頭值為 44 來識別,其格式如下: 下個標頭 (next header) 保留 1 (reserved) 分段偏置(fragment offset) 保留 2(res) M(M flag)識別 (identification) (1) 下個標頭 (next header): 8 位元選擇符,識別原始封包可分段部分的初始標頭型式 (定義於下 )。使用與 IPv4 協定欄位 RFC-1700 等 相同的值。 (2) 保留 1(reserved): 8 位元保留欄位,初始為 0 以便傳輸,接收後忽略
34、之。 (3) 分段偏置 (fragment offset): 13 位元無正負號整數,跟隨本標頭之資料相對於原始封包可分段部分起點的偏置量,以 8 個八位元組為單位計。 (4) 保留 2(res): 2 位元保留欄位,傳輸時初始為 0,接收後忽略之。 (5) M 旗標 (M flag): 1還有其它分段; 0最後一個分段。 (6) 識別 (identification): 32 位元,敘述於後。 為了把大於路徑 MTU 的封包發送至目的地,來源節點可將封包切分成幾個分段,每個分段當一個封包發送,再由接受者重組 (reassemble)。 12 CNS 15068, X 1266 來源節點為每一
35、個預定分段的封包 產生一個識別值。該識別必須不同於近期內(*)所發送具有相同來源位址和目的地位址的其它封包。若有選路標頭,則最終目的地即為目的地位址。 註 (*) “近期內 ”意指在封包的最大可能生命期 (lifetime)內,包括從來源至目的地之中轉時間和等待與同一封包 其它分段重組所花費的時間。不論如何,來源節點無需知道最大的封包生命期。其只需維護識別值做為簡單的 32 位元 “ 迴轉(wrap-around)”計數器 (counter),每次封包必須分段時加上一個增量即可。實作時可選擇為節點維護單 一計數器或多個計數器,例如為節點每一個可能的來源位址維護一個計數器、或是為每一個作用的 (
36、active)(來源位址,目的地位址 )組合(combination)維護一個計數器。 未分段的初始大封包稱為 “原始封包 ”,可視為由 2 個部分所組成,如圖所示: 原始封包: 不可分段部分 (unfragmentable part) 可分段部分 (fragmentable part) 不可分段部分係由 IPv6 標頭加上往目的地路徑中的節點必須處 理的任何延伸標頭所組成。這些 延伸標頭為直到包含選路標頭 (若有的話 )為止的全部標頭、否為則逐中繼段標頭 (若有的話 ),否則無延伸標頭。 可分段部分由封包的剩餘部分所組 成,亦即只需由最終目的地節點處理的延伸標頭加上上一層標頭和資料。 原始封
37、包的可分段 部分被切分為幾個分段,除了最後 (最右 )分段之外,其餘每一個分段的長度都是 8 個八位元組的整數倍。傳輸這些分段的個別 “分段封包 ”如圖所示: 原始封包: 不可分段部分(unfragmentable part) 第 1分段 第 2分段 最後分段 13 CNS 15068, X 1266 分段封包: 不可分段部分(unfragmentable part) 分段標頭(fragment header) 第 1分段 不可分段部分(unfragmentable part) 分段標頭(fragment header) 第 2分段 : : 不可分段部分(unfragmentable part
38、) 分段標頭(fragment header) 最後分段 每一個分段封包的組成成分為: (1) 原始封包的不可分段部分,其中原始 IPv6 標頭裡的酬載長度變更為只有此分段封包的長度 (不含 IPv6 標頭本身的長度 ),以及不可分段部分最後一個標頭的下個標頭欄位值變更為 44。 (2) 分段標頭包含: 下個標頭值,用以識別原始封包可分段部分的第 1 個標頭。 分段偏置,包含該分段相對於原始封包可分段部分起點的偏置量,以 8 個八位元組計。第 1 個 (最左 )分段的分段偏置為 0。 M 旗標,若該分段為最後 (最右 )分段則其值為 0,否則其值為 1。 由原始封包所產生識別值,為。 (3)
39、分段本身。 分段的長度必須安排成可讓所形成的分段封包與至封 包目的地之路徑的 MTU相符。 分段封包在目的地重組回原始未分段形式,如圖所示: 重組的原始封包: 不可分段部分 (unfragmentable part) 可分段部分 (fragmentable part) 重組指導規則如下: 原始封包僅由具備相同來源位址、目的地位址,以及分段 識別的分段封包重組成。 重組後封包的不可分段部分由第 1 分段封包 (亦即分段偏置為 0 的封包 )分段標頭 (但不包含本分段標頭 )之前的全部標頭所組成,且附帶下列兩項變更: 不可分段部分最後標頭的下個標頭欄位需從第 1 分段標頭的下個標頭欄位取得。 14
40、 CNS 15068, X 1266 不可分段部分的酬載長度需從不可 分段部分的長度和最後分段的長度及偏置計算得出。計算重組的原始封包酬載長度的公式,舉例如下: 在此, PL.orig重組後封包的 酬載長度欄位 (payload length field of reassembled packet) PL.first第 1 分段封包的酬載長度欄位 (payload length field of first fragment packet) FL.first =跟隨第 1 分段封包分段標頭之分段的長度 (length of fragment following fragment header
41、of first fragment packet) FO.last最後分段封包分段標頭的分段偏置欄位 (fragment offset field of fragment header of last fragment packet) FL.last 跟隨最後分段封包分段標頭之分段的長度 (length of fragment following fragment header of last fragment packet) 重組後封包的可分段部分係由每一 個分段封包裡跟隨於分段標頭之後的分段所構成。各分段長度的計算係由封包酬載長度減去介於 IPv6 標頭和分段自身間的所有標頭長度。各分段在
42、可分段部分中的相對位置可由其分段偏置值計算得出。 分段標頭不該在最終重組後封包中出現。 重組分段封包時,可能發生下列錯誤: 在接收到封包的第 1 個分段之後的 60 秒內,若無法收齊足以完整重組封包的分段,則必須放棄重組封包並丟棄所有已接收的該封包分段。若已接收了第 1 個分段 (亦即分段偏置為 0 者 ),宜發送 ICMP 逾時分段重組逾時訊息至分段的來源。 若分段的長度 (從分段封包的酬載長度欄位所導出 )不是 8 個八位元組的整數倍且該分段的 M 旗標為 1,則必須丟棄該分段,並且宜發送 ICMP 參數問題 (碼植為 0)訊息至分段的來源,指向分段封包的酬載長度欄位。 若分段的長度和偏置
43、使得從該分段重組成的封包酬載長度超過 65,536 個八位元組,則必須丟棄該分段,並且宜發送 ICMP 參數問題 (碼值為 0)訊息至分段的來源,指向分段封包的分段偏置欄位。 下列情形雖不預期出現,但不將其視為錯誤: 對於同一個原始封包的不同分段, 其分段標頭前的標頭數量和內容可能不同。當每一個分段封包到達時,不論分 段標頭前的標頭為何,都需先處理之後再將分段排隊以備重組。只有偏置 0 分段封包的標頭才能保留在重組後的封包中。 對於同一個原始封包的不同分段, 其分段標頭中的下個標頭值可能不同。只有偏置 0 分段封包的值才可使用於重組。 4.6 目的地選項標頭 目的地選項標頭係用以攜帶需由封 包
44、之目的地節點加以檢驗的選項資訊。目的地選項標頭係由緊接於前之標頭中的下個標頭值 60 予以識別,其格式如下: 15 CNS 15068, X 1266 下個標頭 (next header) 標頭延伸長度(hdr ext len) 選項 (options) (1) 下個標頭 (next header): 8 位元選擇符,識別緊跟於目的地選項標頭之後的標頭的型式。使用與 IPv4 協定欄位 RFC-1700 等 相同的值。 (2) 標頭延伸長度 (hdr ext len): 8 位元無正負號整數,以 8 個八位元組計的目的地選項標頭長度,但不包括最前 8 個八位元組。 (3) 選項 (option
45、s):可變長度欄位,應使得完整目的地選項標頭的總長度為 8 個八位元組的整數倍。包含一或多個 TLV 編碼選項,如第 4.2 節所述。 本標準所定義的目的地選項只有第 4.2 節所規定的 Pad1 和 PadN 選項。 注意,在 IPv6 封包中用以編碼選項目的地資訊的可能方法有二:當做目的地選項標頭中的選項,或是當做個別的 延伸標頭。分段標頭和鑑別標頭即為後一種方法的例子。要使用何種作法,視 目的地節點在不瞭解選項資訊時擬採行的動作而定: (1) 若擬採行的動作是目的地節點丟棄該封包,且只有封包的目的地位址不為多播位址才發送 ICMP 型式無法辨識訊息至封包的來源位址,則該選項資訊可編碼為個
46、別標頭,或是編碼為目的地選項標頭 (其選項型式最高兩位元為 11)中的選項。選擇時可以視何者的八位元組數較少,或是何者可產生較好的對齊或更有效率的剖析 (parse)而定。 (2) 若採行任何其它動作,則該資訊必須編碼為目的地選項標頭的選項,其選項型式值的最高兩位元為 00、 01 或 10,以規定所需動作 (見第 4.2 節 )。 4.7 無下個標頭 IPv6 標頭或任何延伸標頭的下個標頭欄位值為 59 係指示此標頭之後不再有其它標頭。若 IPv6 標頭的酬載長度欄位指出在最後標頭 (其下個標頭欄位值為 59)之後還有八位元組,則這些八位元組必須忽略,並在封包轉送時保持不變。 5. 封包大小
47、議題 IPv6 要求網際網路中的每一個鏈路都具備 1,280 或更多個八位元組的 MTU。在任何無法一次就輸送 1,280 個八位元組之封包的鏈路上,必須在低於 IPv6 的層中提供鏈路特定的分段與重組。 具備可設定 MTU 的鏈路 (例如 PPP 鏈路 RFC-1661)必須將其 MTU 設定為至少 1,280個八位元組。建議設定成 1,500 或更多個八位元組,以因應可能的囊封 (即穿隧 )而無須承擔 IPv6 層的分段。 直接附加於鏈路的節點必須可從鏈路接受鏈路 MTU 大小的封包。 強烈建議 IPv6 節點實作路徑 MTU 探索 (discovery)RFC-1981,以便發覺大於 1
48、,280個八位元組的路徑 MTU 並善加利用。無論如何,最小的 IPv6 實作 (亦即在開機 ROM16 CNS 15068, X 1266 裡 )可簡單的限制自己發送不超於 1,280 個八位元組,且省略路徑 MTU 探索的實作。 為了發送大於路徑 MTU 的封包,節點可使用 IPv6 分段標頭於來源節點處對封包分段,而於目的地加以重組。無論如何,任何應用若能調整其封包以符合量測到的路徑 MTU(亦即降至 1,280 個八位元組 ),則不鼓勵使用此種分段。 節點必須能接受重組之後大小為 1,500 個八位元組的分段封包。節點允許接受重組之後大於 1,500 個八位元組的分段封包。與發送大於路
49、徑 MTU 之封包的 IPv6 分段相關的上一層協定或應用,不得發送大於 1,500 個八位元組的封包,除非已確認目的地有能力重組這麼大的封包。 做為發送至 IPv4 節點的 IPv6 封包 ( 亦即從 IPv6 翻譯成 IPv4 的封包 ) 的回應(response),發訊的 IPv6 節點或將接收到報告下個中繼段 MTU 小於 1,280 的 ICMP封包太大訊息。就此案例,無須要求該 IPv6 節點將後續封包的大小縮減至小於1,280,但必須在那些封包中包含分段標頭以便 IPv6 對 IPv4 翻譯路由器能獲得合適的識別值以使用於結果的 IPv4 分段。注意,這意味著酬載或應縮減為 1,232 個八位元組 (1,280 減去 IPv6 標頭所需的 40 和分段標頭所需的 8),若還有額外的延伸標頭則酬載還要更小。 6. 訊流標籤
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1