周益帆
(杭州师范大学 钱江学院 电气机械工程系,浙江 杭州 310012)
传统的TCP协议是为有线网络环境而设计的,因此TCP假定网络拥塞是引起报文丢失的唯一原因,并相应地采取拥塞控制机制。然而在无线网络中,无线链路的高误码率和主机的移动切换也能经常引起报文丢失,而TCP仍然将这些报文丢失归咎于网络拥塞,这种错误的推论最终导致无线网络中TCP性能的严重下降。由于TCP协议应用的广泛性,如何提高TCP在无线网络中的性能成为目前研究的热点问题。
在无线链路中,较高的误码率往往会造成分组丢失而产生重传超时现象,致使TCP端到端的吞吐量较低。特别是突发性错误造成的多个连续分组的丢失在无线链路中是经常见到的,而每个分组的丢失都会引起拥塞窗口的减半,这样就会使发送端的发送速率严重降低,当然这种降低是我们不希望的。而当拥塞窗口低于4个分段时,就无法激活快速重传/恢复算法,这样发送端只能等待超时重传,使TCP端到端的性能进一步降低。
另外,频繁变动的移动节点也会对TCP性能造成很大的影响。当移动节点移动到一条新链路之前的一瞬间,如果一个家乡代理通过隧道向移动节点的转交地址发送了一个数据包,在这个包到达移动节点的旧链路时,移动节点已经不能在那里接收这个数据包了。因此,发送这个数据包的节点上的TCP就会检测到一个包丢失,并根据TCP/IP协议族的假设认为网络发生拥塞,于是启动TCP协的拥塞控制机制,开始降低发送数据包的速率。从这里可以看出,此时定时器超时的真正原因是由于移动节点离开了原来的网段又没有完成新的注册而造成的接收不到对等主机发送的数据包,当然也就不可能给出相应的确认报文,而不是因为网络发生了拥塞。无线网络下TCP协议的行为有以下几个缺点:
TCP的错误检测机制:这个机制不能区别不同类型的错误。TCP有一个基本假设,即一旦发生连续的丢包行为,TCP就判断网络拥塞。但是这套机制搬到无线环境中会使TCP的性能大大降低,甚至不可忍受。无线网的各种缺陷使得丢包现象不一定是拥塞导致的,而可能是移动导致的。
错误恢复机制:这个机制不能针对无线环境的具体特点 (如移动节点的频繁变动和信道的衰弱)做出相应的行为。
平衡协议的花销以及时间的节省能力。这是考虑到使用电池的移动终端的 有效应用。
对于拥塞(包括前向和后向)进行可靠且精确的检测,而不是仅仅基于RTT的铡量,或是像标准TCP那样直到丢包才探测到拥塞.这个机制可以解决不对称链路上的不少问题,并且减少超时 (超时机制正是基于对RTT的测量)对协议性能的影响。
端到端技术直接作用于发送端或接收端,也可同时作用于二者。由于传输层具有无缝、高效、独立等特性,使端到端的方案成为解决由用户移动性所带来的问题的较好方法,它可以修复由于用户移动所引发的众多问题。而且,当前的大部分Internet提供了一个尽最大努力(best-effort)的服务:网络底层结构能够丢弃、记录、复制数据段,引入时延的变化,限定信息的大小等。同时,应用层协议需要确定的、按序的信息传递,并期望存在一种对任意大小信息都支持且适应多重过程的网络服务。端到端的方案要求使用一个有效的传输层,而TCP可能是最好的代表,它与网络的其他部分的兼容性较好。对基于端到端协议的有一些新方法。
聪明代理机制:SMART机制与上边提到的SACK基于相同的原理,它使用的SACK中包含了积累的确认和已经成功接收的报文段的序号,当发现序号不连续时,立刻重发。显式丢失通告机制:在ACK中增加了显式丢失通告选项,它能够通告发送方数据丢失的真正原因,以区别对待与网络拥塞有关及其他与网络拥塞无关的数据丢失。其具体做法是:中间节点或者接收方若检测到数据丢失的确与网络拥塞无关,就相应地将其返回的ACK首部ELN位置位。发送方根据ELN值就可知道数据丢失的原因,重传数据并且避免触发不必要的TCP拥塞控制机制。其中ELN位可选择TCP报文首部中的保留比特位来充当。例如对于移动主机作为接收方的情况,当中间节点(基站)接收到来自移动主机的DUPACK时,若该DUPACK对应报文的后续报文已被基站转发,则可断定基站到移动主机间的无线链路段发生了数据丢失,就将其首部中的ELN位置位,然后再将此确认转发至发送方。发送方接收到含有ELN位的确认后,立即重传丢失的数据,而不是错误的启动拥塞控制机制。
TCP SACK协议。SACK算法是在Reno算法基础上进行扩展得来的,它在确认包的包头中增加了附加域,可以标识没有被正确接收的一个发送窗口内的多个数据包,从而对数据包进行有选择地确认和重传。这样,源端就能准确地知道哪些数据包被正确地传到接收端,避免了不必要的重传,减少时延,提高网络吞吐量。
非直接TCP(I-TCP)。这是使用分段连接方法的早期协议之一。这种方法在无线链路连接中使用常规的TCP,基站只简单的在两个连接间双向复制报文。I-TCP像其它的分段连接方法一样,试图从整个网络中将无线链路上的报文丢失分离出来,因此避免初始的TCP发送方参与无线链路上的恢复。由于TCP不能很好的适应无线链路的特点,造成了无线网络连接段的TCP发送方经常超时,从而导致初始发送方停止发送报文。该方法的另一个缺点是,TCP端到端的语义被违反了,因为在报文还未到达目的地之前,发送方就有可能收到该报文段的ACK,这个ACK实际上只表明基站收到了相应的报文,并非接收方真正收到了它。而且,每个报文段都要经过两次TCP的处理。由于TCP的状态必须在基站之间传输,这个协议对于每一个TCP连接都需要在基站维持一定数量的连接状态,当发生越区切换时处理过程就会变得复杂和缓慢。
无线TCP(W-TCP)。基站使用两种协议TCP和W-TCP,TCP用于处理有线链路数据的传送,W-TCP则应用于无线链路。在这个方案中无需对固定主机和移动终端的协议进行改动。
当基站接收到一个从发送方发送过来的报文段时,它将这个报文段的顺序号和到达时间存放到缓冲区中。每当一个报文段被发往移动主机时,W-TCP都会把它在缓冲区中停留的时间加入到时间戳里。通过这种“欺骗”方式,发送方会在报文段真正被基站发送出去之前,就认为它已经被发送了。W-TCP通过这种方法延缓了TCP时钟超时的时间,即影响RTT的估算。特别是当一个报文段被反复重传了多次以后,RTT的估计值将会变得很大,由于TCP采用平滑估计时间(也称为已平滑的RTT估计器)对下一次往返时间进行估计,发送方需要很长的一段时间才能消除一个不正常的语义,基站在移动主机确实收到报文段后才发送ACK到发送方。
基站在收到DUPACK或者计时器超时后,可以对丢失的报文段进行本地重传。如果是超时引起的重传,W-TCP在重传后就将发送窗口降为1个最大报文段长度,因为此时可能在无线网络中发生了突发性的报文丢失(burst loss)。相反,如果是重复应答引起的本地重传,基站不做多余的处理,因为能够收到重复应答帧证明此时无线信道状况良好。
[1]文莉,无线Internet技术,人民邮电出版社,2006年
[2]TCP/IP协议和服务技术参考,清华大学出版社,2004年
[3]周天翔,:通过ARQ提高无线网络中的TCP吞吐量,上海交通大学学报,2002