论文部分内容阅读
1 引言
TCP已经被证明在传统的有线网络中能够高效地运行,即使在原先并不是为其设计的高速有线网络以及其它的拓扑结构中也能够正常运行。然而随着计算机和通信技术的发展,无线广域网(如GPRS、UMTS等)、无线局域网(如IEEE802.11)、卫星通信网、蓝牙网络等多种无线网络系统正逐步代替传统有线网络成为互联网接入的最后一跳。异构网络融合在一起,也使得TCP拥塞控制机制面临着新的挑战。
2 TCP版本简介
当前在网络中使用的TCP版本有NewReno 和SACK等,下面对NewReno和SACK做简单介绍。
(1) NewReno
NewReno在早期版本Reno的基础上做了一个简单的改进,它消除了Reno在遭遇单窗口多包丢失的情况下被迫等待重传定时器超时的现象。部分ACK(partial ACKs)是指在快速恢复开始时,对发送端已经发送的部分分组的确认。在Reno中,当发送端TCP接收到partial ACKs时,则退出快速恢复阶段,并把当前可用窗口“缩减”至拥塞窗口(cwnd)的大小;而在NewReno中,partial ACKs却不使TCP退出快速恢复阶段,其具体实现的机制如下:
①当收到第三个重复ACK并且发送端还没有处于快速恢复过程时,设置ssthresh为当前拥塞窗口(假设接收窗口无限大)的一半,并记录传送的最大序列号:
cwnd=ssthresh(1)
②重传丢失的段并设置cwnd为ssthresh加3,即:
cwnd=ssthresh+3(2)
按已经离开网络的报文段数目③扩充拥塞窗口。
③对每个接收到的额外的重复ACK,将cwnd增大1个段,即:
cwnd=cwnd+1(3)
扩充拥塞窗口以反映已经离开网络的数据段。
④如果cwnd和接收端的通知窗口的值允许的话,发送一个数据段。
⑤当一个确认新数据的ACK到达时,此ACK可能是由步骤②中的重传引发的确认,或者是由稍后的一次重传引起的。
如果这个ACK确认了包括“传送的最大序列号”的数据,那么这个ACK确认了所有在丢失段的原始传送和第三个重复ACK接收之间的段,设置:
cwnd=ssthresh(4)
这里的ssthresh是步骤①中设置的值。
如果这个ACK不确认包括“传送的最大序列号”的所有数据,就产生一个部分ACK。在此种情况下,重传第一个没有确认的数据段。按确认的新数据量来减小拥塞窗口,如果cwnd的新值允许的话,然后加回一个段并发送一个新数据段。这个“部分窗口缩减”试图确定:当快速恢复最终结束时,大约ssthresh数量的数据还在向网络中传送。此时,不退出快速恢复过程,即如果任何重复ACK随后到达,执行上面的步骤③和④。对在快速恢复期间第一个到达的部分ACK,也要重设重传定时器。
(2)SACK
TCP-SACK是对早期版本Reno的一种简单改进。它们在扩大和减少拥塞窗口上使用的是相同的方法。在TCP中增加SACK并不改变拥塞控制基本阶段的方法,SACK保留了Reno在报文失序时的鲁棒性,且在必要时使用重传计时等待来进行恢复。SACK和Reno的主要差别在于当多个报文段从一个数据窗口丢失时的性能和所采取的策略。
SACK和Reno一样,当数据发送端收到3个重复确认时,就进入快速恢复阶段,发送端重发报文,并把拥塞窗口减半。在快速恢复阶段中,SACK保持了一个变量pipe,用它来估计出现在网络中的分组数,这与Reno的实现机制不同。当pipe小于拥塞窗口大小时,源端发送新的报文分组或者重发一个老报文,并将变量pipe值加1。而当发送端接收了一个带SACK选项的重复ACK报文,表明新数据已被接收端接收时,pipe值减1。用pipe变量可以把何时发送数据分组与发送哪个分组分离开来。发送端维护了一个特殊的数据结构(scorebord),记忆前面SACK的确认信息。当发送端被许可发送分组时,依次发送丢失列表中记录的分组。如果没有这样的分组,而接收端的通告窗口又足够大,则发送端将发出新的数据分组。
当重传分组本身被丢弃后,SACK用重传超时探测丢失,再次重传后进入“慢启动”过程。在确认了所有出现在进入“快速恢复”阶段的分组后,发送端将从“快速恢复”阶段退出。
对于“部分ACK”(partial ACK),即“恢复ACK”,SACK有特殊的处理。每收到一个“部分ACK”,发送端将变量pipe减2,而不是减1。在启动“快速重传”的时候,当认定一个分组已经被丢失时,将变量pipe减1;重传一个分组时,pipe变量加1。
3 仿真工具介绍及仿真分析
本文使用的仿真工具是OPNET 10.0,它的功能强大,可以做各种各样的模拟和调试,是仿真工具中较好的一个。在OPNET各种产品中,Modeler采用阶层性的模拟方式,从协议间关系看,节点模块建模完全符合OSI标准。为了对比各种TCP的性能,在仿真中重点考察平均吞吐量Throughput。
4 各TCP版本在无线环境中的仿真分析
(1) 仿真拓扑结构和配置
网络的拓扑结构如图1,一般认为所谓“哑铃型”结构可以比较近似地反映网络的实际情况。
在节点server2到节点client2之间建立CBR恒比特流,这里配置的是视频会议业务流,争抢AP节点到hub之间的链路带宽。节点server1为TCP发送方,业务源为FTP,节点client1为TCP接收方。
本仿真中无线链路仅仅考虑误码率,不考虑移动性等其他无线特性。在节点0和节点AP之间的误码率呈均匀分布,误码率选取分别为1E-5、1E-6、1E-12。仿真时间为20分钟。TCP段的长度选为1000字节。路由策略为尾部丢弃。
(2) 不同误码环境中的仿真结果和分析
在图2中,进行了SACK、NewReno在不同误码环境中的吞吐量比较。当误码率为1E-5时,SACK与NewReno相比略有提高。在这种环境中,SACK恢复单窗口多丢包的机制更为有效、准确。
当误码率为1E-6以上时(此时近似为有线网络中的误码情况),这两种版本的吞吐量差别不大。主要是由于这时误码率已经很低,他们提高TCP性能的机制起作用的机会自然不多。
当无线误码环境很糟糕时(如误码率位1E-5),SACK、NewReno都不能有效提高TCP的吞吐量。但是在无线环境中,误码率1E-5甚至更差的情况是比较常见的,因此,在广泛的无线环境中,SACK、NewReno无法良好运行。
5 结束语
通过对各版本TCP的仿真分析,可以得出这样的结论:在高误码的环境中,现有的TCP版本(如:NewReno和SACK)的使用都会使得网络吞吐量急剧下降。SACK选项的使用,可以适当提高TCP在无线环境中的性能。但是TCP_SACK在无线环境中性能提高的程度相当有限,主要是因为它不能够把误码丢包与拥塞丢包有效区分开来,同时由于在遭遇丢包,并接收到DUPACKs时,拥塞窗口cwnd盲目减半,导致TCP在无线环境中吞吐量会很低,不能够充分利用网络资源。
现有的解决方案中有的或者失去了端对端的语义,或者存在公平性方面的问题,或者链路层的重传与TCP层的重传存在冲突。因此要想得到一个提升无线TCP性能的解决方案则需要能够区分出网络拥塞丢包和误码丢包;并且要能够适应复杂的无线环境;当然同时还需要考虑维护TCP的端到端的语义,保证数据分组可以可靠地传输到目的地以及能和现存网络TCP机制并存,并仅仅要求局部修改;还需考虑带宽共享的公平性等其他一些重要因素,这些都是亟待进一步研究的主要问题。
TCP已经被证明在传统的有线网络中能够高效地运行,即使在原先并不是为其设计的高速有线网络以及其它的拓扑结构中也能够正常运行。然而随着计算机和通信技术的发展,无线广域网(如GPRS、UMTS等)、无线局域网(如IEEE802.11)、卫星通信网、蓝牙网络等多种无线网络系统正逐步代替传统有线网络成为互联网接入的最后一跳。异构网络融合在一起,也使得TCP拥塞控制机制面临着新的挑战。
2 TCP版本简介
当前在网络中使用的TCP版本有NewReno 和SACK等,下面对NewReno和SACK做简单介绍。
(1) NewReno
NewReno在早期版本Reno的基础上做了一个简单的改进,它消除了Reno在遭遇单窗口多包丢失的情况下被迫等待重传定时器超时的现象。部分ACK(partial ACKs)是指在快速恢复开始时,对发送端已经发送的部分分组的确认。在Reno中,当发送端TCP接收到partial ACKs时,则退出快速恢复阶段,并把当前可用窗口“缩减”至拥塞窗口(cwnd)的大小;而在NewReno中,partial ACKs却不使TCP退出快速恢复阶段,其具体实现的机制如下:
①当收到第三个重复ACK并且发送端还没有处于快速恢复过程时,设置ssthresh为当前拥塞窗口(假设接收窗口无限大)的一半,并记录传送的最大序列号:
cwnd=ssthresh(1)
②重传丢失的段并设置cwnd为ssthresh加3,即:
cwnd=ssthresh+3(2)
按已经离开网络的报文段数目③扩充拥塞窗口。
③对每个接收到的额外的重复ACK,将cwnd增大1个段,即:
cwnd=cwnd+1(3)
扩充拥塞窗口以反映已经离开网络的数据段。
④如果cwnd和接收端的通知窗口的值允许的话,发送一个数据段。
⑤当一个确认新数据的ACK到达时,此ACK可能是由步骤②中的重传引发的确认,或者是由稍后的一次重传引起的。
如果这个ACK确认了包括“传送的最大序列号”的数据,那么这个ACK确认了所有在丢失段的原始传送和第三个重复ACK接收之间的段,设置:
cwnd=ssthresh(4)
这里的ssthresh是步骤①中设置的值。
如果这个ACK不确认包括“传送的最大序列号”的所有数据,就产生一个部分ACK。在此种情况下,重传第一个没有确认的数据段。按确认的新数据量来减小拥塞窗口,如果cwnd的新值允许的话,然后加回一个段并发送一个新数据段。这个“部分窗口缩减”试图确定:当快速恢复最终结束时,大约ssthresh数量的数据还在向网络中传送。此时,不退出快速恢复过程,即如果任何重复ACK随后到达,执行上面的步骤③和④。对在快速恢复期间第一个到达的部分ACK,也要重设重传定时器。
(2)SACK
TCP-SACK是对早期版本Reno的一种简单改进。它们在扩大和减少拥塞窗口上使用的是相同的方法。在TCP中增加SACK并不改变拥塞控制基本阶段的方法,SACK保留了Reno在报文失序时的鲁棒性,且在必要时使用重传计时等待来进行恢复。SACK和Reno的主要差别在于当多个报文段从一个数据窗口丢失时的性能和所采取的策略。
SACK和Reno一样,当数据发送端收到3个重复确认时,就进入快速恢复阶段,发送端重发报文,并把拥塞窗口减半。在快速恢复阶段中,SACK保持了一个变量pipe,用它来估计出现在网络中的分组数,这与Reno的实现机制不同。当pipe小于拥塞窗口大小时,源端发送新的报文分组或者重发一个老报文,并将变量pipe值加1。而当发送端接收了一个带SACK选项的重复ACK报文,表明新数据已被接收端接收时,pipe值减1。用pipe变量可以把何时发送数据分组与发送哪个分组分离开来。发送端维护了一个特殊的数据结构(scorebord),记忆前面SACK的确认信息。当发送端被许可发送分组时,依次发送丢失列表中记录的分组。如果没有这样的分组,而接收端的通告窗口又足够大,则发送端将发出新的数据分组。
当重传分组本身被丢弃后,SACK用重传超时探测丢失,再次重传后进入“慢启动”过程。在确认了所有出现在进入“快速恢复”阶段的分组后,发送端将从“快速恢复”阶段退出。
对于“部分ACK”(partial ACK),即“恢复ACK”,SACK有特殊的处理。每收到一个“部分ACK”,发送端将变量pipe减2,而不是减1。在启动“快速重传”的时候,当认定一个分组已经被丢失时,将变量pipe减1;重传一个分组时,pipe变量加1。
3 仿真工具介绍及仿真分析
本文使用的仿真工具是OPNET 10.0,它的功能强大,可以做各种各样的模拟和调试,是仿真工具中较好的一个。在OPNET各种产品中,Modeler采用阶层性的模拟方式,从协议间关系看,节点模块建模完全符合OSI标准。为了对比各种TCP的性能,在仿真中重点考察平均吞吐量Throughput。
4 各TCP版本在无线环境中的仿真分析
(1) 仿真拓扑结构和配置
网络的拓扑结构如图1,一般认为所谓“哑铃型”结构可以比较近似地反映网络的实际情况。
在节点server2到节点client2之间建立CBR恒比特流,这里配置的是视频会议业务流,争抢AP节点到hub之间的链路带宽。节点server1为TCP发送方,业务源为FTP,节点client1为TCP接收方。
本仿真中无线链路仅仅考虑误码率,不考虑移动性等其他无线特性。在节点0和节点AP之间的误码率呈均匀分布,误码率选取分别为1E-5、1E-6、1E-12。仿真时间为20分钟。TCP段的长度选为1000字节。路由策略为尾部丢弃。
(2) 不同误码环境中的仿真结果和分析
在图2中,进行了SACK、NewReno在不同误码环境中的吞吐量比较。当误码率为1E-5时,SACK与NewReno相比略有提高。在这种环境中,SACK恢复单窗口多丢包的机制更为有效、准确。
当误码率为1E-6以上时(此时近似为有线网络中的误码情况),这两种版本的吞吐量差别不大。主要是由于这时误码率已经很低,他们提高TCP性能的机制起作用的机会自然不多。
当无线误码环境很糟糕时(如误码率位1E-5),SACK、NewReno都不能有效提高TCP的吞吐量。但是在无线环境中,误码率1E-5甚至更差的情况是比较常见的,因此,在广泛的无线环境中,SACK、NewReno无法良好运行。
5 结束语
通过对各版本TCP的仿真分析,可以得出这样的结论:在高误码的环境中,现有的TCP版本(如:NewReno和SACK)的使用都会使得网络吞吐量急剧下降。SACK选项的使用,可以适当提高TCP在无线环境中的性能。但是TCP_SACK在无线环境中性能提高的程度相当有限,主要是因为它不能够把误码丢包与拥塞丢包有效区分开来,同时由于在遭遇丢包,并接收到DUPACKs时,拥塞窗口cwnd盲目减半,导致TCP在无线环境中吞吐量会很低,不能够充分利用网络资源。
现有的解决方案中有的或者失去了端对端的语义,或者存在公平性方面的问题,或者链路层的重传与TCP层的重传存在冲突。因此要想得到一个提升无线TCP性能的解决方案则需要能够区分出网络拥塞丢包和误码丢包;并且要能够适应复杂的无线环境;当然同时还需要考虑维护TCP的端到端的语义,保证数据分组可以可靠地传输到目的地以及能和现存网络TCP机制并存,并仅仅要求局部修改;还需考虑带宽共享的公平性等其他一些重要因素,这些都是亟待进一步研究的主要问题。