簡介,轉換概述,結構構成,客戶端,伺服器,中繼,主機中繼,地址,數據格式,數據包,氣泡數據包,指示符,路由,Teredo,客戶端,過程,初始設定,維持 NAT 映射,站點通信初始化,主機初始化,初始化,總結,注意要點,鳴謝,
簡介
在開始有關 Teredo 詳細討論前,我們有必要首先了解一下什麼是 Teredo 以及我們為什麼需要它。 Teredo 是一項地址分配和自動
隧道技術,能夠跨越 IPv4 Internet 實現 IPv6
單播連線。在它之前已經有了一種能夠通過 IPv4 Internet 實現 IPv6單播連線的自動隧道技術—— 6to4 。 6to4
路由器使用一個公用的 IPv4 地址來構建 6to4 前綴,起到 IPv6 通告和促進路由器的作用。 6to4路由器壓縮和解壓經過站點
節點的 IPv6 數據流。
6to4 技術依靠公用 IPv4 地址的配置以及邊界設備中採用的 6to4
路由功能。在許多小型辦公室/家庭辦公室(SOHO)配置中, IPv4 Internet
網路地址轉換(NAT) 被廣泛使用。如要了解更多關於網路地址轉換工作的情況,請參閱文中的“網路地址轉換(NAT)概述”。在大多數 NAT 配置中,提供 NAT 功能的設備並不具備成為 6to4路由器的功能。即使 NAT 設備普遍支持 6to4 ,還是有一些配置包含多層NAT。在這些多層配置中,支持 6to4 的NAT無法成為路由器,因為它不具備一個公共的 IPv4 地址。
Teredo 通過在站點內的
主機之間實現 IPv6
數據包隧道來解決現今 NAT 設備缺乏 6to4 功能以及多層 NAT 配置問題。相反, 6to4 使用
邊緣設備之間的隧道。主機之間隧道給 NAT 帶來了另外一個問題:IPv4 壓縮的 IPv6數據包傳送時協定域的 IPv4 標頭設定為41。大多數的 NAT只解析 TCP 或者 UDP 數據流,而且需要通過手動設定來實現對其它協定的解析或者安裝負責處理解析的 NAT編輯器。因為協定41的解析並不是 NAT 的通用功能,所以 IPv4 壓縮的 IPv6 通信傳輸不能通過一般的 NAT。為了使 IPv6 數據傳輸能夠通過單個或多層 NAT, IPv6數據包必須壓縮成 IPv4 UDP 格式的數據,包含 IPv4 和 UDP 標頭各一個。UDP 數據普遍能夠被 NAT 解析而且能夠通過多層 NAT。
總之, Teredo 是一項 IPv6/IPv4 轉換技術,能夠實現在處於單個或者多個 IPv4 NAT 後的主機之間的 IPv6 自動隧道。來自 Teredo 主機的 IPv6 數據流能夠通過 NAT,因為它是以 IPv4 UDP 數據格式傳送的。如果 NAT 支持 UDP 連線埠解析,那么它就支持 Teredo 。但是對稱 NAT是一個例外,詳細情況在本文的 "NAT 的種類" 中講解。
Teredo 是作為實現 IPv6 連線最後一種轉換技術而設計的,認識到這一點很重要。如果原來的 IPv6 、 6to4 或者ISATAP連線可用,那么主機就不必作為 Teredo 的客戶端。越來越多的 IPv4 NAT 經過了升級以便能夠支持 6to4 ,而且 IPv6 連線變得越來越普遍, Teredo 將會使用得越來越少,直到最後完全被放棄。
Advanced Networking Pack for Windows XP 中的 IPv6 實現根據題為
"Teredo:通過 NAT 建立 IPv6 的UDP 隧道 "Internet 草案來實現的。
要在 Windows Sockets應用程式中使用 Teredo 功能,請參閱Microsoft 開發者網路中的"使用 IPv6 _保護_等級"主題。
轉換概述
網路地址轉換(NAT) 是指符合 RFC 1631 標準的 IPv4
路由器,它能夠在傳送前解析數據包 IP 地址以及 TCP/UDP
連線埠號。例如,構想一個由多台
計算機組成的,連線到 Internet 的小型商務網。通常需要為每台連線到 Internet 的電腦從 Internet 服務提供商 (ISP) 處得到一個 IP 地址。但是通過 NAT,這個小型的商務網就可以使用
私有地址(如 RFC 1918 所述) ,然後通過 NAT 將專用
地址映射到單個或者多個 IP 公用地址。
當一台小型商務企業的內部網計算機用戶連線到 Internet 資源時,該用戶的 TCP/IP 協定產生一個 IP
數據包,該數據包包含以下值,這些值位於 IP 和 TCP 或 UDP 包頭中:(粗體內容表示受 NAT 影響的項目):
· | 目標 IP 地址:Internet 資源 IP 地址 |
· | 源 IP 地址:私有 IP 地址 |
· | 目標連線埠:Internet 資源 TCP 或 UDP 連線埠 |
· | 源連線埠:源應用程式 TCP 或 UDP 連線埠 |
請求源
主機或者其它
路由器將此 IP 數據包傳送給 NAT, 然後由 NAT 將向外傳送的數據包的
地址解析如下:
· | 目標IP位址:Internet 資源 IP 地址 |
· | 源IP 地址:ISP 分配的公用地址 |
· | 目標連線埠:Internet 資源 TCP 或 UDP 連線埠 |
· | 源連線埠:重新映射的源應用程式 TCP 或 UDP 連線埠 |
NAT 將重新映射的 IP 數據包傳送到 Internet 。回響計算機將向 NAT 返回一個回響。當 NAT 接收到此回響時,該數據包將包含以下地址信息:
· | 目標IP 地址:ISP 分配的公用地址 |
· | 源IP位址:Internet 資源 IP 地址 |
· | 目標連線埠:重新映射的源應用程式 TCP 或 UDP 連線埠 |
· | 源連線埠:Internet 資源的 TCP 或者 UDP 連線埠 |
當 NAT 完成映射和解析地址後,將向 Internet客戶端傳送數據包,此數據包包含以下地址信息:
· | 目標 IP 地址:私有 IP 地址 |
· | 源 IP 地址:Internet 資源 IP 地址 |
· | 目標連線埠:源應用程式 TCP 或者 UDP 連線埠 |
· | 源連線埠:Internet 資源 TCP 或 UDP 連線埠 |
對於向外傳送的數據包,源 IP 地址和 TCP/UDP
連線埠號將被映射到一個公用源 IP 地址和一個可能變化的 TCP/UDP 連線埠號。對於接收的數據包,目標 IP 地址和 TCP/UDP連線埠號將被映射到私有 IP 地址和初始 TCP/UDP 連線埠號。
請求源主機將此 IP 數據包傳送給 NAT 設備,然後由 NAT 設備解析向外傳送數據包的地址如下:
· | 目標 IP 地址:157.60.0.1 |
· | 源 IP 地址:131.107.0.1 |
· | 目標連線埠:80 |
· | 源連線埠:5000 |
NAT 將重新映射後的 IP 數據包傳送到 Internet。網站伺服器向 NAT 返回一個回響。當 NAT 接受到此回響時,數據包包含以下地址信息:
· | 目標IP位址:131.107.0.1 |
· | 源IP位址:157.60.0.1 |
· | 目標連線埠:5000 |
· | 源連線埠:80 |
當 NAT 完成地址的映射和解析後,它將此數據包傳送給 Internet客戶端,數據包包含以下地址信息:
· | 目標IP位址:192.168.0.99 |
· | 源IP位址:157.60.0.1 |
· | 目標連線埠:1025 |
· | 源連線埠:80 |
圖 1 展示了此例子的配置方式。
圖1:NAT示例
查看大圖。
從私用流量到公共流量的映射儲存在一個 NAT 轉換表中,包括兩種類型的條目:
1. | 動態映射 在專用網路用戶開始通信時產生。除非被與 NAT 轉換表相對應的流量所刷新,否則動態映射在指定的時間後將從 NAT 轉換表中刪除。 |
2. | 靜態映射 通過手動設定,使 Internet 客戶進行的通信能夠映射到某個特定的私有網路地址和連線埠。如果想讓連線在 Internet 上的計算機能夠使用某個私有網路上的伺服器(如網站伺服器)以及應用程式(如遊戲),那么靜態映射是必需的。靜態映射不會從 NAT 轉換表中刪除。 |
如果在 NAT 轉換表中存在某個映射,那么 NAT 只是單向地從 Internet 向私有網路傳送數據。這樣,NAT 就為連線到私有網路部分的計算機提供了某種程度的保護。但是,如果考慮到 Internet 的安全性,NAT 就要配合全功能的
防火牆一起使用。
NAT 類型
以下各類 NAT 的定義:
· | Cone(Cone) NAT 完全 NAT 是指在 NAT 轉換表中存儲了內部地址和連線埠號與外部地址和連線埠號之間映射關係的一類 NAT。一旦 NAT 轉換表開始工作,來自任何源地址和連線埠通往外部地址和連線埠的入站數據包都將被轉換。 |
· | 受限 NAT 受限 NAT是指在 NAT 轉換表中為特定的源地址或者特定源地址與連線埠號存儲了內部地址和連線埠號與外部地址和連線埠號之間的映射。如果從某個未知外部地址或者連線埠到外部目標地址和連線埠的入站數據包與 NAT 轉換表吻合,那么此數據流將被自動放棄。 |
· | 對稱 NAT 對稱 NAT 是指根據外部目標地址(適用於出站數據包)將相同的內部地址和連線埠號映射到不同的外部地址和連線埠號的 NAT。 Teredo 只能工作於Cone和受限 NAT,不能工作於對稱 NAT。 |
返回頁首
結構構成
Teredo 結構由以下各部分組成(如圖 2 所示):
· | Teredo 客戶端 |
· | Teredo 伺服器 |
· | Teredo 中繼 |
· | 特定於 Teredo 主機的中繼 圖2:Teredo 結構圖 查看大圖。 |
客戶端
Teredo客戶端是指支持 Teredo 隧道接口的 IPv6 / IPv4
節點,通過此隧道界面
數據包可以傳送給其它的 Teredo客戶端以及 IPv6 Internet上的其它節點 (通過 Teredo 中繼)。 Teredo客戶端與 Teredo 伺服器建立通信獲得配置基於 Teredo 的 IPv6 地址用的地址前綴或者幫助建立與 IPv6 Internet上其它 Teredo客戶端和伺服器之間的通信。
The Advanced Networking Pack for Windows XP 包含了一個 Teredo客戶端。
伺服器
Teredo 伺服器是指連線 IPv4 Internet 與 IPv6 Internet 的 IPv6 / IPv4
節點,支持用來接受數據包的 Teredo 隧道接口。Teredo 伺服器的常見作用是幫助 Teredo客戶端的地址配置以及協助在 Teredo 客戶端之間或者客戶端與純 IPv6
主機之間與其他 Teredo 客戶端建立通信連線。Teredo 伺服器使用 UDP 3544 連線埠偵聽 Teredo 通信。
有關 Teredo 伺服器在協助建立通信連線中的作用,請參閱本文" Teredo 程式步驟"。
The Advanced Networking Pack for Windows XP 不包含 Teredo 伺服器功能。 The Advanced Networking Pack for Windows XP 有助於建立通信連線, Microsoft 採用 IPv4 Internet上的 Teredo 伺服器。
中繼
Teredo 中繼是指能夠在 IPv4 Internet 上的 Teredo客戶端之間(使用 Teredo 隧道接口)以及與純 IPv6
主機之間傳送
數據包的 IPv6 / IPv4
路由器。在某些情況下,Teredo 中繼和 Teredo 伺服器協同工作,幫助在 Teredo客戶端之間以及與純 IPv6主機之間建立連線。 Teredor 中繼使用 UDP 3544 連線埠偵聽 Teredo 通信。
有關 Teredo 中繼在 Teredo客戶端之間以及 Teredo客戶端與純 IPv6主機之間的發起和開展通信方面所具有的作用,請參閱本文中"Teredo 進程"部分 。
The Advanced Networking Pack for Windows XP 不包含 Teredo 中繼功能。 Microsoft 沒有打算使用任何 IPv4 Internet 上的 Teredo 中繼。個人 Internet 服務提供商 (ISP) 可以使用他們自己的 Teredo 中繼。在向處於 IPv6 Internet 上的 IPv6
主機傳送數據包的時候,採用了The Advanced Networking Pack for Windows XP 的 Teredo客戶端將和 Teredo 中繼協同工作。 Teredo 中繼並不需要和特定於 Teredo主機的中繼進行通信。
主機中繼
配置了全球地址的 Teredo客戶端與 IPv6
主機之間的通信必須經過 Teredo 中繼。這對於連線到 IPv6 Internet 的 IPv6主機而言是必需的。但是,當 IPv6 主機既支持 IPv6 又支持 IPv4,並且同時連線到 IPv4 Internet 和 IPv6 Internet, 那么,Teredo客戶端與 IPv6 主機之間的通信就會通過 IPv4 Internet 實現,而不必經過 IPv6 Internet 和 Teredo 中繼。
特定於 Teredo主機的中繼是指同時具有 IPv4 與 IPv6 Internet連線,並且無需 Teredo 中繼即可通過 IPv4 Internet 直接與 Teredo客戶端通信的 IPv6 / IPv4 節點。與 IPv4 Internet 的連線可以通過使用一個公用的 IPv4 地址或者使用一個專用 IPv4 地址和邊界 NAT 來實現。與 IPv6 Internet 的連線可以通過直接連線或者當 IPv6 數據包通過 IPv4 Internet 隧道時使用諸如 6to4 這類的 IPv6 轉換技術來實現。特定於 Teredo
主機的中繼使用 UDP 3544 連線埠偵聽 Teredo 通信。
採用了 The Advanced Networking Pack for Windows XP 的 Teredo客戶端包括了特定於 Teredo主機的中繼功能。當在安裝了 SP1 或者更高版本的補丁並且分配了全球地址的 Windows XP 上安裝了The Advanced Networking Pack for Windows XP 後,特定於 Teredo 主機的中繼功能便會自動激活。這個全球地址可以通過從本地 IPv6
路由器、ISATAP 路由器或者 6to4 路由器傳送的路由器通告中獲得。如果運行 Windows XP SP1 的計算機沒有全球地址,那么 Teredo客戶端功能便被激活。
特定於 Teredo
主機的中繼能夠使 Teredo客戶端與 6to4 主機、帶有非 6to4 全球地址前綴的 IPv6 主機或者組織內部的地址中使用全球前綴的 ISATAP 以及 6over4 主機進行有效通信。但是所有的主機都必須使用 The Advanced Networking Pack for Windows XP。
返回頁首
地址
Teredo 地址格式見圖 3。
圖3:Teredo 地址格式
查看大圖。
Teredo 地址包含以下內容:
· | Teredo 前綴 最前面的 32 位是 Teredo 前綴,所有的 Teredo 地址的前綴都是相同的。Windows XP 和Windows Server 2003 使用 3FFE:831F::/32 做為前綴,RFC 4380 中定義 2001::/32 做為前綴,Windows vista之後版本開始使用這個前綴。 |
· | Teredo 伺服器 IPv4 地址 接下來的 32 位包含 Teredo 伺服器的 IPv4 的公共地址以幫助設定 Teredo 地址。更多信息請參閱本文中的 " Teredo 客戶的初始配置"。 |
· | 標誌 接下來的 16 位是為 Teredo 標誌預留的。唯一定義的標誌是被稱作“Cone Flag”的高位。 只有當接入 Internet 的 NAT 為Cone NAT時,“Cone Flag”才可以使用。接入 Internet 的 NAT 是否是Cone NAT 在 Teredo 客戶端的初始配置中設定。更多信息請參閱本文的 "Teredo 客戶初始設定" 章節。 |
· | 隱藏外部連線埠 接下來的 16 位儲存的是與該 Teredo 客戶端所有 Teredo 通信相對應的外部 UDP 連線埠的隱藏模式。當 Teredo 客戶端向 Teredo 伺服器傳送初始數據包時,NAT 會將源數據包的 UDP 連線埠映射到一個不同的外部 UDP 連線埠。Teredo 客戶保留了這個連線埠映射以便使其留在 NAT 轉換表中。因此,主機所有的 Teredo 通信均使用同一外部映射的 UDP 連線埠。UDP 外部連線埠是由 Teredo 伺服器根據從 UDP 源連線埠導入的原始 Teredo 客戶數據包決定並發回 Teredo 客戶的。 外部連線埠的隱藏是將外部連線埠與 0xFFFF 進行邏輯異或運算。例如,外部連線埠的隱藏檔案 5000 的16位進制格式是 EC77 (5000 = 0x1388, 0x1388 XOR 0xFFFF = 0xEC77)。隱藏這個外部連線埠可以預防 NAT 在數據包的有效載荷內轉發時對其進行轉換。 |
· | 隱藏外部地址 最後32 位儲存與 Teredo 客戶端所有 Teredo 通信相對應的外部 IPv4 地址的模糊形式。就像外部連線埠一樣,當 Teredo 客戶端向其伺服器傳送初始數據包後,數據包的源 IP 地址被 NAT 映射到一個不同的外部公用地址。 Teredo 客戶保留了這個地址映射以便使其留在 NAT 的轉換表。因此,主機上所有的 Teredo 通信均使用同一外部的映射公用 IPv4 地址。外部 IPv4 地址是由 Teredo 伺服器根據 Teredo 客戶傳送的原始數據包的源 IPv4 地址決定的,並且發回給 Teredo 客戶。 外部地址通過與 0xFFFFFFFF 進行異或運算後被隱藏。例如,公共 IPv4 地址 131.107.0.1 隱藏後其十六進制的冒號格式為 7C94:FFFE (131.107.0.1 = 0x836B0001, 0x836B0001 XOR 0xFFFFFFFF = 0x7C94FFFE)。隱藏外部地址避免了 NAT 在數據包的有效載荷內轉發時將其轉換。 |
圖 4 是 2 個 Teredo客戶端與他們的地址的示例。
圖4:Teredo 地址示例
查看大圖。
對於 Teredo客戶端A,其 Teredo 地址由以下項目組成:
· | Teredo 通信的外部地址和連線埠是 157.60.0.1,UDP 連線埠是 4096 |
· | Teredo 伺服器的公用 IPv4 a 地址為 206.73.118.1 |
· | 位於一個 Cone NAT 後面 |
所以, 使用 Teredo 地址前綴格式:ServerAddr:Flags:ObscExtPort:ObscExtAddr, Teredo 客戶端 Teredo 地址為 3FFE:831F:CE49:7601:0:DFFF:7C94:FFFE。這基於以下幾點:
· | CE49:7601 是 206.73.118.1 的 16 進制冒號形式 |
· | 8000 是完全標記設為 1 時標記域的值,表示 Teredo 客戶端 A 的 NAT 是一個Cone NAT 。 |
· | EFFF 是 4096 (0x1000) 的隱藏形式 |
· | C2C3:FFFE 是 157.60.0.1的隱藏形式 |
對於 Teredo客戶端B,其 Teredo 地址由以下項目組成:
· | Teredo 通信的外部地址和連線埠是131.107.0.1,UDP連線埠是8192 |
· | Teredo 伺服器位於公用 IPv4 a 地址 206.73.118.1上 |
· | 位於一個受限 NAT 的後面 |
所以,使用 Teredo 地址前綴格式:ServerAddr:Flags:ObscExtPort:ObscExtAddr, Teredo 客戶端 Teredo 地址為 3FFE:831F:CE49:7601:0:DFFF:7C94:FFFE。這基於以下幾點:
· | CE49:7601 是 206.73.118.1 的 16 進制冒號形式 |
· | 0 是完全標記設為 0 時標記域的值,表示 Teredo 客戶端 B 的 NAT 是一個受限 NAT。 |
· | DFFF 是 8192 (0x2000) 的隱藏形式 |
· | 7C94:FFFE 是 131.107.0.1 的隱藏形式 |
Teredo 地址只是分配給 Teredo 客戶端。Teredo 伺服器、中繼、和特定於
主機的中繼並不分配 Teredo 地址。
返回頁首
數據格式
本章節討論以下問題:
· | Teredo 數據包格式 |
· | Teredo 氣泡數據包 |
· | Teredo 指示符 |
數據包
Teredo 數據包格式如圖5所示。
圖5: Teredo 數據包格式
查看大圖。
Teredo 數據包由以下部分構成:
· | IPv4 標頭包含與自動隧道終端相對應的源 IPv4 地址和目標 IPv4 地址並且可以被NAT轉換。 |
· | UDP 標頭包含 Teredo 數據通信的源連線埠和目標連線埠,可以被 NAT 解析。 |
· | IPv6 標頭包含源 IPv6 地址和目標 IPv6 地址,其中至少有一個是 Teredo 地址。 |
· | IPv6 載荷包含零個或者更多的 IPv6 擴展標頭以及壓縮的 IPv6 數據包的上層協定數據單位(PDU)。 |
氣泡數據包
Teredo 氣泡數據包為建立或維持一個 NAT 映射而傳送,由 IPv6 標頭組成,並且不包含 IPv6 有效載荷。圖6為 Teredo 氣泡數據包。
圖6: Teredo 氣泡數據包
查看大圖。
在 IPv6 標頭中,下一個標頭的域設定為 59,表示沒有有效載荷。
指示符
Teredo 使用兩種不同的指示符,它們是用來表示驗證或者地址和連線埠信息的標頭。
驗證指示符
驗證指示符用來保證在 Teredo 客戶端和 Teredo 伺服器之間進行
路由器請求和路由器通告信息的可靠性。 Teredo 客戶端和 Teredo 伺服器都使用在鑑定指示符中產生驗證信息的
密鑰進行加密。驗證指示符處於 UDP 標頭與 IPv6 數據包之間。如果在路由器通告信息中同時出現原始和驗證指示符,那么驗證指示符將被放在原始指示信息前面。
驗證指示符的結構如圖 7 所示。
圖7:驗證信息結構圖
查看大圖。
驗證數據包含以下各域:
· | Indicator Type(指示符的類型) 這個長度為兩個位元組的值指定了指示符的類型。對於驗證指示符,其值為1。 Teredo 客戶端和 Teredo 伺服器 能夠通過 IPv6 數據包的前兩個位元組區分出驗證信息,因為 IPv6 數據包的前四個高位位元組設定為 0110 (6), 與 IPv6 標頭的轉換域相對應。 |
· | Client ID Length(客戶端 ID 長度) 這個長度為 1 個位元組的值指定了“客戶端標識”域的長度。 |
· | Authentication Data Length(驗證數據的長度) 這個長度為 1 位元組的域指定了“驗證值”域的長度。 |
· | Client Identification(客戶端標識) 這個長度不定的域包含一個 Teredo 客戶端的標識字元串。 |
· | Authentication Value(驗證值) 這個長度不定的域包含使用共享密鑰計算的此數據包的驗證值。有關如何計算驗證值的信息請參閱 Teredo Internet 草案的 5.2.2 章節。 |
· | Nonce這個長度為 8 位元組的域包含了一個任意數字,用來證明數據交流還在進行並且防止數據包重複傳送攻擊。 |
· | Confirmation(確認) 這個長度為 1 位元組的域包含一個用來表明客戶端是否在路由器的請求信息中使用了正確的密鑰值,這個確認域設定為0。在路由器通告信息中,此確認域設定為 0 或者密鑰錯誤時為一個非 0 值。 |
雖然在
路由器通告信息和路由器請求信息中也包含了驗證指示符,但是在 採用了 The Advanced Networking Pack for Windows XP 的 Teredo客戶端中並不使用客戶
標識符或者驗證值。當在沒有客戶端標識符或者驗證值的時候,驗證指示符的格式如圖 8 所示。
圖8:沒有客戶端標識符或者驗證值時,驗證指示符的格式
查看大圖。
原始指示符
原始指示符用來表示 Teredo客戶端、 Teredo 中繼或者特定於 Teredo
主機的中繼的 IPv4 地址和 UDP 連線埠。它的用途的一個例子就是,當 Teredo 伺服器回應 Teredo客戶端的路由器請求信息而發出路由器通告信息。在這種情況下,原始指示數據包含了對應於 Teredo客戶端Teredo 通信流的已經映射的 IPv4 地址和 UDP 連線埠號。有關更多信息,請參閱本文"Teredo客戶端初始配置"
如同驗證指示符,原始指示符放在 UDP 標頭與 IPv6 標頭之間。它的結構如圖 9 所示。
圖9:原始指示符的結構
原始指示數據包含以下域:
· | 指示符類型 這個長度為 2 位元組的域說明了指示符的類型。對於原始指示符,其值為 0。 Teredo 客戶端可以根據 IPv6 數據包的前兩個位元組區分出原始指示符,因為 IPv6 數據包的前兩個高位位元組設定為0110 (6), 與 IPv6 標頭的轉換域相對應。 |
· | 隱藏原始連線埠號 這個兩個位元組的與包含一個與 Teredo 客戶端、 Teredo 中繼或者 特定於 Teredo 主機的中繼 Teredo 通信相對應的隱藏外部連線埠(同 0xFFFF 異或)。 模糊原始連線埠的值與 0xFFFF 異或。 |
· | 隱藏原始地址 這個長度為 4 位元組的域包含與 Teredo 客戶端、 Teredo 中繼或者特定於 Teredo 主機的中繼 Teredo 通信相對應的隱藏外部 IPv4 地址 (同 0xFFFFFFFF XORed) 。隱藏原始地址域與 0xFFFFFFFF 異或。 |
圖 10 表示了實現了 The Advanced Networking Pack for Windows XP 的 Teredo客戶端使用的三種包含原始與驗證指示符的不同數據包類型。
圖10:包含驗證與原始指示符的不同數據包類型
查看大圖。
返回頁首
路由
Teredo
圖 11 顯示了 Teredo 數據包在 Teredo
主機, 特定於 Teredo 主機的中繼和 IPv6 主機之間的傳輸。
圖 11:Teredo 路由
查看全圖。
在 IPv6 網上,前綴 ::/32
路由被用於將使用 Teredo 前綴定義的數據包傳送到最近的 Teredo 中繼上。 Teredo 伺服器, Teredo 中繼和 特定於 Teredo主機的中繼有一個前綴::/32路由,此路由包含了所有用該前綴作為在鏈的地址,也包含用作 Teredo 隧道出口的地址。 Teredo 隧道接口是一個
邏輯接口,它將自動將 IPv4 地址與 UDP 的封裝成傳送的數據包。 Teredo 伺服器, Teredo 中繼和 特定於 Teredo
主機的中繼同時還有一個
默認路由(::/0)指向 IPv6 網路。特別地,這個默認路由包含一個在 IPv6 網路上用一個物理接口與 IPv6 網相連的臨近
路由器的下箇中繼段的 IPv6 地址。
客戶端
Advanced Networking Pack for Windows XP 中的 Terodo客戶端有一個
默認路由,它將使用該前綴的所有地址都視作 on-link 地址,也包含用 Teredo 隧道接口的地址。當這個默認地址使用時,下一中繼段的地址被置於 IPv6 數據包中的目標地址中,同時下一中繼段接口被置於 Teredo 隧道接口中。
當 Teredo 隧道接口傳送數據包時,分為下面三種情況:
1. | 目標是位於同一個 IPv4 Internet 絡上的 Teredo 客戶端。 |
2. | 目標是位於另一個站點上的 Teredo 客戶端。 |
3. | 目標是 IPv6 Internet 上的一個節點。 |
On-link Teredo 目標
對於發往相同站點和連結中其它 Teredo 主機的數據包, Teredo 隧道接口通過交換氣泡數據包來代替 Neighbor Discovery 的
地址解析進程。交換氣泡數據包保證了每一個 Teredo客戶端之間能夠直接傳送數據包。想要了解更多信息,請查閱本文 "相同連結上的 Teredo 主機之間的通信初始化" 章節。
Teredo 檢查
多播氣泡數據的快取,決定目標 Teredo 地址是否與同一連線上的 Teredo客戶端通信。每一個 Teredo客戶端都在 IPv4 鏈路上傳送多點傳輸氣泡
數據包給 Teredo 伺服器以顯示它在鏈路上的存在。每個 Teredo客戶端接受到其它 Teredo客戶端的氣泡數據包後,與自己的 Teredo 和 IPv4 地址一起傳送給多播氣泡快取。因此,如果目標 Teredo 地址在多點傳輸氣泡快取中,那么目標就是一個 on-link 鄰居。
站點間的 Teredo 目標
對於發往不同節點上的另一台 Teredo 主機的數據包,如果兩個 Teredo 主機都跨越 受限 NAT,Teredo 隧道接口使用氣泡數據包替代“鄰居發現”(Neighbor Discovery)
地址解析過程。當兩台 Teredo
主機都穿越受限
網路地址轉換時, Teredo 隧道出口用氣泡
數據包的交換代替發現 Neighbor Discovery 協定的地址解析過程。氣泡數據包的交換在雙方的 NAT 上都會生成特定地址和連線埠的映射。這樣,兩個不同點的 Teredo客戶端就可以直接傳送數據包給對方。如果希望進一步了解相關信息,請參閱本文的"在不同站點的 Teredo客戶端中初始化通信"部分。
IPv6 網路目標
對於 IPv6 Internet 的數據包, Teredo 隧道接口用 ICMPv6 Echo Request 和 Echo Reply訊息來代替 Neighbor Discovery 協定的
地址解析進程。當一個 ICMPv6 Echo Request 訊息傳送給目標後,包含有在 IPv6 網上離 IPv6
主機最近的 Teredo 中繼的 IPv4 地址的 ICMP Echo Reply 訊息就回復。想進一步了解,請查看本文的"從 Teredo客戶端到 特定於 Teredo主機的中繼的初始化通信" 和 "從 Teredo客戶端到 IPv6主機的初始化通信"章節。
返回頁首
過程
此部分提供了 Teredo 有關
數據包交換的細節,具體如下:
· | Teredo 客戶端的初始化設定 |
· | 維護 NAT 映射 |
· | 相同連結 Teredo 客戶端之間的初始化通信 |
· | 不同站點 Teredo 客戶端之間的初始化通信 |
· | 從 Teredo 客戶端到 特定於 Teredo 主機的中繼的初始化通信 |
· | 從 特定於 Teredo 主機的中繼到 Teredo 客戶端的初始化通信 |
· | 從 Teredo 客戶端到 IPv6 主機的初始化通信 |
· | 從 IPv6 主機到 Teredo 客戶端的初始化通信 |
所有這些過程都是由 Advanced Networking Pack for Windows XP 中的 Teredo 客戶端支持的;並且是自動、無需用戶干涉的。唯一的例外是:Teredo 伺服器的 IPv4 地址是可選配置。
初始設定
Teredo 客戶端的初始化設定通過傳送一系列
路由請求訊息給 Teredo 伺服器確定一個 Teredo 地址,並了解客戶端是通過一個Cone,受限還是在對稱的 NAT。圖12顯示了 Teredo 客戶端的初始化進程。
圖12: Teredo 客戶端的初始化設定
查看大圖。
Teredo 客戶端的初始化設定包括以下過程:
1. | 路由伺服器請求信息 Router Solicitation (RS) 由 Teredo 客戶端發給首選的 Teredo 伺服器(Teredo 伺服器1)。 Teredo 客戶端從設定過“Cone”標誌的當地連結地址發出 RS。 |
2. | Teredo 伺服器 1 回應一個路由器登記信息 Router Advertisement (RA)。由於 RS 已經設定了“Cone”標記, Teredo 伺服器1會從一個動態的 IPv4 地址傳送出 RA。Teredo 客戶端收到 RA 後會得知那是一個“Cone”的網路地址轉換。 |
3. | 如果沒有收到 RA, Teredo 客戶端就會從當地連結地址傳送另一個沒有設定“Cone”標誌的 RS。 |
4. | Teredo 伺服器 1 回應一個 RA。因為 RA 沒有設定“Cone”標誌,所以伺服器 1 會傳送一個與 RS 目標地址通信的 IPv4 原地址。如果 Teredo 客戶端收到 RA,就得出那是受限的地址轉換。 |
5. | 為了確保 Teredo 客戶端不是一個對稱的網路地址轉換,它就會發出另一個 RA 到 Teredo 伺服器( Teredo 伺服器 2)。 |
6. | Teredo 伺服器 2 回應一個 RA。客戶端對兩個 Teredo 伺服器的 RA 來源指示符中的映射地址和 UDP 連線埠進行比較。如果他們不同,那么NAT就是在映射相同的內部地址和連線埠號到不同的外部地址和連線埠號。 Teredo 客戶端確定這個 NAT 是一個對稱的 NAT,不能用 Teredo 進行通信。 |
由於收到 RA(先前進程的第二步或第四步), Teredo客戶端以如下方式構造地址:
· | 首先 64 位包含收到的 RA 前綴信息。這 64 位由 Teredo 伺服器登記的前置碼,包含 Teredo 前綴(32 bits)和 Teredo 伺服器的 IPv4 的地址碼(32位)。 |
· | 接下來的 16 位是 0x8000 (Cone NAT ) 或是 0x0 (受限 NAT) |
· | 再接下來的 16 位對從 RA 中 Origin (原始)指示符來的外部 UDP 連線埠號進行賦值。 |
· | 最後 32 位放置從 RA 中 Origin 指示符來的外部 IP 地址。 |
實現了 The Advanced Networking Pack for Windows XP 的 Teredo客戶端會自動嘗試通過解析 name Teredo .I來測定 Teredo 伺服器的 IPv4 地址。相應地,你可以用netsh interface IPv6 set Teredo servername=命令來設定 Teredo 伺服器的 IPv4 地址。
維持 NAT 映射
圖13 顯示了 Teredo客戶端是如何維持 Teredo 通信的 NAT 映射的。
圖 13:維持 NAT 映射
查看大圖。
Teredo客戶端會定期地(一般默認每隔 30 秒鐘)傳送單一的氣泡數據包到 Teredo 伺服器。 Teredo 伺服器會在不回復的情況下丟棄該數據包。這個周期性的數據包會重新刷新 NAT 的轉換表。否則,這個映射就無效並被刪除。如果映射不存在,對於Cone NAT 而言,所有接收的數據流;對於受限 NAT 而言,所有從 Teredo 伺服器到 Teredo
主機的數據流會地被 NAT 悄悄刪除。
同一連結上的 Teredo 客戶端之間的通信初始化圖 14 顯示了同一連結上的 Teredo 客戶端之間的通信初始化。
圖 14:同一連結上的 Teredo 客戶端之間的通信初始化
在同一個連結中,要從客戶端A 傳送一個通信初始化數據包到客戶端 B,按照下面的過程:
1. | Teredo 客戶端傳送一個氣泡數據包到 Teredo IPv4 Discovery Address,一個租用的多播地址(其真實地址由 IANA 決定)。在氣泡數據包的 IPv6 頭部,目標地址被置於 Teredo 客戶端 B 的 Teredo 地址中。 |
2. | 根據從收到 Teredo 客戶端 A 的發出多播氣泡數據包的認證信息, Teredo 客戶端 B 指定 Teredo 客戶端 A 和 UDP 連線埠 on-link 的 IPv4 地址用於 Teredo 通信,並且用於傳送一個多播的氣泡數據包給 Teredo 客戶端A作為回應。根據從收到 Teredo 客戶端 B 的發出多播氣泡數據包的認證信息, Teredo 客戶端 A 指定 Teredo 客戶端 B 和 UDP 連線埠 on-link 的 IPv4 地址用於 Teredo 通信。 |
3. | Teredo 客戶端 A 傳送一個通信初始化數據包給 Teredo 客戶端 B。 |
站點通信初始化
不同站點下 Teredo 客戶端之間的通信初始化取決於節點之間是用Cone NAT 還是受限NAT。
Cone NAT
圖15 表明當節點都位於Cone NAT 之後時, Teredo 客戶端之間的通信初始化。
圖15:節點都位於 Cone NAT 之後時, Teredo 客戶端之間的通信初始化。
查看大圖。
當 Teredo客戶端都在 Cone NAT 之後時,Cone NAT 允許其轉換表條目開放任何源 IP 地址和 UDP 連線埠讓 Teredo客戶端進行 Teredo 通信。因此, Teredo客戶端A 可以在無需運用氣泡數據包建立額外的 NAT 轉換表條目的情況下向 Teredo客戶端B 直接傳送數據。
受限 NAT
圖16 表明了當不同站點使用受限 NAT 時, Teredo 客戶端之間的通信初始化。
圖16:不同站點使用受限 NAT 時, Teredo 客戶端之間的通信初始化
查看大圖。
從 Teredo客戶端A 傳送通信初始化數據包到 Teredo客戶端B,過程如下:
1. | Teredo 客戶端 A 直接傳送氣泡數據包給 Teredo 客戶端 B。因為 Teredo 客戶端 B 是位於受限 NAT 之後,從任意的 IPv4 源地址和 UDP 連線埠號來的 Teredo 通信是不允許的,除非那是一個特定源的 NAT 轉換表條目。假如沒有,受限 NAT 丟棄此數據包。但是,當受限 NAT 為 Teredo 客戶端 A 傳送氣泡數據包時,它會建立一個特定源的 NAT 的轉換表,使得接下來的 Teredo 客戶端 B 的數據包被傳送至 Teredo 客戶端 A。 |
2. | Teredo 客戶端 A 通過 Teredo 伺服器 2( Teredo 客戶端B的 Teredo 伺服器)傳送數據包給 Teredo 客戶端 B。在氣泡數據包中的 IPv4 目標地址設定指向 Teredo 伺服器 2 的 IPv4 地址,該地址由客戶端 A 從客戶端 B 的 Teredo 地址的第 3 和第 4 塊識別。 |
3. | Teredo 伺服器處理這個數據包,為 Teredo 客戶端指定 IPv6 目標地址,然後將氣泡數據包轉發到 Teredo 客戶端 B。受限 NAT 為 Teredo 客戶端 B 傳送數據包,是因為存在一個特定源為從 Teredo 伺服器 2 進行 Teredo 通信進行映射。 |
4. | Teredo 客戶端 B 用自己直接向 Teredo 客戶端 A 傳送的數據包,對從 Teredo 客戶端 A 收到的數據包進行回應。因為 Teredo 客戶端 A 的受限 NAT 有一個特定源的映射,為從 Teredo 客戶端 B 來的 Teredo 通信服務的(就象過程1那樣,通過從 Teredo 客戶端 A 傳送初始數據包來建立),這個數據包被傳送到 Teredo 客戶端 A。 |
5. | 根據來自 Teredo 客戶端 B 的氣泡數據包的認證信息, Teredo 客戶端 A了解到特定於源特 NAT 映射存在於兩個用戶的 NAT 上。 Teredo 客戶端 A 直接傳送一個初始數據包到 Teredo 客戶端 B。 |
Teredo 客戶端到 特定於 Teredo
主機的中繼的通信初始化從 Teredo客戶端傳送初始數據包到一個 特定於 Teredo主機的中繼,依賴於 Teredo 客戶端是一個Cone NAT 還是一個受限NAT。
Cone NAT
圖17表明當 Teredo 客戶端在 Cone NAT 之後從 Teredo 客戶端到主機特定中繼的通信初始化。
圖17: Teredo 客戶端在 Cone NAT 之後從 Teredo 客戶端至主機特定中繼的通信初始化
查看大圖
從 Teredo客戶端傳送通信初始化數據包到特定於 Teredo 主機的中繼,進程如下:
1. | Teredo 客戶端 A 傳送一個經過其 Teredo 伺服器的 ICMPv6 Echo Request 訊息 |
2. | Teredo 伺服器接收到ICMPv6的ICMPv6 Echo Request 訊息,然後在 IPv6 網路上傳送到 特定於 Teredo 主機的中繼或者在 IPv4 Internet 上把它封裝在隧道里。 |
3. | 特定於 Teredo 主機的中繼用一個被送到 Teredo 客戶端 A 的 Teredo 地址進行ICMPv6 Echo Reply回響。 |
4. | 在特定於 Teredo 主機的中繼收到的回送答覆後,Teredo 客戶端就會傳送一個通信初始化的數據包到 特定於 Teredo 主機的中繼的 ICMPv4 地址和 UDP 連線埠上。 |
所有後續的往來於 Teredo 客戶端和特定於 Teredo
主機中繼的數據包將直接傳送。
受限 NAT
圖18 顯示了當 Teredo客戶端位於受限 NAT 之後,從 Teredo客戶端傳送通信初始化數據到特定於 Teredo 主機的中繼的過程。
圖18: Teredo 客戶端位於受限 NAT 之後,從 Teredo 客戶端傳送通信初始化數據到 特定於 Teredo 主機的中繼
查看全圖。
從 Teredo 客戶端傳送通信初始化數據到特定於 Teredo 主機的中繼,進程如下:
1. | Teredo 客戶端通過自己的 Teredo 伺服器傳送一個 ICMPv6 Echo Request 訊息到特定於 Teredo 主機的中繼。 |
2. | Teredo 伺服器收到 ICMPv6 Echo Request 訊息後,在 IPv6 網上傳送給 特定於 Teredo 主機的中繼或者封裝到 IPv4 Internet 絡的隧道上。 |
3. | 特定於 Teredo 主機的中繼確定 Teredo 客戶端位於受限 NAT之後 。如果 Teredo 中繼傳送 ICMPv6 Echo Request 訊息給 Teredo 客戶端,則 NAT 丟棄此訊息,因為沒有從 特定於 Teredo 主機的中繼來的 Teredo 通信的源特定的映射。因此, 特定於 Teredo 主機的中繼經由 Teredo 伺服器在 IPv4 Internet 絡上傳送一個氣泡數據包到 Teredo 客戶端。 |
4. | Teredo 伺服器從特定於 Teredo 主機的中繼的氣泡數據包。 Teredo 伺服器傳送氣泡數據包到 Teredo 客戶端,同時,Origin 指示符包含了這個特定於 Teredo 主機的中繼的 IPv4 地址和 UDP 連線埠號。因為一個從 Teredo 伺服器的 Teredo 通信的映射存在於 NAT,一個氣泡數據包被傳送到 Teredo 客戶端。 |
5. | Teredo 客戶端確定從收到氣泡數據包的來源指示符上確定特定於 Teredo 主機的中繼的 IPv4 地址和 UDP 連線埠。要建立一個從 特定於 Teredo 主機的中繼的 Teredo 的通信的映射, Teredo 客戶端還要傳送一個氣泡數據包到 特定於 Teredo 主機的中繼。 |
6. | 根據來自 Teredo 客戶端的氣泡數據包的收條——與一個進入佇列等待轉發(ICMPv6 Echo Reply 訊息)的數據包對應,特定於 Teredo 主機的中繼確定一個特定於來源的 NAT 映射存在於 Teredo 客戶端的受限 NAT 之中。特定於 Teredo 主機的中繼將 ICMPv6 Echo Reply 訊息傳送到 Teredo 客戶端。 |
7. | 一個通信初始化的數據包從 Teredo 客戶端傳送到特定於 Teredo 主機的中繼的 IPv4 地址和 UDP 連線埠上。 |
所有 Teredo客戶端與 特定於 Teredo
主機的中繼並發的數據包都直接被傳送。
特定於 Teredo主機的中繼到 Teredo 客戶端的通信初始化特定於 Teredo主機的中繼到 Teredo 客戶端的通信初始化依賴於 Teredo 客戶端是Cone NAT 之後的還是受限 NAT。
Cone NAT
圖19顯示了當 Teredo客戶端位於Cone NAT 之後時,特定於 Teredo 主機的中繼到 Teredo客戶端的通信初始化。
圖19:Teredo 客戶端位於Cone NAT 之後時,特定於 Teredo 主機的中繼到 Teredo 客戶端的通信初始化
查看大圖。
要從 特定於 Teredo
主機的中繼傳送到 Teredo客戶端的一個通信初始化
數據包, 特定於 Teredo主機的中繼要確定 Teredo 客戶端是一個Cone NAT 。因此, 特定於 Teredo主機的中繼直接傳送初始化數據包到 Teredo 客戶端。
要確定初始化數據包的 IPv6 地址真實,並且符合特定於 Teredo主機的中繼, Teredo客戶端用本文的有關" 特定於 Teredo 主機的中繼到 Teredo 客戶端的通信初始化"(Cone NAT 之後的)的 1 至 3 步與 特定於 Teredo 主機的中繼執行一次 ICMPv6 Echo Request/Echo Reply 的訊息交換。當此訊息交換完成, Teredo客戶端向特定於 Teredo
主機的中繼傳送對通信初始化
數據包進行回響的訊息。
受限NAT
圖20 顯示了當 Teredo 客戶端位於受限 NAT 之後時 特定於 Teredo 主機的中繼到 Teredo 客戶端的通信初始化。
圖20: Teredo 客戶端位於受限 NAT 之後時,特定於 Teredo 主機的中繼到 Teredo 客戶端的通信初始化。
查看大圖。
從特定於 Teredo 主機的中繼傳送通信初始化數據包到 Teredo 客戶端,過程如下:
1. | 特定於 Teredo 主機的中繼通過 IPv4 Internet 絡經由 Teredo 伺服器傳送一個氣泡數據包到 Teredo 客戶端。 |
2. | Teredo 伺服器接收到來自 特定於 Teredo 主機的中繼的氣泡數據包。 Teredo 伺服器把這個數據包傳送給 Teredo 客戶端,同時,來源指示符包含了 特定於 Teredo 主機的中繼的 IPv4 地址和 UDP 連線埠號。因為一個從 Teredo 伺服器來的 Teredo 通信的特定源映射存在於 NAT,氣泡數據保被傳送給 Teredo 客戶端。 |
3. | Teredo 客戶端通過收到的氣泡數據中的來源指示符來確定特定於 Teredo 主機的中繼的 IPv4 地址和 UDP 連線埠號。為了建立一個從 Teredo 中繼的 Teredo 通信的映像, Teredo 客戶端傳送一個氣泡數據包給特定於 Teredo 主機的中繼。 |
4. | 根據氣泡數據包的收條——與一個進入佇列等待轉發的數據包(該數據包來自於特定於 Teredo 主機的中繼)對應,特定於 Teredo 主機的中繼傳送通信初始化數據包給 Teredo 客戶端。 |
為確保初始化通信數據包的 IPv6 地址真實,並且指向 特定於 Teredo
主機的中繼, Teredo 客戶端按照" Teredo 客戶端到 特定於 Teredo主機的中繼的通信初始化"(針對受限NAT)的步驟1至6,與 特定於 Teredo主機的中繼執行一個 ICMPv6 Echo Request/Echo Reply的訊息交換。當訊息交換執行完畢, Teredo客戶端對傳送到 Teredo 特定主機伺服器的通信初始化數據包進行回響。
主機初始化
Teredo 客戶端到 IPv6 主機的訊息初始化依賴於 Teredo 客戶端是Cone NAT 的,還是受限NAT。
Cone NAT
圖12 顯示了當 Teredo 客戶端位於Cone NAT 之後時, Teredo 客戶端與 IPv6 主機的通信初始化過程。
圖12: Teredo 客戶端位於Cone NAT 之後時, Teredo 客戶端與 IPv6 主機的通信初始化過程
查看大圖。
Teredo 客戶端傳送初始化通信
數據包到 IPv6
主機,過程如下:
1. | 要傳送一個通信初始化數據包, Teredo 客戶端必須首先驗證離 IPv6 主機接近 Teredo 中繼的 IPv4 地址和 UDP 連線埠號。 Teredo 客戶端A經由它自己的 Teredo 伺服器傳送一個 ICMPv6 Echo Request 訊息。 |
2. | Teredo 伺服器收到 ICMPv6 Echo Request 訊息後,在 IPv6 網上把它傳送給 IPv6 主機。 |
3. | IPv6 主機傳送給 Teredo 客戶端的一個 Teredo 地址予以回響。根據 IPv6 的網路路由結構,這個含有 Teredo 地址的數據包被傳送給最近的 Teredo 中繼。 |
4. | Teredo 中繼將 ICMPv6 Echo Reply 壓縮,並直接傳送給 Teredo 客戶端。因為這是Cone NAT 之後的,所以來自 Teredo 中繼的數據包被傳送到 Teredo 客戶端。 |
5. | Teredo 客戶端從ICMPv6 Echo Reply訊息的 IPv4 源地址和UDP連線埠號確認 Teredo 中繼的 IPv4 地址最接近 IPv6 主機。一個通信初始化數據包就被傳送至 Teredo 中繼的 IPv4 地址和UDP連線埠上。 |
6. | Teredo 中繼去除 IPv4 和 UDP 的標頭,並把此數據包發給 IPv6 主機。 |
所有接下來的往返於 Teredo 客戶端和 IPv6 主機的數據包採用經由 Teredo 中繼的路徑。
受限 NAT
圖22 顯示了當 Teredo 客戶端位於受限 NAT 之後時,Teredo 客戶端到 IPv6
主機通信的初始化。
圖22 顯示了當 Teredo 客戶端位於受限 NAT 之後時, Teredo 客戶端到 IPv6 主機通信的初始化。
查看大圖。
IPv6主機傳送初始化數據包至 Teredo 客戶端,過程如下:
1. | 要傳送初始化數據包至 IPv6 主機, Teredo 客戶端必須首先驗證 Teredo 中繼的 IPv4 地址是否距離 IPv6 主機最近。 Teredo 客戶端 A 通過它自己的 Teredo 伺服器傳送一個 ICMPv6 Echo Request 訊息給 IPv6 主機。 |
2. | Teredo 伺服器收到 ICMPv6 Echo Request 訊息,並且在 IPv6 網路上傳送給 IPv6 主機。 |
3. | IPv6 主機回響一個傳送至 Teredo 客戶端 A 的 Teredo 地址的 ICMPv6 Echo Reply 訊息。根據 IPv6 網路的路由結構,這個以 Teredo 地址打包的數據包被傳送至最近的 Teredo 中繼。 |
4. | Teredo 中繼驗證 Teredo 客戶端位於受限 NAT 之後。如果 Teredo 中繼本應傳送 ICMPv6 Echo Request 訊息至 Teredo 客戶端而沒發,NAT將會丟棄它。這是因為不存在一個起始於 Teredo 中繼的 Teredo 通道的映射。因此, Teredo 中繼在 IPv4 Internet 絡上通過 Teredo 伺服器傳送一個氣泡數據包至 Teredo 客戶端。 |
5. | Teredo 伺服器收到來自 Teredo 中繼的氣泡數據包。 Teredo 伺服器傳送氣泡數據包之 Teredo 客戶端,同時來源指示符獲得 Teredo 中繼的 IPv4 地址和 UDP 連線埠號。因為一個起始於 Teredo 伺服器的 Teredo 通道的特定源映射存在於 NAT,氣泡數據包就被傳送至 Teredo 客戶端。 |
6. | Teredo 客戶端從收到的氣泡數據包的來源指示驗證 Teredo 中繼的 IPv4 地址是不是距離 IPv6 主機最近。為了建立一個起始於 Teredo 中繼的 Teredo 通道的特定於來源的映射, Teredo 客戶端傳送一個氣泡數據包至 Teredo 中繼。 |
7. | 根據氣泡數據包已符合等待傳送的接收回執(ICMPv6 Echo Reply訊息), Teredo 中繼確認 Teredo 客戶端的受限 NAT 存在一個特定源的映射。 Teredo 中繼傳送 ICMPv6 Echo Reply 訊息至 Teredo 客戶端。 |
8. | 從 Teredo 客戶端傳送一個通信初始化數據包至 Teredo 中繼的 IPv4 地址和UDP連線埠。 |
9. | Teredo 中繼移除 IPv4 標頭並傳送此數據包至 IPv6 主機。 |
所有接下來的往返於 Teredo 客戶端和 IPv6
主機之間的
數據包都採用經由 Teredo 中繼的路徑。
初始化
IPv6 主機到 Teredo 客戶端的通信初始化依賴於 Teredo 客戶端是基於Cone NAT 的,還是受限NAT的。
Cone NAT
圖23顯示了當客戶端位於Cone NAT 之後時, IPv6 主機到 Teredo 客戶端的通信初始化。
圖23:客戶端位於 Cone NAT 之後時,IPv6 主機到 Teredo 客戶端的通信初始化
查看大圖。
從 IPv6 主機傳送初始化數據包至 Teredo 客戶端,過程如下:
1. | IPv6 主機傳送一個數據包至 Teredo 客戶端。根據 IPv6 網路的總體結構,以 Teredo 地址打包的數據包被發到最近的 Teredo 中繼。 |
2. | Teredo 中繼驗證 Teredo 客戶端是位於受限 NAT 之後。因此, Teredo 中繼就將數據包與 IPv4 和 UDP 的標誌壓縮在一起,從 IPv6 主機傳送到 Teredo 客戶端。 |
根據這個數據包的接收回執,Teredo客戶端,儲存對應於 Teredo 中繼的 IPv4 地址和 UDP
連線埠號,這樣,回響數據包才能被傳送給 Teredo 中繼。 Teredo 中繼接收到它們,除去 IPv4 和 UDP 標誌後,傳送該 IPv6 數據包到 IPv6 主機。
為確保這個通信初始化數據包的 IPv6 地址真實有效,並且對應 IPv6 主機, Teredo客戶端按照本文關於" Teredo 客戶端到 IPv6 主機通信初始化"(針對Cone NAT )的1-4步驟,與 IPv6 主機執行一次ICMPv6 Echo Request/Echo Reply訊息交換。當訊息交換執行完成後, Teredo客戶端送到 IPv6 主機的通信初始化數據包進行回響。
受限 NAT
圖24 表明當 Teredo 客戶端位於受限 NAT之後, IPv6 主機到 Teredo 客戶端的通信初始化。
圖24: Teredo 客戶端位於受限NAT之後時, IPv6 主機到 Teredo 客戶端的通信初始化
查看大圖。
從 IPv6
主機傳送通信初始化
數據包至 Teredo 客戶端,進程如下:
1. | IPv6 主機傳送一個數據包到Teredo 客戶端。根據 IPv6 網路的結構,以 Teredo 地址打包的數據包被發至最近的 Teredo 中繼。 |
2. | Teredo 中繼驗證 Teredo 客戶端位於受限 NAT之後。如果 Teredo 中繼本應傳送這個數據包至 Teredo 客戶端而沒有發,NAT將會丟棄這個數據包,因為不存在一個起始於 Teredo 中繼的 Teredo 通道的特定於來源的映射。因此, Teredo 中繼在 IPv4 Internet 上,將氣泡數據包通過 Teredo 伺服器傳送到 Teredo 客戶端。 |
3. | Teredo 伺服器收到來自 Teredo 中繼的氣泡數據包。 Teredo 伺服器將帶有來源指示的氣泡數據包傳送至 Teredo 客戶端,這個來源指示包含有 Teredo 中繼的 IPv4 地址和UDP連線埠號。因為一個起始於 Teredo 伺服器的 Teredo 通道的特定於來源的映射已存在於 NAT 中,這個氣泡數據包被傳送至 Teredo 客戶端。 |
4. | Teredo 客戶端從接收的氣泡數據包的來源指示驗證 Teredo 中繼的 IPv4 地址是不是最離 IPv6 主機接近。 |
5. | 根據收到氣泡數據包已等待傳送的回執(此數據包來自 IPv6 主機), Teredo 中繼確認在客戶端的受限NAT中建立了一個特定於來源的通道映射。 Teredo 中繼向 Teredo 客戶端傳送數據包。 |
為根據收到氣泡數據包已等待傳送的回執(此數據包來自 IPv6
主機), Teredo 中繼確認在客戶端的受限 NAT 中建立了一個特定於來源的通道映射。 Teredo 中繼傳送數據包給 Teredo客戶端。
總結
> Teredo 是一種地址分配和
主機間自動
隧道技術,當 IPv6 / IPv4 主機均位於一個或多個 IPv4 NAT 之後時,它可以幫助用戶建立IPv6 單播連線。IPv6
數據包以基於 IPv4 的 UDP 訊息傳送。 Teredo 通信依託於 Teredo 伺服器和 Teredo 中繼。一個 特定於 Teredo主機的中繼相當於一個沒有使用 Teredo 地址的 IPv6 或是 IPv4 ,但是能夠在通信路徑上不使用 Teredo 中繼的情況下與 Teredo 用戶進行通信。本文對獲得 Teredo 地址,維持 NAT 映射以及在兩個 Teredo客戶端、兩個特定於 Teredo
主機的中繼、和兩個 IPv6 主機之間進行通信的初始化流程都做了詳盡的說明。不管是基於Cone NAT 還是受限NAT,任何初始化通信過程都基於 Teredo 客戶端。
注意要點
本文假設讀者掌握 IPv6 和 IPv6 過渡技術。有關 IPv6 的更多信息,請訪問IPv6 簡介。有關 IPv6 過渡技術的更多信息,請訪問IPv6 / IPv4 的共存與遷移。
鳴謝
Christian Huitema,
架構設計師, Microsoft 公司
Stewart Tansley, 項目經理, Microsoft 公司
Dave Thaler, 軟體開發主管, Microsoft 公司