跳轉到內容

計算機網路技術與服務/IPv6

來自華夏公益教科書
Previous page
MPLS
計算機網路技術與服務 Next page
遷移到 IPv6
IPv6

網際網路協議版本 6 (IPv6) 是一種新的協議,旨在克服 IPv4 的限制:引入新協議的主要原因是相對於 IPv4 具有更大的地址空間

與 IPv4 的比較

[編輯 | 編輯原始碼]

IPv6 透過整合以下協議擴充套件了 ICMP 協議

  • ARP:稱為“鄰居發現”,用於地址配置過程;
  • IGMP:稱為“組播監聽發現”,用於管理組播組成員資格。

對於 IPv6,一些協議只需要升級,主要是因為它們都處理地址(這些協議不是第三層獨立的)

  • DNS 協議;
  • 路由協議:RIP、OSPF、BGP、IDRP;
  • 傳輸協議:TCP、UDP;
  • 套接字介面.

IPv6 附加功能

[編輯 | 編輯原始碼]

下面列出的附加功能最初被設計為 IPv4 的附加元件,然後被移植到嵌入到 IPv6 中。

在 LAN 上部署

由於高效地使用組播和任播地址,它更高效

  • 組播:每個組播地址標識一組站點,資料包被轉發到該組中的所有節點;
  • 任播:每個任播地址標識一組站點,但資料包只被轉發到該組中最近的節點。
資料安全和隱私

諸如IPsec的安全機制包含在 IPv6 協議中。

策略路由

它可以使用與目標地址不同的策略轉發資料包(例如,按源地址轉發)。

即插即用

自動配置協議已定義

  • 無狀態:無需聯絡任何伺服器即可保證只有鏈路本地訪問;
  • 有狀態:可以透過使用 DHCP 伺服器訪問網際網路。
流量區分

並非所有資料流都是平等的(例如,電話通話需要更少的延遲)。

移動性

它是裝置在不同的網路之間移動時保持所有服務可用性的能力(例如,使用 GSM/LTE 在不同小區之間移動的移動裝置)。

遊牧性

它是裝置在不同的網路之間移動時無需為服務授予活動性的能力→比移動性要求更低。

路由的更好可擴充套件性

一般來說,聚合是使路由更容易需要的,但它需要浪費地址。IPv6 路由使用與 IPv4 幾乎相同的技術,但如果以高效的方式分配地址,它可以減少路由表。

地址格式

[編輯 | 編輯原始碼]

每個 IPv6 地址長 128 位,字首代替了網路掩碼

字首 介面識別符號

IPv6 中的鏈路概念與 IPv4 中的子網概念相同

  • 在 IPv4 中,子網是一組具有相同字首的主機;
  • 在 IPv6 中,鏈路是實際的物理網路。

同一子網中的所有主機都屬於同一個鏈路,反之亦然

  • 鏈路內主機具有相同的字首,因此它們可以直接通訊;
  • 鏈路外主機具有不同的字首,因此它們可以透過路由器通訊。

地址空間組織

[編輯 | 編輯原始碼]

全域性單播地址

[編輯 | 編輯原始碼]
可聚合全域性單播地址
[編輯 | 編輯原始碼]

它們等同於IPv4 公共地址,它們以三個位'001'開頭

3 16 48 64 88 96 104 128
001 ID TLA ID NLA ID SLA OUI ('通用'位 = 1) FF FE 製造商選擇的 MAC 部分
字首 介面識別符號(EUI 64)
  • 字首:它必須與分配給主機連線到的鏈路的字首相同。
字首的分配標準是基於拓撲的:它們是根據服務提供商層次結構分配的
  • 頂級機構 (TLA):大型服務提供商;
  • 下一級機構 (NLA):中間服務提供商;
  • 子網級別機構 (SLA):組織。
  • 介面識別符號:它標識主機介面。
它可以選擇採用 EUI-64 格式:64 位 IPv6 介面識別符號源自主機的 48 位 MAC 地址
24 48
OUI ('通用'位 = 0) 製造商選擇的 MAC 部分
其中'通用'位是 OUI 中的第七位,它從 0 更改為 1。
用於 IPv4 互操作性的地址
[編輯 | 編輯原始碼]

它們將在過渡階段使用,它們以 80 位設定為零開頭

  • IPv4 對映地址:前 80 位為零,後 16 位設定為
0000 0000 0000 0000 0000 FFFF ...
  • IPv4 相容地址:前 80 位為零,後 16 位設定為 (例如,IPv6 地址 '::10.0.0.1' 對映 IPv4 地址 '10.0.0.1')
0000 0000 0000 0000 0000 0000 ...

本地單播地址

[編輯 | 編輯原始碼]
[編輯 | 編輯原始碼]

它們指的是由 自動配置 生成的 “自動” 私有地址,該過程是站點自動生成地址以連線到 IPv6 鏈路的過程

FExx ...
站點本地地址
[編輯 | 編輯原始碼]

它們等效於 IPv4 私有 地址

FDxx ...

組播地址

[編輯 | 編輯原始碼]

一個 組播地址 標識一組站點,它具有以下格式

8 12 16 128
FF 標誌 (000T) 範圍 組 ID

其中欄位是

  • 標誌 欄位 (4 位):用於標記組播組
    • T = 1:組播組是 臨時 的(例如,使用者定義的電話會議);
    • T = 0:組播組是 永久 的(例如,網路中所有主機的地址,它不能被覆蓋);
  • 範圍 欄位 (4 位):用於限制組播的擴散(比 IPv4 TTL 更好)
    • 1 = 節點本地:資料包不能離開主機;
    • 2 = 鏈路本地:資料包不能離開第 2 層網路;
    • 5 = 站點本地:資料包不能離開例如校園網路;
    • 8 = 組織本地:資料包不能離開組織網路;
    • E = 全域性:資料包可以去任何地方;
  • 組 ID 欄位 (112 位):標識組播組,資料包將轉發到組中的所有節點。

如果主機想要加入組播組,它需要使用 ICMP 協議 請求加入;一旦它被新增到組播組中,它將收到傳送到該特定組播地址的所有資料包。 重要的是要注意,將接收組播資料包的主機 不是 由源定義的,而是由目的地 “決定” 的。

請求節點組播地址
[編輯 | 編輯原始碼]

預設情況下,每個執行節點都屬於一個請求節點組播組,其地址來自其 IPv6 地址

96 104 128
FF02::1 FF 來自 IPv6 地址的 24 個最低有效位

同一組播組中可能有多個主機,但通常沒有,因為組播地址是從 IPv6 地址生成的。

將 IPv6 對映到乙太網
[編輯 | 編輯原始碼]

每個組播資料包都透過一個乙太網幀傳遞,該幀具有從 IPv6 組播地址派生的特定 MAC 地址,以便資料包僅由感興趣的主機處理

16 48
3333 來自目標 IPv6 地址的 32 個最低有效位
[編輯 | 編輯原始碼]

重新編號

[編輯 | 編輯原始碼]

由於全域性地址的字首是根據服務提供商層次結構分配的,如果一家公司想要從一個服務提供商更換到另一個服務提供商,該公司網路中的所有鏈路都必須更改其字首。IPv6 旨在支援主機和路由器輕鬆重新編號

  • 主機:路由器逐漸停止通告舊字首(已棄用)並開始通告新字首(首選)→ 每個主機在遷移階段將為同一介面具有兩個具有不同字首的地址;
  • 路由器:路由器重新編號是一種標準,允許邊界路由器將新字首通知其他內部路由器。

但是,重新編號仍然存在一些未解決的問題,這些問題與如何自動更新例如 DNS 條目、防火牆過濾器、基於地址的公司策略等相關。

多宿主

[編輯 | 編輯原始碼]

一家大型公司可能決定從兩個不同的服務提供商處購買網際網路連線,因為它希望即使其中一個服務提供商出現問題也能保持連線到網際網路。

由於全域性地址的字首是根據服務提供商層次結構分配的,公司網路中的每個主機將為同一介面具有兩個具有不同字首的全域性地址→ 主機將不得不選擇為每個傳出資料包使用哪個地址。這可能會導致一些非平凡的配置問題

  • 基於目標地址的路由:主機應該能夠為傳出資料包選擇正確的地址,否則假設主機選擇提供商 A 的字首但目標在提供商 B 的網路中→ 邊界路由器由於其路由機制將直接將資料包轉發到提供商 B 的網路→ 提供商 B 將阻止該資料包,因為源地址具有不同的字首;
  • 在 DNS 中雙重註冊:主機應該在 DNS 中註冊兩個不同的地址以供相同的別名使用;
  • 自動重新編號:重新編號機制應該動態地支援從提供商 B 更改到提供商 C。

範圍地址

[編輯 | 編輯原始碼]

主機可以有兩個介面(例如,一個乙太網介面和一個 Wi-Fi 介面),它們可以同時連線到兩個不同的鏈路。當主機想要向鏈路本地目標地址傳送資料包時,它不知道是讓資料包退出介面 A 還是介面 B,因為兩個鏈路具有相同的字首;此外,由於每個鏈路本地地址在其鏈路內都是唯一的,鏈路 A 中的主機可能與鏈路 B 中的另一個主機具有相同的鏈路本地地址。

在 IPv6 中,主機需要在目標 IPv6 地址中指定一個名為 範圍 的識別符號,該識別符號用於標識物理介面(例如,FE80::0237:00FF:FE02:A7FD%19)。 範圍的值由作業系統根據其內部標準選擇。

標準 IPv6 標頭

[編輯 | 編輯原始碼]

標準 IPv6 標頭具有以下固定大小(40 位元組)格式

4 12 16 24 32
版本 (6) 優先順序 流標籤
有效載荷長度 下一個標頭 跳數限制
 
地址
 
 
目標
地址
 

其中最重要的欄位是

  • 版本 欄位 (4 位):它沒有實際使用,因為資料包區分是由第 2 層完成的→ 這使得雙棧方法成為可能 ( 計算機網路技術和服務/遷移到 IPv6#遷移作業系統);
  • 優先順序 欄位 (8 位):等效於 IPv4 的 “服務型別” 欄位,它允許區分服務質量的不同型別 ( 計算機網路技術和服務/服務質量#架構);
  • 流標籤 欄位 (20 位):它允許區分服務質量的不同流;
  • 下一個報頭 欄位(8 位):它指的是報文有效載荷,即上層報頭(例如 TCP/UDP)或鏈中的第一個擴充套件報頭( #擴充套件報頭)。
  • 跳數限制 欄位(8 位):它等同於 IPv4 的“生存時間”欄位;
  • 源地址 欄位(128 位):它包含傳送者的 IPv6 源地址;
  • 目的地址 欄位(128 位):它包含接收者的 IPv6 目的地址。

某些 IPv4 欄位已被刪除。

  • 校驗和 欄位:錯誤保護已委託給第 2 層(幀校驗序列);
  • 分片 欄位:分片已委託給“分片”擴充套件報頭;
  • 報頭長度 欄位:IPv6 報頭是固定大小的,因為擴充套件報頭可以選擇性地提供附加功能。

擴充套件報頭

[編輯 | 編輯原始碼]

有六個擴充套件報頭,僅在需要時新增,並按以下順序處理。

  1. 逐跳選項:它包含需要由每個跳點處理的可選資訊;
  2. 路由:它啟用 **源路由**,即源決定報文需要走哪條路線;
  3. 分片:它管理分片;
  4. 認證報頭 (AH):它允許驗證傳送者;
  5. 封裝安全負載 (ESP):它允許加密報文內容;
  6. 目的選項:它包含僅由目的端處理的可選資訊。

路由器始終只處理到“路由”擴充套件報頭為止。

所有擴充套件報頭都具有相同的通用格式(長度必須是 64 位的倍數)。

8 16 32
下一個報頭 報頭長度
擴充套件資料 ::

其中欄位是

  • 下一個報頭 欄位:它指定鏈中接下來的擴充套件報頭,或者如果這是最後一個擴充套件報頭,則指定上層報頭(例如 TCP/UDP);
  • 報頭長度 欄位:它指定當前擴充套件報頭的長度。
隨著時間的推移,新的擴充套件報頭可能會被標準化,舊裝置可能無法處理最新的擴充套件報頭→它們可以檢視“長度”欄位以跳過未知的擴充套件報頭。
某些擴充套件報頭(如“分片”擴充套件報頭)可能沒有“報頭長度”欄位,因為 IPv6 標準將它們定義為固定長度。

逐跳選項和目的選項

[編輯 | 編輯原始碼]

**逐跳選項** 和 **目的選項** 擴充套件報頭可以包含多個附加選項。

  • 逐跳選項:它包含報文經過的每個路由器都必須處理的選項;
  • 目的選項:它包含只有目的端才能處理的選項。

例如,如果有兩個選項的 8 位長值,則擴充套件報頭將具有以下格式。

8 16 24 32
下一個報頭 報頭長度 型別 1 長度
值 1 型別 2 長度 2 值 2

其中每個選項始終具有以下三個欄位。

  • 長度 欄位(8 位):它指定當前選項的長度,以便無法識別選項的路由器可以跳過它;
  • 型別 欄位(8 位):它標識當前選項。
前兩位始終指定在無法識別選項時要執行的操作,而第三位指定選項是否可以在執行時更改。
  • 00 = 可以忽略當前選項,可以繼續執行下一個選項;
  • 01 = 必須丟棄報文;
  • 10 = 必須丟棄報文,並且必須生成 ICMPv6 引數問題;
  • 11 = 必須丟棄報文,並且必須生成 ICMPv6 引數問題,除非目的地址是組播地址;
  • xx0 = 選項 不能 更改;
  • xx1 = 選項 可以 在執行時更改;
  • 欄位(可變長度):它包含選項的值。

**路由** 擴充套件報頭允許源決定報文需要走哪條路線(**源路由**),並且它具有以下格式。

8 16 24 32
下一個報頭 報頭長度 路由型別 剩餘段數
(保留)
 
路由器
地址 1
 
...
 
路由器
地址 N
 

其中欄位是

  • 路由型別 欄位(8 位):它指定路由的型別(目前為“0”,代表經典源路由);
  • 剩餘段數 欄位(8 位):它指定到達目的地的剩餘跳數;
  • 路由器地址 欄位(每個欄位 128 位):它們是報文應經過的路由器的 IPv6 地址列表。
“路由”擴充套件報頭的使用示例。

在側邊圖的示例中,源 S 將報文傳送到目的端 D,新增一個“路由”擴充套件報頭,該報頭強制報文經過中間路由器 R1 和 R2。因此,最初報文似乎將路由器 R1 作為目的端,而實際目的端 D 作為“路由”擴充套件報頭指定的路由器列表中的最後一步。當報文到達路由器 R1 時,它會將其識別為似乎是發往它的;實際上,它的地址出現在 IPv6 報頭的“目的地址”欄位中。路由器 R1 檢查下一個報頭,發現報文包含一個“路由”擴充套件報頭,意識到報文的最終目的地是另一個主機(特別是“剩餘段數”欄位表示在到達最終目的地之前應該遍歷兩個跳點)。路由器 R1 找到它應該傳送報文的下一個跳點的 IPv6 地址,並用自己的 IPv6 地址替換它,然後它將報文傳送到目的端設定為 R2。該過程將持續進行,直到目的端 D 收到一個 IPv6 報文,其“路由”擴充套件報頭的“剩餘段數”欄位設定為 0,這意味著報文已到達最終目的地。目的端 D 能夠知道報文經過的所有跳點,因為它們都記錄在“路由”擴充套件報頭中,因此它可以透過指定相同的(反向)跳點列表將回復轉發到源 S。

**分片** 擴充套件報頭允許將報文傳送為更小的部分,稱為“分片”,並且它具有以下格式。

8 16 29 31 32
下一個報頭 (保留) 分片偏移量 (保留) M
標識

其中欄位是

  • 分片偏移量 欄位(13 位):它指定分片在原始報文的分片部分中開始的位元組編號;
  • 更多分片 (M) 標誌(1 位):如果它設定為 0,則當前報文是最後一個分片;
  • 標識 欄位(32 位):特定報文的所有分片都具有相同的識別符號。

每個報文都包含兩個部分。

  • 一個不能分片的部分,因此它在所有分片中都重複:它包含 IPv6 報頭以及所有在“分片”擴充套件報頭之前的擴充套件報頭;
  • 一個可以分片的部分:它包含“分片”擴充套件報頭之後的所有擴充套件報頭以及報文有效載荷。
“分片”擴充套件報頭的使用示例。

與 IPv4 不同,只有傳送節點可以分片資料報,而 IPv6 路由器不支援分片。此外,IPv6 標準強烈建議出於效能原因使用路徑 MTU 發現而不是分片: #報文過大

為 IPv6 開發的解決方案已從 IPv4-IPsec 協議套件移植過來。在 IPv6 中,IPSec 是一個整合的協議套件,它定義了兩個報頭。

  • 認證報頭 (AH):它驗證 整個報文,但驗證那些在從一個跳點到另一個跳點時會發生更改的欄位(例如“跳數限制”欄位),以保證沒有人篡改了報文的內容;
  • 封裝安全負載 (ESP):它驗證和加密 報文有效載荷 以保證資料隱私。

IPsec 沒有定義要使用哪些演算法進行加密和認證,但雙方必須就用於交換 IPsec 保護的資訊使用哪些演算法達成一致→靈活性:根據當前需求選擇演算法。

安全關聯 (SA) 可以定義為兩個通訊方 A 和 B 之間就用於 ESP 身份驗證和加密以及 AH 身份驗證的私鑰和演算法達成的一組協議。每個 SA 都由一個稱為安全引數索引 (SPI) 的標識標籤標識,該標籤包含在 AH 和 ESP 頭部中,並且它是一個單向邏輯通道:A 和 B 必須開啟一個 SA 來就從 A 到 B 的訊息的金鑰和演算法達成一致,並且他們必須開啟另一個 SA 來就從 B 到 A 的訊息的金鑰和演算法達成一致。通常,每個 TCP 埠都會開啟一個 SA。

A 和 B 如何在不洩露給無關人員的情況下就金鑰達成一致?主要有三種策略

  • 靜態配置:金鑰在 A 和 B 中手動配置 → 無需進行金鑰協商;
  • Diffie-Hellman 方法:它允許在不交換金鑰的情況下就金鑰達成一致 → 沒有人可以透過嗅探 A 和 B 之間的流量來發現金鑰;
  • 網際網路金鑰交換 (IKE) 協議:它使用數字證書和非對稱加密以安全的方式傳送金鑰。

IKE 協議規定必須從 A 到 B 建立 IKE SA,以就從 A 到 B 的子 SA 的金鑰達成一致,反之亦然,另一個用於從 B 到 A 的子 SA。從 A 到 B 的 IKE SA 包括以下基於非對稱加密的操作:[1]

  1. B 向 A 請求一個金鑰,用於從 A 到 B 的子 SA;
  2. A 向一個可信的證書頒發機構請求 B 的數字證書,以確定 B 是否確實是它聲稱的身份;
  3. 證書頒發機構向 A 提供 B 的數字證書,該證書使用證書頒發機構的私鑰加密,包含 B 的簽名,即 B 與公鑰之間的關聯;
  4. A 使用證書頒發機構的公鑰解密數字證書,並瞭解與 B 關聯的公鑰;
  5. A 將子 SA 的金鑰傳送給 B,使用與 B 關聯的公鑰加密訊息,以便只有知道 B 的私鑰才能解密;
  6. B 接收來自 A 的訊息,使用其私鑰解密它,並瞭解 A 為子 SA 決定的金鑰;
  7. 可以使用商定的金鑰從 A 到 B 開啟子 SA。

一些無關人員可能會檢視 A 和 B 之間交換的流量,並透過執行暴力破解攻擊或分析一些推斷出的統計資訊來猜測金鑰。網際網路安全關聯金鑰管理協議 (ISAKMP) 是 IKE 的一個子協議,用於定期以安全的方式重新協商金鑰,以便無關人員沒有時間猜測它們。

身份驗證頭 (AH) 保證 IP 資料包的無連線完整性和資料來源身份驗證:它對\ul{整個資料包}進行身份驗證,但對從一個跳躍傳遞到另一個跳躍時發生更改的欄位(例如“跳躍限制”欄位)進行身份驗證,以確保沒有人篡改資料包的內容。

AH 在處理 NAT 時存在問題,因為它還對地址和埠進行身份驗證。

關鍵概念: 沒有人可以更改資料包,但每個人都可以讀取它。

身份驗證頭具有以下格式

8 16 32
下一個報頭 有效載荷長度 (保留)
SPI
序列號
身份驗證資料 ::

其中欄位是

  • 下一個頭部 欄位 (8 位):指定下一個封裝協議;
  • 有效載荷長度 欄位 (8 位):指定身份驗證頭的長度(以 32 位字為單位)− 2(可以清除為零);
  • 安全引數索引 (SPI) 欄位 (32 位):標識此資料報的安全關聯(如果清除為零,則不存在安全關聯;1 到 255 範圍內的值保留);
  • 序列號 欄位 (32 位):它包含一個單調遞增的計數器值;
  • 訊息摘要 欄位 (可變長度):它使用金鑰對資料包的內容進行摘要:任何想要更改資料包內容的人都需要知道金鑰才能重新計算訊息摘要(類似於錯誤檢測欄位)。

封裝安全負載 (ESP) 頭部為 IP 資料包提供來源身份驗證、完整性和機密性保護:它對資料包有效載荷進行身份驗證和加密,以保護資料隱私。

雖然 ESP 可以進行身份驗證,但它不執行與 AH 相同的功能:ESP 不會對整個 IPv6 資料包進行身份驗證。

關鍵概念: 沒有人可以讀取資料包,因此沒有人可以更改它。

ESP 頭部始終是頭部鏈中的最後一個,並且具有以下格式

16 24 32
SPI
已驗證
序列號
有效載荷資料 ::
加密
填充 ::
有效載荷長度 下一個報頭
身份驗證資料 ::

其中欄位是

  • 安全引數索引 (SPI) 欄位 (32 位):標識此資料報的安全關聯;
  • 序列號 欄位 (無符號 32 位):它包含一個單調遞增的計數器值。
“序列號”欄位對於傳送方是必需的,即使接收方沒有選擇為特定 SA 啟用反重放服務,它也始終存在,但此欄位的處理由接收方決定;
  • 有效載荷資料 欄位 (可變長度):它包含“下一個頭部”欄位描述的資料;
  • 填充 欄位 (可變長度 0 到 255 位):可能需要填充,無論加密演算法的要求如何,以確保生成的密文以 4 位元組邊界結束;
  • 填充長度 欄位 (8 位):指定“填充”欄位的大小(以位元組為單位);
  • 下一個頭部 欄位 (8 位):一個 IPv4/IPv6 協議號,描述“有效載荷資料”欄位的格式;
  • 身份驗證資料 欄位 (可變長度):它包含對 ESP 資料包(減去“身份驗證資料”欄位)計算出的完整性校驗值 (ICV)。
“身份驗證資料”欄位的長度由所選的身份驗證函式指定。“身份驗證資料”欄位是可選的:只有在為相關 SA 選擇身份驗證服務時才包含它。身份驗證演算法規範必須指定 ICV 長度以及用於驗證的比較規則和處理步驟。請注意,“身份驗證資料”欄位被加密。

ESP 支援兩種使用模式(可選地與 AH 結合使用)

  • 傳輸模式:ESP 不會加密 IPv6 頭部 → 中間任何人都可以檢視 IPv6 頭部中的源 IP 地址和目標 IP 地址
IPv6 頭部 其他擴充套件頭部 ESP 頭部
(用於加密)
TCP/UDP 頭部 有效載荷 ESP 身份驗證
加密資料
已驗證資料
  • 隧道模式:IPv6 資料包被封裝到另一個具有 ESP 的 IPv6 資料包中 → 原始資料包的 IPv6 頭部(包含源 IP 地址和目標 IP 地址)被加密,沒有人可以看到它
IPv6 頭部 ESP 頭部
(用於加密)
IPv6 頭部 其他擴充套件頭部 TCP/UDP 頭部 有效載荷 ESP 身份驗證
加密資料
已驗證資料

ICMPv6

[edit | edit source]

網際網路控制訊息協議版本 6 (ICMPv6) 是 IPv6 標準的組成部分,它反過來整合了 ARP 和 IGMP 協議的功能,並擴充套件了它們。

所有 ICMPv6 訊息都放在資料包中的擴充套件頭部之後,並且它們具有相同的通用格式

8 16 32
型別 程式碼 校驗和
訊息體 ::

其中“型別”欄位標識 ICMPv6 訊息的型別

  • 診斷 訊息:與 ICMPv4 中一樣,它們允許報告網路中的錯誤或問題
  • ping 命令 使用的訊息
    • 128 = 回顯請求
    • 129 = 回顯應答
  • 組播偵聽器發現 訊息:它們擴充套件了 IGMP 功能
    • 130 = 組播偵聽器查詢
    • 131 = 組播偵聽器報告
    • 132 = 組播偵聽器完成
  • 鄰居發現 訊息:它們擴充套件了 ARP 功能
    • 133 = 路由器請求
    • 134 = 路由器通告
    • 135 = 鄰居請求
    • 136 = 鄰居通告
    • 137 = 重定向

資料包過大

[編輯 | 編輯原始碼]

當路由器收到資料包大小過大的情況,它會執行一項稱為 **路徑 MTU 發現** 的技術:它會丟棄該資料包併發送一個型別為 **資料包過大** 的 ICMPv6 訊息,以通知傳送方允許的最大傳輸單元 (MTU) 大小,並強制它再次傳送資料包本身(以及後續資料包),其大小不超過路由器指定 的 MTU。此技術的目的是儘可能避免碎片化。

組播監聽器發現

[編輯 | 編輯原始碼]

**組播監聽器發現** 是 ICMPv6 中的元件,它擴充套件了 IPv4 IGMP 協議的功能來管理組播組成員資格

  • 組播監聽器查詢:
    • 通用查詢:路由器詢問主機是否對加入某些組播組感興趣;
    • 組播地址特定查詢:路由器詢問主機是否對加入特定組播組感興趣;
  • **組播監聽器報告**:主機通知路由器它想要加入特定組播組,以接收所有傳送到指定組播組對應組播地址的組播資料包;
  • **組播監聽器完成**:主機通知路由器它想要停止接收針對特定組播組的組播資料包。

鄰居發現

[編輯 | 編輯原始碼]

**鄰居發現** 是 ICMPv6 中的元件,它擴充套件了 IPv4 ARP 協議的功能

  • **鄰居請求**:主機發送一個組播資料包,目標 IPv6 地址為與其想要了解 MAC 地址對應的所請求節點組播地址;
  • **鄰居通告**:具有指定 IPv6 地址的主機發送回其 MAC 地址;
  • **路由器請求**:主機發送一個組播資料包以請求路由器傳送回包含給定網路詳細資訊的“路由器通告”訊息(如與鏈路關聯的字首、自動配置/DHCP 標誌、預設裝置);
  • **路由器通告**:路由器在鏈路中通告其存在,報告與鏈路關聯的字首以及一個標誌,該標誌表明主機是否應自動配置其自身或查詢 DHCP 伺服器。

“鄰居發現”ICMPv6 訊息用於自動配置連線到鏈路的主機的 IPv6 地址:首先,主機必須獲取一個鏈路本地地址,以便能夠與鏈路中的其他主機聯絡,然後它必須獲取一個全域性地址,以便能夠退出鏈路並透過全域性唯一地址訪問網際網路。

[編輯 | 編輯原始碼]

鏈路本地地址透過使用“鄰居請求”和“鄰居通告”ICMPv6 訊息自動配置

  1. 主機自行生成一個作為其鏈路本地地址的 IPv6 地址候選
    • 字首:始終為“FE80::”;
    • 介面識別符號:可以基於 MAC 地址(EUI-64 格式)生成,也可以出於隱私原因隨機生成(可追蹤性);
  2. 主機透過組播將“鄰居請求”訊息傳送到與所選候選鏈路本地地址對應的組播請求節點,將目標 IPv6 地址指定為其自生成地址,並詢問是否存在一個鏈路本地地址與指定 IPv6 地址相同的鏈路中的主機(**重複地址檢測**);
  3. 如果鏈路中已經存在具有傳送方鏈路本地地址的主機,它會將“鄰居通告”訊息傳送回傳送方,傳送方將不得不隨機生成另一個候選地址,並透過組播發送另一個“鄰居請求”訊息;
  4. 如果沒有回覆,則該地址在鏈路中是唯一的,主機能夠使用其鏈路本地地址與同一鏈路中的所有其他主機通訊,但它仍然無法訪問網際網路,因為它需要一個全域性地址。

全域性地址自動配置過程

[編輯 | 編輯原始碼]

全域性地址透過使用“路由器請求”、“路由器通告”、“鄰居請求”和“鄰居通告”ICMPv6 訊息自動配置

  1. 主機透過組播將“路由器請求”訊息傳送以請求路由器傳送回包含與鏈路關聯的介面識別符號的“路由器通告”訊息;[2]
  2. 路由器傳送回包含“管理地址配置”(M)和“其他配置”(O)兩個標誌的“路由器通告”訊息
    • M = 1:主機必須聯絡 DHCP 伺服器以獲取鏈路的字首和其他網路配置引數(如 DNS 地址),而不必理會路由器的“路由器通告”訊息(**有狀態配置**);
    • M = 0:主機必須檢視“O”標誌
      • O = 1:主機可以從“路由器通告”訊息中獲取鏈路的字首,但它仍然必須聯絡 DHCP 伺服器以獲取其他網路配置引數(如 DNS 地址);
      • O = 0:主機可以從“路由器通告”訊息中獲取鏈路的字首,並且 DHCP 伺服器沒有其他配置資訊可用(**無狀態配置**)→ 其他網路配置引數(如 DNS 地址)必須手動配置在主機上,或者主機可以透過 IPv4 獲取 DNS 地址 ( 計算機網路技術和服務/遷移到 IPv6#遷移 DNSes);
  3. 主機自行生成一個作為其全域性地址的 IPv6 地址候選
    • 字首:等於鏈路的字首,從“路由器通告”訊息中獲取或透過聯絡 DHCP 伺服器獲取;
    • 介面識別符號:可以基於 MAC 地址(EUI-64 格式)生成,也可以出於隱私原因隨機生成(可追蹤性);
  4. 主機透過組播將“鄰居請求”訊息傳送到鏈路中的所有主機,將目標 IPv6 地址指定為其自生成地址,並詢問是否存在一個全域性地址與指定 IPv6 地址相同的主機(**重複地址檢測**);
  5. 如果鏈路中已經存在具有傳送方全域性地址的主機,它會將“鄰居通告”訊息傳送回傳送方,傳送方將不得不隨機生成另一個候選地址,並透過組播發送另一個“鄰居請求”訊息;
  6. 如果沒有回覆,則該地址是全域性唯一的,主機能夠使用其全域性地址訪問網際網路。

微軟提出的另一種實現是,主機可以聯絡 DNS 伺服器,而無需知道其地址:主機將資料包傳送到一個固定的任播地址,網路負責將資料包傳遞到 DNS 伺服器。但是,這種實現並沒有真正被使用

  • 任播地址管理的實現很少;
  • 這種解決方案不受 GNU/Linux 作業系統的支援。

自動配置基於 MAC 地址,因此如果網絡卡損壞並需要更換,主機將不得不更改其地址,但快取(例如 DNS 快取)無法立即更新→ 靜態配置仍然是可能的,尤其是對於需要儘可能連續保持可訪問性的固定機器(例如公共網站的伺服器)。

參考資料

[編輯 | 編輯原始碼]
  1. 為簡便起見,我們假設 SA 只需要一個金鑰。
  2. 如果路由器被配置為定期組播“路由器通告”訊息,則此步驟不是必需的。
Previous page
MPLS
計算機網路技術與服務 Next page
遷移到 IPv6
IPv6
華夏公益教科書