自从1988年问世以来,TCP在研究者的努力下先后得到了许多新的发展,目前主要的模型包括四个,即TCP TAHOE,TCP RENO,TCP NEWRENO和TCP SACK。TCP TAHOE模型是最早的TCP协议之一,它由Jacobson提出。Jacobson观察到,TCP报文段(TCP Segment)丢失有两种原因,其一是报文段损坏,其二是网络阻塞,而当时的网络主要是有线网络,不易出现报文段损坏的情况,网络阻塞为报文段丢失的主要原因。针对这种情况,TCP TAHOE对原有协议进行了性能优化,其特点是,在正常情况下,通过重传计时器是否超时和是否收到重复确认信息(dupack)这两种丢包监测机制来判断是否发生丢包,以启动拥塞控制策略;在拥塞控制的情况下,采用慢速启动(Slow Start)算法和快速重传(Fast Retransmit)算法来控制传输速率。
在试验中,我们以TCP TAHOE模型为例,对TCP的拥塞控制原理进行分析,包括两种丢包监测机制和拥塞控制中的慢速启动算法和快速重传算法。
1. TCP拥塞控制相关技术简介
1.1 慢速启动算法
在TCP TAHOE模型中,拥塞控制主要是通过调整发送端的发送速率,而这又主要是通过三个变量实现的:拥塞窗口(Congestion Window),接收端窗口(Receivers’s Window),慢速启动阈值(Slow Start Threshold,SSTHRESH)。发送端一旦监测到数据包丢失(其原因可能是重传计时器超时,亦可能是收到重复的ACK信令),它就会开始调整发送速率。这包括,ssthresh调整为当前拥塞窗口的一半,同时拥塞窗口将降低到1个报文段。然后,随着通信过程的恢复,拥塞窗口持续增长。在拥塞窗口大小未达到ssthresh之前,它以指数速度增长;到达之后则开始线性增长。有趣的是,虽然这种算法称为慢速启动算法,但实际上一点儿也不慢,它是指数增长的。
1.2 快速重传算法
当发送端连续收到3个对应于同一个序列号的ACK信令时,就触发了其快速重传算法,即发送端不等重传计时器超时,立即向接收端发送指定的报文段。
1.3 丢包检测机制有如下两种
(1). 重复ACK信令
重复ACK有两个作用,其一,发送端可以确信该ACK序列号之前的TCP报文段都已经被接收端成功接收;其二,发送端可以据此判断出接收端接收到的TCP报文段发生了乱序的情况和接收端当前期待的TCP报文段序列号,从而触发其拥塞控制策略。
(2). 超时重传
发送端发出报文段后,在规定的时间内没有能够收到接收端返回的ACK信令,从而使得发送端认为该报文段丢失,触发其拥塞控制策略。在这里面主要涉及到重传计时器(retransmission timer),它是TCP协议中最重要的计时器。根据《Computer Networks, Fourth Edition》,当报文段发出后,重传计时器立即启动,如果发送端在计时器超时之前得到ACK,则计时器停止;如果计时器超时后仍然没有收到ACK,那么报文段就重传,并且计时器重新启动。计算超时的主要公式有:
Timeout = RTT + 4×D
D = α D + (1-α) | RTT - M |
RTT = α RTT + (1-α) M
其中M 、RTT、D均为可变值,M是当次的RTT值。
2. 试验网络拓扑图与参数
该试验基于NS-2网络模拟器,并在我们之前搭建好的无线环境中进行,试验目的是分析TCP拥塞控制原理。
图1是试验网络拓扑图。由于网络层协议是移动IPv6,因此有名称为通信节点(Corresponding Node,CN)、家乡代理(Home Agent,HA)、接入路由器(Access Router,AR)、移动节点(Mobile Node,MN)的网络实体,其中CN为数据发送端,MN为数据接收端,AR是接入路由器,HA则对于我们这次的试验没有影响,因此不予介绍。NodeX为普通网络节点。网络链路的典型参数,即带宽和延迟,标于每条链路之上。
一般情况下,由于Internet上传送的数据量大,相应的延迟比较大,因此Internet的延迟设为了50ms;无线网络的带宽比较小,因此我们设为了1M。整个试验过程持续80秒。CN为FTP型的数据源,TCP报文段大小为256bytes,拥塞控制窗口(Congestion Window)为32。CN从第6秒开始向MN1发送TCP报文段,一直到整个试验结束。该TCP协议采用NS-2中的Tahoe模型。两个接入路由器(Access Router,AR)分别接入两个局域网,它们的位置分别为(85.0,135.0),(155.0,135.0),相隔70米,AR的有效覆盖范围是以AR自身为中心,半径40米的圆,又因为PAR和NAR在纵坐标相同,因此在他们两者的中心连线上,有10米重复的覆盖范围。
MN从第5秒开始接收CN发送过来的FTP数据,经过5秒钟的稳定时间后,于第10秒以1m/s的恒定速度由位置(85.0,135.1)走到(155.0,135.1)处,相当于沿着PAR与NAR的中心连线,由PAR走向NAR处。试验进行到第80秒的时候,MN刚好走到目的地。
对于网络节点而言,没有配置好网络层就不能够正常的进行传输层通信。在该试验中,MN在移动过程中会发生切换,其间由于MN需要进行网络层的配置将不能够进行正常的传输层通信,因此CN会监测到报文段丢失的情况,并且会启动其拥塞控制策略,这就是我们观察的重点。
3. 试验与分析
我们的测试分为两部分。第一部分试验以重复ACK信令作为TCP拥塞控制策略的触发事件,第二部分试验以超时重传作为TCP拥塞控制策略的触发事件。每部分都做10次模拟试验以求试验数据的客观性。
当试验结束后,我们用XGRAPH制图,有两种类型。第一种为TCP序列号图,它们基于通信节点(发送报文段的节点)和移动节点(接收报文段的节点)的发送和接收缓存中的TCP序列号制成,能反映TCP报文段的传输情况,这类图的横坐标为时间,纵坐标为TCP序列号。第二类图为拥塞窗口变化图,能反映数据包的传输速率,这类图的横坐标为时间,纵坐标为拥塞窗口大小。
首先我们根据图2至图7来分析通过重复ACK信令触发CN(发送节点)启用TCP拥塞控制策略的情况。
图4 通信节点和移动节点发送端TCP序列号详图
图5 通信节点和移动节点接收端TCP序列号详图
图6 通信节点拥塞控制窗口变化
图7 通信节点拥塞控制窗口变化详图
其中,图2至图5是试验期间CN(通信节点,在试验中又是发送节点)和MN(移动节点,在试验中又是接收节点)的接收缓存和发送缓存中的TCP序列号图。图6和图7则是试验期间CN的拥塞窗口变化图。图4、图5分别为为图2、图3红色矩形区域的放大图;图7为图6蓝色矩形区域的放大图。 #p#IPv6 路由器
IPv6 路由器不仅在接口之间转发 IPv6 包,而且同时通告它的存在性和位于直接连接的子网上的主机的无状态自动配置信息。这是通过发送 Router Advertisement 消息来实现的。运行Windows XP或Windows Server 2003家族成员之一的计算机可以配置为一个静态路由器和一个通告路由器。静态路由器不使用路由协议来维护 IPv6 路由表中的路由。net130整理
为了创建一个静态 IPv6 路由器,您必须在必需的接口上启用转发和通告。IPv6 路由器不必安装两个LAN接口。 例如,对于一个ISATAP路由器,您可以仅有单个LAN接口,并在该LAN接口上启用转发,在自动隧道伪接口(Automatic Tunneling Pseudo-Interface)上同时启用转发和通告。有关ISATAP的更多信息,请参见本文的“ISATAP路由器”一节。
如要在某个接口上启用转发和通告,请使用以下命令:
netsh interface ipv6 set interface InterfaceNameOrIndex
enabled|disabled] <[advertise=>enabled|disabled]
<[mtu=>MTUSize] <[store=>active|persistent]
默认禁用转发和路由,MTU 大小是接口所报告的链路 MTU,并且接口设置是持久的。
例如,假设正在将一台运行 Windows Server 2003 系列的成员之一的计算机配置为一个路由器。 它具有三个分别名为 Local Area Connection、Local Area Connection 2和Local Area Connection 3 的接口。 为了在 Local Area Connection 和 Local Area Connection 2 上启用转发和通告,以及在Local Area Connection 3 上启用转发,相应的命令为:
netsh interface ipv6 set interface "Local Area Connection"
forwarding=enabled advertise=enabled
netsh interface ipv6 set interface "Local Area Connection 2"
forwarding=enabled advertise=enabled
netsh interface ipv6 set interface "Local Area Connection 3"
forwarding=enabled
Local Area Connection 3接口被连接到一个已经包含通告路由器的子网。
在这些命令运行之后,该路由器通过 Local Area Connection 和 Local Area Connection 2 接口发送 Router Advertisement 消息。 然而,它们没有包含任何 Prefix Information(前
缀信息)或 Route Information(路由信息)选项,以供所连接子网上的主机自动配置地址和路由。 现在必须给路由器配置要发布的路由。
要添加一个路由,请使用以下命令:
netsh interface ipv6 add route IPv6Address/ PrefixLength
InterfaceNameOrIndex <[nexthop=>IPv6Address] <[publish=>no|age|yes]
<[validlifetime=>Minutes|infinite]
<[preferredlifetime=>Minutes|infinite] <[store=>active|persistent]
默认情况下,不存在下一跳地址(前缀是“在链路上的),路由不公布,有效和首选的生存期是无限的(infinite),并且路由是持久的。
例如,为了在 Local Area Connection 上添加路由并公布在链路上的站点局部前缀 FEC0:0:0:1::/64,然后在 Local Area Connection 2 上添加在链路上的站点局部前缀 FEC0:0:0:2::/64,相应的命令为:net130整理
netsh interface ipv6 add route fec0:0:0:1::/64 "Local Area Connection"
publish=yes
netsh interface ipv6 add route fec0:0:0:2::/64 "Local Area Connection 2"
publish=yes
对于这个配置,路由器将不把它自己作为默认路由器来通告。 FEC0:0:0:1::/64和FEC0:0:0:2::/64 子网上的主机自动配置适当的地址,并向它们的路由表添加必需的路由,但是它们不会配置一个默认路由(::/0)。运行 Windows Server 2003 系列或 Windows XP 的 IPv6 协议的计算机不会把它自己作为默认路由器来通告,除非存在一个配置为要公布的默认路由。
为了将 FEC0:0:0:1::/64 和 FEC0:0:0:2::/64 子网上的路由器配置为默认路由器,您必须向路由器添加一个默认路由并公布它。例如,如果 Local Area Connection 3 上的子网包含一个链路局部地址为 FE80::2AA:FF:FE98:2AB1 的路由器,下面的命令将向该静态路由器添加一个默认路由并公布它:
netsh interface ipv6 add route ::/0 "Local Area Connection 3"
nexthop=fe80::2aa:ff:fe98:2ab1 publish=yes#p#6to4 路由器
6to4 是一种地址分配和自动隧道技术,用于通过 IPv4 Internet 提供 IPv6 站点和主机之间的单播 IPv6 连接。有关 6to4 的更多信息,请参见IPv6 入门(Cable Guy,2001 年 7 月文章)和 RFC 3056。
运行 Windows XP 和 Windows Server 2003 家族成员之一的计算机可以用作 6to4 路由器,它是在您启用连接到 Internet 的接口上的 “Internet 连接共享(ICS)” 时自动配置的。然而,如果您不希望启用 ICS,但是又想让该计算机充当 6to4 路由器,那么您必须手动配置 6to4 路由器功能。
要将运行 Windows Server 2003 家族成员之一或 Windows XP 的计算机手动配置为 6to4 路由器,您必需完成以下步骤:
•确保 6to4 路由器计算机给它的 Internet 接口分配一个公共地址,并且没有接收到来自连接的子网上的 IPv6 路由器或者 ISATAP 路由器的 Router Advertisement 消息。如果事实就是这样,6to4 组件将自动创建一个名为 6to4 Pseudo-Interface 的接口,并向使用 6to4 Pseudo-Interface 的路由表添加一个 2002::/16 路由,然后添加一个指向 IPv4 Internet 上的 6to4 中继路由器的默认路由。
•在连接到 intranet 的接口上启用转发和通告。这可以通过以下命令来完成:net130整理
netsh interface ipv6 set interface InterfaceNameOrIndex
forwarding=enabled advertise=enabled
•在 6to4 Pseudo-Interface上启用转发。这可以通过以下命令来完成:
netsh interface ipv6 set interface "6to4 Pseudo-Interface"
forwarding=enabled
•向连接到 intranet 的接口添加 6to4 前缀的路由,并配置其进行公布。这可以通过以下命令来完成:
netsh interface ipv6 add route 2002:WWXX:YYZZ: SubnetID::/64
InterfaceNameOrIndex publish=yes
WWXX:YYZZ是w.x.y.z的冒号分隔的十六进制表示形式,它是分配给连接到 Internet 的接口的公共 IPv4 地址。 SubnetID用于识别 6to4 站点中单独的子网。
例如,某台计算机有三个 LAN 接口,这些接口具有如下配置: net130整理
•Local Area Connection(局域网连接)连接到 Internet,并被赋予公共 IPv4 地址:131.107.0.1。
•Local Area Connection 2是一个正在使用接口索引 5 的 intranet 接口。
•Local Area Connection 3 是一个正在使用接口索引 6 的 intranet 接口。
要将这台计算机配置为一个 6to4 路由器(假设它还没有接收到路由器通告),请运行以下命令:
netsh interface ipv6 set interface "Local Area Connection 2"
forwarding=enabled advertise=enabled
netsh interface ipv6 set interface "Local Area Connection 3"
forwarding=enabled
netsh interface ipv6 set interface "6to4 Pseudo-Interface"
forwarding=enabled
netsh interface ipv6 add route 2002:836b:1:5::/64 "Local Area Connection
2" publish=yes
netsh interface ipv6 add route 2002:836b:1:6::/64 "Local Area Connection
3" publish=yes
对于这个例子,前缀 2002:836B:1:5::/64 通过 Local Area Connection 2 来通告,前缀 2002:836B:1:6::/64 通过 Local Area Connection 3 来通告(836B:1 是公共 IPv4 地址 131.107.0.1 的十六进制冒号分隔表示形式)。根据约定,子网 ID 被设置为用于通告前缀的接口的接口索引。 您可以指定自己想要的任何子网 ID(从 0 到 0xFFFF)#p#ISATAP 路由器
ISATAP 是一种地址分配和自动隧道技术,它用于提供 IPv4 intranet 上的 IPv6 主机之间的单播 IPv6 连接。ISATAP 是在标题为“站点内自动隧道寻址协议(ISATAP)”(draft-ietf-ngtrans-isatap-0x)的 Internet 草案中描述的。默认情况下,Windows XP 和 Windows Server 2003 的 IPv6 协议在自动隧道伪接口(Automatic Tunneling Pseudo-Interface)上为分配给计算机的每个 IPv4 地址配置链路局部 ISATAP 地址。
为了配置站点局部或全局 ISATAP 地址,或者跨越 IPv4 intranet 所定义的逻辑子网之外进行通信,您需要一个 ISATAP 路由器。ISATAP 路由器执行以下功能:
•在 IPv4 intranet 上的 ISATAP 主机和 IPv4 intranet 之外的 IPv6 主机之间转发 IPv6 包。 net130整理
•通告它的存在和地址前缀,以便配置站点局部或全局 ISATAP 地址。
ISATAP 路由器能够执行其中任何一种功能,不过通常将它配置为同时执行这两种功能。 绝大多数情况下,ISATAP 路由器充当 IPv4 intranet 上的 ISATAP 主机和某个 intranet 上支持 IPv6 的部分网段上的 IPv6 主机之间的转发器。
例如,ISATAP 路由器能够连接到两个在物理上分离的网络:一个IPv4 intranet 和一个 IPv6 intranet。 对于这种情况,ISATAP 路由器至少要有两个 LAN 接口,其中至少要有一个连接
到 IPv4 intranet,至少要有一个连接到支持 IPv6 的 intranet。 为了使这台计算机能够成为一个 ISATAP 路由器,您必须完成以下步骤:
•在连接到支持 IPv6 的 intranet 的LAN接口上启用转发功能。这可以通过以下命令来完成: net130整理
netsh interface ipv6 set interface InterfaceNameOrIndex
forwarding=enabled
•在自动隧道伪接口(Automatic Tunneling Pseudo-Interface)上启用转发和通告。这可以通过以下命令来完成:
netsh interface ipv6 set interface "Automatic Tunneling Pseudo-
Interface" forwarding=enabled advertise=enabled
•将 IPv4 intranet 的逻辑子网的子网 ID 的路由添加到自动隧道伪接口(Automatic Tunneling Pseudo-Interface),并设定对其进行通告。这可以通过以下命令来完成:
netsh interface ipv6 add route IPv6Address/PrefixLength "Automatic
Tunneling Pseudo-Interface" publish=yes
•添加一个默认路由(使用连接到 IPv6 intranet 的 LAN 接口),并设定对其进行通告。这可以通过以下命令来完成:
netsh interface ipv6 add route ::/0 InterfaceNameOrIndex
nexthop=IPv6Address publish=yes
例如,某台计算机具有两个 LAN 接口,一个连接到名为 Local Area Connection 的 IPv4 intranet,另一个连接到名为 Local Area Connection 2 的支持 IPv6 的 intranet。 分配给 IPv4 intranet 的逻辑子网的子网 ID 是 3FFE:FFFF:0:10::/64 和 FEC0:0:0:10::/64。该计算机使用名为 Local Area Connection 2 的接口所连接到的 IPv6 intranet上的一个默认路由器,并且这个路由器的下一跳地址为 FE80::2AA:FF:FE98:2AB1。 为了将这台计算机配置为一个 ISATAP 路由器,请运行以下命令:
netsh interface ipv6 set interface "Local Area Connection 2"
forwarding=enabled
netsh interface ipv6 set interface "Automatic Tunneling Pseudo-Interface"
forwarding=enabled advertise=enabled
netsh interface ipv6 add route 3ffe:ffff:0:10::/64 "Automatic Tunneling
Pseudo-Interface" publish=yes
netsh interface ipv6 add route fec0:0:0:10::/64 "Automatic Tunneling
Pseudo-Interface" publish=yes
netsh interface ipv6 add route ::/0 "Local Area Connection 2"
nexthop=fe80::2aa:ff:fe98:2ab1 publish=yes
IPv4 intranet 上运行 Windows XP Service Pack 1 或运行 Windows Server 2003 家族成员之一的 ISATAP 主机通过尝试解析名称 “ISATAP” 来发现该 ISATAP 路由器。为确保成功解析这个名称,您可以将该路由器计算机命名为“ISATAP”,或者向您的 DNS 基础结构添加适当的主机地址(A)或规范名称(canonical name,CNAME)记录。所使用的资源记录必须将名称“ISATAP” 解析为该 ISATAP 路由器的 intranet 接口的IPv4地址。
如果该ISATAP路由器的名称不是 “ISATAP”,或者名称 “ISATAP” 没有被解析为 IPv4 intranet 接口的 IPv4 地址,您需要在该ISATAP路由器和所有 ISATAP 主机上运行以下命令: net130整理
netsh interface ipv6 isatap set state router=AddressOrName
AddressOrName或者是路由器 intranet 接口的 IPv4 地址,或者是解析出这个地址的路由器的名称。
注意:IPv4 intranet 上的 ISATAP 主机通过尝试解析名称“_ISATAP”而不是解析“ISATAP”来发现 ISATAP 路由器。#p#6over4 路由器
6to4 也称为 IPv4 多播隧道,这是一种自动隧道技术,用于通过站点中支持多播的IPv4 intranet 提供 IPv6 节点之间的单播或多播连接。6over4 在 RFC 2529 中有所描述。默认禁用 Windows XP 和 Windows Server 2003 家族中可用于 IPv6 协议的 6over4。如要启用 6over4 并创建一个 6over4 接口,您可以运行以下命令:
netsh interface ipv6 add 6over4tunnel 6over4InterfaceName IPv4Address net130整理
<[store=>active|persistent]
6over4 InterfaceName是 6over4 接口的名称,IPv4Address是用于基于 6over4 的接口 ID 的 IPv4 公共或专用地址。默认情况下,6over4 接口是持久的。
例如,为了创建一个名为 6over4 Tunnel Interface 的 6over4 接口(它使用一个基于被分配的 IPv4 地址 10.60.90.21 的一个接口ID),您可以运行以下命令:
netsh interface ipv6 add 6over4tunnel "6over4 Tunnel Interface"
10.60.90.21
在启用之后,6over4 就类似于 ISATAP,只不过它还支持多播 IPv6 流量。然而, 6over4 需要一个支持多播的 IPv4 intranet。
为了配置站点局部或全局 6over4 地址,或者跨越 IPv4 intranet 所定义的逻辑子网之外进行通信,您需要一个 6over4 路由器。6over4 路由器执行以下功能:
•
在IPv4 intranet 上的 6over4 主机和该 IPv4 intranet 之外的 IPv6 主机之间转发 IPv6 数据包。
•
通告它的存在性和地址前缀,以便配置站点局部或全局 6over4 地址。
绝大多数情况下,6over4 路由器充当 IPv4 intranet 上的 6over4 主机和某个 intranet 上支持 IPv6 的部分网段上的 IPv6 主机之间的转发器。
例如, 6over4 路由器能够连接到两个物理上分离的网络:一个支持多播的IPv4 intranet 和一个 IPv6 intranet。对于这种情况,6over4 路由器至少要有两个 LAN 接口,其中至少要有一个连接到 IPv4 intranet,同时至少要有一个连接到支持 IPv6 的 intranet。为了使这台计算机能够成为一个 6over4 路由器,您必须完成以下步骤:
•
在连接到支持 IPv6 的 intranet 的 LAN 接口上启用转发。这可以通过以下命令来完成:
netsh interface ipv6 set interface InterfaceNameOrIndex
forwarding=enabled
•
在 6over4 接口上启用转发和通告。这可以通过以下命令来完成: net130整理
netsh interface ipv6 set interface 6over4InterfaceName
forwarding=enabled advertise=enabled
•
将 IPv4 intranet 的逻辑子网的子网ID的路由添加到 6over4 接口,并设定对其进行通告。 这可以通过以下命令来完成:
netsh interface ipv6 add route IPv6Address/ PrefixLength
6over4InterfaceName publish=yes
•
添加一个默认路由(使用连接到 IPv6 intranet 的 LAN 接口),并设定对其进行通告。 这可以通过以下命令来完成:
netsh interface ipv6 add route ::/0 InterfaceNameOrIndex
nexthop=IPv6Address publish=yes
例如,某台计算机具有两个LAN接口,一个连接到名为 Local Area Connection 的 IPv4 intranet,另一个连接到名为 Local Area Connection 2 的支持 IPv6 的intranet。这样将创建一个名为 6over4 Tunnel Interface 的 6over4 接口。分配给IPv4 intranet 的逻辑子网的子网ID是:3FFE:FFFF:0:2A1C::/64 和 FEC0:0:0:2A1C::/64。该计算机使用名为 Local Area Connection 2 的接口所连接到的 IPv6 intranet 上的一个默认路由器,并且这
个路由器的下一跳地址为 FE80::2AA:FF:FE98:2AB1。 为了将这台计算机配置为一个 6over4 路由器,请运行以下 netsh 命令:
netsh interface ipv6 set interface "Local Area Connection 2"
forwarding=enabled
netsh interface ipv6 set interface "6over4 Tunnel Interface"
forwarding=enabled advertise=enabled
netsh interface ipv6 add route 3ffe:ffff:0:2a1c::/64 "6over4 Tunnel
Interface" publish=yes
netsh interface ipv6 add route fec0:0:0:2a1c::/64 "6over4 Tunnel
Interface" publish=yes
netsh interface ipv6 add route ::/0 "Local Area Connection 2"
nexthop=fe80::2aa:ff:fea7:412e publish=yes#p#移动 IPv6 介绍
RFC (Request for Comments) 3775 将移动 Internet 协议第 6 版 (Mobile Internet Protocol version 6) 定义为:不管 IPv6 节点位于 IPv6 网络的何处以及与移动 IPv6 节点通信的其他节点是否支持移动 IPv6,始终可以对 IPv6 节点进行访问。
下面几节将介绍:
•漫游节点和传输层连接的可存活性 net130整理
•移动 IPv6 的组成
•移动 IPv6 数据传送
•通信注册过程
•移动 IPv6 节点和 TCP 连接
•Microsoft Windows 中的移动 IPv6 支持
漫游节点和传输层连接的可存活性
当某个节点具有移动性时(比如在无线网络的不同部分间漫游并启用了无线功能的便携式计算机),存在一些机制来确保该移动节点拥有其所连接网段(子网)的相关地址。对于 IPv6 而言,这些机制包括通过路由器发现和面向 IPv6 的动态主机配置协议 (Dynamic Host Configuration Protocol for IPv6,DHCPv6) 实现的无状态地址自动配置。当检测到其处于某个无线网络的一个新的链路之上后,正在漫游的无线节点就会使用路由发现、DHCPv6,或者同时使用这两者来配置 IPv6 地址、相邻的 IPv6 默认路由器地址、以及其他配置参数。
虽然移动节点可针对其所连接的新链路进行自动配置,但是无法再使用原先利用该漫游节点的旧地址建立的传输层连接(比如:TCP 连接)。旧地址在新的网段中不再有效,而且必须放弃现有的 TCP 连接。应用程序必须使用新分配的地址建立新的连接。根据应用程序的不同,如果 IPv6 地址配置发生突然变化,可能会导致应用程序停止工作,从而需要用户停止并重新启动该应用程序。.
对于真正的漫游支持,IPv6 节点必须同时支持自动重新配置和传输层连接的可存活性。移动 IPv6 提供的解决方案是通过扩展 IPv6 来使传输层协议和应用程序无法觉察到 IPv6 地址配
置所发生的变化,而不是通过修改应用程序或传输层协议(比如:TCP)来提供传输层可存活性。在移动 IPv6 中,应用程序和传输层协议使用分配给不会发生变化的移动 IPv6 节点的 IPv6 地址,而不受该移动节点的位置和当前地址配置的限制。
移动 IPv6 的组成
移动 IPv6 由以下几个部分组成:
•
移动节点 (mobile node) 可更改链路(从而进一步更改地址)并可使用其居家地址 (home address) 保持可连接性的 IPv6 节点。
•
居家链路 (home link) 生成移动节点的链路。
•
居家地址 (home address) 分配给连接到居家链路的移动节点的地址,而且通过该地址始终可以访问相应的移动节点,无论其在 IPv6 网络上位于何处。由于居家地址总是分配给移动节点,因此移动节点在逻辑上总是连接到居家链路。
•
居家代理 (home agent) 居家链路上的一台路由器,保存离开居家地址的移动节点的注册信息及其当前地址。虽然上图中的居家代理充当将居家链路连接到 IPv6 网络的路由器,但是居家代理不是必须提供这项功能。居家代理也可以是居家链路(当移动节点连接到居家链路时不执行任何转发操作)上的一个节点。
•
外地链路 不属于移动节点的居家链路的链路。
•
转交地址 (care-of address) 移动节点在连接到外地链路时所用的地址。移动节点的居家地址与转交地址的关联称为绑定。
•
通信节点 与移动节点通信的 IPv6 节点。通信节点不一定必须支持移动 IPv6。
支持移动 IPv6 的通信节点居家代理在绑定缓存中保存有关绑定的信息.移动节点在绑定更新列表中保存有关通信节点的信息。
注意: 当使用 IPv6 传输技术(比如:6to4、站内自动隧道寻址协议 (ISATAP) 或 Teredo)时,上图中的 IPv6 网络可以是 IPv6 Internet、专用内部网中支持 IPv6 的部分或者公用或专用 IPv4 基础结构。更多信息,请参见IPv6 传输技术.
移动 IPv6 数据传送
当移动节点不在居家链路上时,可以通过以下几种方法接收来自通信节点的数据包:net130整理
•
如果通信节点不支持移动 IPv6,或者还未完成通信注册,那么数据包将被发往移动节点的居家地址。通信注册将在本文的“通信注册过程”一节中进行介绍。居家代理拦截数据包,并使用 IPv6-over-IPv6 隧道将其放在隧道上进行传输,以发送给移动节点的转交地址。
•
如果通信节点支持移动 IPv6,并且已经完成了通信注册,那么数据包将被直接发送到移动节点在 IPv6 网络上的位置。这些数据包包含一个含有该移动节点居家地址的新的 Type 2 路由扩展报头。
当移动节点不在居家链路上时,其可以通过以下几种方法将数据包发送给通信节点:
•
如果通信节点不支持移动 IPv6,或者还未完成通信注册,那么将使用 IPv6-over-IPv6 隧道把数据包放在隧道上进行传输,发送给居家代理。尔后,居家代理将这些数据包转发到通信节点。
•
如果通信节点支持移动 IPv6,并且已经完成了通信注册,那么数据包将直接被发送到通信节点。这些数据包包含一个新的居家地址选项。该选项位于含有该移动节点居家地址的目标选项 (Destination Options) 报头中。
通过居家代理在通信节点和移动节点间建立的数据包隧道称为双向隧道。双向隧道确保了当移动节点不在居家链路上时,总是可供访问,即便通信节点不支持移动 IPv6。然而,双向隧道会导致严重的传输延迟。
在移动节点和支持移动 IPv6 的通信节点间直接发送数据包的过程称为路由优化。路由优化消除了与双向隧道相关联的传输延迟,并需要通过它来为具有时间要求的流量(比如:Voice over IP,VoIP)提供充足的性能。
下图显示了移动节点和通信节点使用双向隧道和路由优化功能来交换数据包。
通信注册过程
为了执行数据包的路由优化传送,移动节点和通信节点将执行通信注册。这一过程由以下几个部分组成:
•
迂回路由过程 (Return Routability procedure)
为了证明通过移动节点的居家地址和转交地址均可对其进行访问,移动节点和通信节点将执行迂回路由过程。需要通过该证明来防范各种连接劫持和拒绝服务攻击。在执行执行迂回路由过程时,移动节点会向通信节点发送两个不同的测试数据包。其中一个通过居家代理进行发送,而另一个则直接发送给通信节点。通信节点将响应发送给测试数据包,而且每个响应都包含一个加密令牌。
•
交换绑定更新 (Binding Update) 和绑定应答 (Binding Acknowledgement) 消息
完成迂回路由过程之后,移动节点将向通信节点发送一条移动 IPv6 绑定更新消息。绑定更新消息包含使用通信节点在迂回路由过程中所发送的加密令牌计算的身份验证数据。由通信节点验证身份验证数据。这一验证并属于强加密身份验证,但足以防范大多数攻击类型。如果此身份验证数据有效,那么通信节点将在其绑定缓存中为移动节点添加一个条目,并发送一条绑定应答消息。
收到绑定应答消息时,移动节点将在其绑定更新列表中为通信节点添加一个条目。
完成了通信注册过程之后,移动节点和通信节点就可以使用路由优化相互发送数据包。
移动 IPv6 节点与 TCP 连接
为了说明移动 IPv6 如何提供传输层连接的可存活性,让我们来看一下当移动 IPv6 节点从其居家链路转移到外地链路时,现有的 TCP 连接发生了哪些变化。为了简要说明此例子,我们将只详细介绍在移动节点和通信节点间交换的那组消息。有关移动 IPv6 过程的详细信息,请参见《了解移动 IPv6》.
节点 A 是一个移动节点,而节点 B 是一个支持移动 IPv6 的通信节点。节点 A 在连接到其居家链路时将配置一个居家地址。节点 A 与节点 B 建立 TCP 连接。当节点 A 漫游到外地链路时,将发生以下过程:
1.在发现节点 A 所连接的链路发生变化并获得了转交地址后,节点 A 将与其家乡代理交换一组绑定更新和绑定应答消息。居家代理在其绑定代理中为节点 A 添加一个条目,用以保存其居家地址和转交地址。这称为居家注册。
2.在这个例子中,节点 B 向节点 A 发送现有 TCP 连接的一个 TCP 段。由于节点 B 还未得到节点 A 已更改位置的信息,因此节点 B 将该 TCP 段 发往节点 A 的居家地址。
3.因为居家代理拥有节点 A 居家地址的一个绑定缓存条目,所以居家代理会拦截 TCP 段并将其放在隧道上发送给节点 A 的转交地址。
4.在接收到居家代理通过隧道传输的 TCP 段之后,节点 A 开始进行通信注册,包括迂回路由过程以及绑定更新和绑定应答消息的交换。
在进行通信注册时,在移动节点和通信节点间发送的 TCP 段通过居家代理进行双向隧道传输。
当完成了通信注册之后,移动节点在其绑定更新列表中拥有通信节点的一个条目,而通信节点在其绑定缓存中拥有移动节点的一个条目。
5.节点 A 和节点 B 使用路由优化交换后续的 TCP 段。
如果节点 B 不支持移动 IPv6,那么通信注册过程将失败,而且所有在节点 A 和节点 B 间传送的 TCP 段将进行双向隧道传输。
漫游时,起初在移动节点的地址和通信节点的地址间建立的 TCP 连接将原封不动。在步骤 1 中可能会有一些 TCP 段被丢弃,其间当节点 A 发现链路变化时会产生延迟,获取一个新的转交地址,并执行居家注册。但是,这些段由 TCP 进行重新传输。
Microsoft Windows 中的移动 IPv6 支持
Microsoft Windows XP with Service Pack 1、Windows XP with Service Pack 2 和 Windows Server? 2003 仅包含基于目前已过时的移动 Pv6 Internet 草案第 13 版的通信节点支持。更多信息,请参见《了解 IPv6》 (Microsoft 出版社图书)的第 12 章。
Microsoft Research 推出的 Mobile IPv6 Technology Preview(移动 IPv6 技术预览)(可通过申请获得)支持 RFC 3775 和 3776 所描述的全部通信节点、移动节点和居家代理功能。如欲参与 Mobile IPv6 Technology Preview,请通过电子邮件将申请信发送到:mipv6-fb@microsoft.com. 如需了解安装信息、限制、功能支持以及实施细节,请参见 Mobile IPv6 Technology Preview 附带的 Mobile IPv6 Technology Preview User Guide(移动 IPv6 技术预览用户指南)。#p#具体分析如下:
(1). MN进行切换的过程中,短时间内将不能够接收TCP报文段,这在图5中,表现为MN的接收端TCP序列号在40.4至40.6秒期间,有一个缺口;
(2).由于CN并不了解MN已经不能够接收TCP报文段,所以它继续发送数据。可以从图4中看到CN发送的TCP报文段序列号比MN的长了一段,而正常通信情况下,应该是CN发出的每一个报文段,MN都会回应一个ACK信令,在图中表现为纵坐标相同;
(3). 由于MN接收的报文段序列号有缺口,意味着它收到了乱序的报文段,因此MN发送了一连串的重复ACK信令,对应于图4中一段平行于时间轴的直线;
(4). 40.6秒左右,CN收到一连串的来自MN的重复ACK信息,即图5中一段平行于时间轴的直线,这就触发了CN的拥塞控制策略及快速重传算法;
(5). 根据快速重传算法,CN在收到第3个重复确认信令后,不等重传计时器超时,立即发送MN在ACK信令中所指定的报文段,因此在图4中,在40.6秒时间轴的右方,有个红色的三角形,即代表CN发出的TCP报文段。快速重传算法在此处加速了通信速度,因为,CN与MN间的RTT(Round Trip Time)至少为它们之间网络延迟之和的两倍,即112毫秒,RTO(Retransmission Time Out)还要更长,如果等到RTO超时再重发数据包,则需要花至少112毫秒;但实际上,从图4中可以看出,CN重发数据包只花了40毫秒左右的时间。因此,快速重传在这里发挥了作用。
(6). 与此同时,在图7中可以看到,启动拥塞控制策略后,CN对拥塞窗口大小进行了调整,首先是在40.6秒左右降到1个报文段,然后根据慢速启动算法,CN以指数形式来提高拥塞窗口大小,即20,21,22,23,直到将其调整到慢速启动阈值(SSTHRESH,Slow Start Threshold)。在这里,由于试验中定义拥塞窗口大小为32,因此,发生网络拥塞时,SSTHRESH调整为拥塞窗口大小的一半,即16。从图7中可以看出,拥塞窗口大小增长到16后进入线性增长阶段。
(7). 此外,由于拥塞窗口大小的限制,CN在快速重传开始后,前面四次TCP报文段传送速率分别是一次发送20,21,22,23个TCP报文段,这在图4中,表现为红色三角形在40.6秒后的四次发送数量分别是1,2,4,8个。
上述就是根据数据图对重复ACK信令引起的拥塞控制策略进行的分析,如果对此有了充分的理解,那么超时重传的情况也与此类似。因此,接下来我们根据图8至图9来简单说明通过超时重传触发发送端启用TCP拥塞控制策略的情况。
图8 通信节点和移动节点发送端TCP序列号
可以看到, 从图9中可以看到,50.1秒左右,由于MN开始切换,不能够正常接收TCP报文段;并且由于切换时间较长,MN长时间内都不能够给CN进行回应。于是当CN等到自己的重传计时器超时,就再次发送没有得到MN回应的报文段。在50.1秒后,CN分别隔了0.5秒,1.0秒,2.0秒发送了三次同样的TCP报文段,这对应于图8中的标记。该超时重传过程持续到MN最终完成切换配置,并对第三次重发的报文段进行回应,于是两者开始恢复通信。
图9 通信节点和移动节点接收端TCP序列号
4. 小结
通过该试验,一方面我们试验数据分析和验证了TCP的拥塞控制原理;另一方面,我们可以看到,TCP TAHOE模型并不太适合作为无线网络的传输协议。
TCP协议由于出现的比较早,其性能方面的优化主要是基于传输网络为有线网络这个假设,因此,一旦根据重传计时器超时或者重复ACK信令判断出发生了数据包丢失,当前的TCP协议就认为发生了网络拥塞,于是启用网络拥塞策略来降低传输速率,比如慢速启动,将拥塞窗口调整为1个TCP报文段;而实际情况是,我们的传输基于无线网络,当不能够接收到ACK信令的时候,很有可能是因为移动节点正在进行切换或者是无线网络的信号不好,因此,需要发送节点保持或者加快发送速率,而不是减速发送。
适合无线网络运行的TCP协议已经引起了许多研究者的兴趣。考虑到无线网络和有线网络经常混合在一起,有些研究者提出了新的协议模式,如Bakne and Badrinath (1995)提出了indirect TCP,这种方案把连接分为有线和无线两部分,在两部分中分别采用适合各自网络特点的传输协议;有些研究者提出了新的算法,如2003年提出的RFC3522(The Eifel Detection Algorithm for TCP)。总之,无线网络正得到大力发展,它将和有线网络长期并存,这是设计新的传输协议时必须考虑的问题。
