Teredo 原理概述
http://www.ipv6bbs.cn/thread-144-1-1.html
(出處: IPv6BBS,滿天星發表于 2010-9-14 22:40:00)
摘要
了解 Teredo (又成為面向 IPv6 的 IPv4 NAT穿越,是一項 IPv6 / IPv4 過渡技術,在 IPv6 / IPv4 主機位于一個或多個 IPv4 NAT 之后時,用來為單播 IPv6 連接提供地址分配和主機間自動隧道。為了能夠通過 IPv4 NAT, IPv6 數據包作為基于 IPv4 的用戶數據包協議(UDP) 消息發送出去。本文向讀者提供了有關 Teredo 的概述(包括 Teredo 地址以及數據包結構),并且詳細解釋了 Teredo 客戶端的發起通信的方式、特定于 Teredo 主機的中繼、僅支持 IPv6 主機使用 IPv4 Internet 的方法、 IPv6 Internet、 Teredo 服務器以及 Teredo 中繼。
鳴謝
Christian Huitema, 架構設計師, Microsoft 公司
Stewart Tansley, 項目經理, Microsoft 公司
Mohit Talwar, 軟件開發工程師, Microsoft 公司
Dave Thaler, 軟件開發主管, Microsoft 公司
本頁內容
簡介
網絡地址轉換 (NAT)概述
Teredo 構成
Teredo 地址
Teredo 數據包格式
Teredo 路由
Teredo 過程
總結
簡介
在開始有關 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 將會使用得越來越少,直到最后完全被放棄。
網絡地址轉換 (NAT)概述
網絡地址轉換 (NAT) 是指符合 RFC 1631 標準的 IPv4 路由器,它能夠在發送前解析數據包 IP 地址以及 TCP/UDP 端口號。例如,設想一個由多臺計算機組成的,連接到 Internet 的小型商務網。通常需要為每臺連接到 Internet 的電腦從 Internet 服務提供商 (ISP) 處得到一個 IP 地址。但是通過 NAT,這個小型的商務網就可以使用私有地址 (如 RFC 1918 所述) ,然后通過 NAT 將專用地址映射到單個或者多個 IP 公用地址。
NAT 是針對以下各項要求的常見解決方案:
?? ? ? ? 你想利用一條連接訪問 Internet,而不是將多臺電腦連接到 Internet 上。
?? ? ? ? 你想使用私有地址。
?? ? ? ? 你想在不部署代理服務器的情況下使用 Internet 資源。
網絡地址轉換的工作原理
當一臺小型商務企業的內部網計算機用戶連接到 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 端口號。
例如,一個小型辦公網絡使用 192.168.0.0/24 作為企業內部網絡私有 ID 并且其 Internet 網絡服務提供商分配的單一公用IP地址為131.107.0.1。當此小型內部網中一臺內部私有地址為 192.168.0.99 的客戶訪問 IP 地址為 157.60.0.1的網站服務器時,此用戶機的 TCP/IP 協議產生一個包含以下在 IP 和 TCP 或者 UDP 標頭中的數值的 IP 數據包:
?? ? ? ? 目標IP地址:157.60.0.1
?? ? ? ? 源IP地址:192.168.0.99
?? ? ? ? 目標端口:80
?? ? ? ? 源端口:1025
請求源主機將此 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.50.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 構成
Teredo 結構由以下各部分組成(如圖 2 所示):
?? ? ? ? Teredo 客戶端
?? ? ? ? Teredo 服務器
?? ? ? ? Teredo 中繼
?? ? ? ? 特定于 Teredo 主機的中繼
圖2:Teredo 結構圖
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 服務器
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 中繼
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 主機的中繼
配置了全球地址的 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 地址
Teredo 地址格式見圖 3。
圖3:Teredo 地址格式
Teredo 地址包含以下內容:
?? ? ? ? Teredo 前綴
最前面的 32 位是 Teredo 前綴,所有的 Teredo 地址的前綴都是相同的。互聯網號碼分配機構(IANA)還沒有對該前綴進行定義,盡管該前綴 3FFE:831F::/32 已經運用于初始配置。
?? ? ? ? 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 指示符
Teredo 數據包格式
Teredo 數據包格式如圖5所示。
圖5: Teredo 數據包格式
Teredo 數據包由以下部分構成:
?? ? ? ? IPv4 標頭包含與自動隧道終端相對應的源 IPv4 地址和目標 IPv4 地址并且可以被NAT轉換。
?? ? ? ? UDP 標頭包含 Teredo 數據通信的源端口和目標端口,可以被 NAT 解析。
?? ? ? ? IPv6 標頭包含源 IPv6 地址和目標 IPv6 地址,其中至少有一個是 Teredo 地址。
?? ? ? ? IPv6 載荷包含零個或者更多的 IPv6 擴展標頭以及壓縮的 IPv6 數據包的上層協議數據單位(PDU)。
Teredo 氣泡數據包
Teredo 氣泡數據包為建立或維持一個 NAT 映射而發送,由 IPv6 標頭組成,并且不包含 IPv6 有效載荷。
圖6為 Teredo 氣泡數據包。
圖6: Teredo 氣泡數據包
在 IPv6 標頭中,下一個標頭的域設置為 59,表示沒有有效載荷。
Teredo 指示符
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 客戶端使用的三種包含原始與驗證指示符的不同數據包類型。
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 地址。
Teredo 客戶端路由
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 有關數據包交換的細節,具體如下:
?? ? ? ? Teredo 客戶端的初始化設置
?? ? ? ? 維護 NAT 映射
?? ? ? ? 相同鏈接 Teredo 客戶端之間的初始化通信
?? ? ? ? 不同站點 Teredo 客戶端之間的初始化通信
?? ? ? ? 從 Teredo 客戶端到 特定于 Teredo 主機的中繼的初始化通信
?? ? ? ? 從 特定于 Teredo 主機的中繼到 Teredo 客戶端的初始化通信
?? ? ? ? 從 Teredo 客戶端到 IPv6 主機的初始化通信
?? ? ? ? 從 IPv6 主機到 Teredo 客戶端的初始化通信
所有這些過程都是由 Advanced Networking Pack for Windows XP 中的 Teredo 客戶端支持的;并且是自動、無需用戶干涉的。唯一的例外是:Teredo 服務器的 IPv4 地址是可選配置。
Teredo 客戶端的初始化設置
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 .IPv6.Microsoft.com 來測定 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 客戶端之間的通信初始化
不同站點下 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 主機的中繼確定一個特定于來源的 NAT 映射現在存在于 Teredo 客戶端的受限 NAT 之中。特定于 Teredo 主機的中繼發送通信初始化數據包給 Teredo 客戶端。
為確保初始化通信數據包的 IPv6 地址真實,并且指向 特定于 Teredo 主機的中繼, Teredo 客戶端按照" Teredo 客戶端到 特定于 Teredo 主機的中繼的通信初始化"(針對受限NAT)的步驟1至6,與 特定于 Teredo 主機的中繼執行一個 ICMPv6 Echo Request/Echo Reply的消息交換。當消息交換執行完畢, Teredo 客戶端對發送到 Teredo 特定主機服務器的通信初始化數據包進行響應。
Teredo 客戶端到 IPv6 主機的消息初始化
Teredo 客戶端到 IPv6 主機的消息初始化依賴于 Teredo 客戶端是Cone NAT 的,還是受限NAT。
Cone NAT
圖21 顯示了當 Teredo 客戶端位于Cone NAT 之后時, Teredo 客戶端與 IPv6 主機的通信初始化過程。
圖21: 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 客戶端的通信初始化。
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 客戶端。