複製鏈接
請複製以下鏈接發送給好友

teredo

鎖定
Teredo (又稱為面向 IPv6 的 IPv4 NAT 網絡地址轉換穿越),是一項 IPv6 / IPv4 過渡技術,在 IPv6 / IPv4 主機位於一個或多個 IPv4 NAT 之後時,用來為單播 IPv6 連接提供地址分配和主機間自動隧道。為能夠通過 IPv4 NAT, IPv6 數據包作為基於 IPv4 的用户數據包協議(UDP) 消息發送出去。詳細解釋了 Teredo 客户端的發起通信的方式、特定於 Teredo 主機的中繼、僅支持 IPv6 主機使用 IPv4 Internet 的方法、 IPv6 Internet、 Teredo 服務器以及 Teredo 中繼。
中文名
teredo
相    關
ipv6協議
技    術
6to4
用    途
轉換協議

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 將會使用得越來越少,直到最後完全被放棄。
Advanced Networking Pack for Windows XP 中的 IPv6 實現根據題為
"Teredo:通過 NAT 建立 IPv6 的UDP 隧道 "Internet 草案來實現的。
要在 Windows Sockets應用程序中使用 Teredo 功能,請參閲Microsoft 開發者網絡中的"使用 IPv6 _保護_等級"主題。

teredo轉換介紹

網絡地址轉換(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結構構成

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 地址的前綴都是相同的。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 指示符

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客户端使用的三種包含原始與驗證指示符的不同數據包類型。
圖10:包含驗證與原始指示符的不同數據包類型
查看大圖。
返回頁首

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 地址。
客户端
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 地址,並瞭解客户端是通過一個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總結

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 客户端。

teredo注意要點

本文假設讀者掌握 IPv6 和 IPv6 過渡技術。有關 IPv6 的更多信息,請訪問IPv6 簡介。有關 IPv6 過渡技術的更多信息,請訪問IPv6 / IPv4 的共存與遷移。

teredo鳴謝

Christian Huitema,架構設計師, Microsoft 公司
Stewart Tansley, 項目經理, Microsoft 公司
Mohit Talwar,軟件開發工程師, Microsoft 公司
Dave Thaler, 軟件開發主管, Microsoft 公司