最新消息:

Teredo 原理概述

NET 大步 1185浏览 0评论


http://www.ipv6bbs.cn/thread-144-1-1.html
摘要

了解 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 Win
dows 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 主机的中继的

转载请注明:大步's Blog » Teredo 原理概述

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
SiteMap