TCP vrsion(New Reno and Sack).docVIP

  • 4
  • 0
  • 约 14页
  • 2016-12-03 发布于贵州
  • 举报
TCP vrsion(New Reno and Sack)

各种TCP版本之NewReno与Sack 实验目的 了解TCP NewReno 与 TCP Sack 的运行方式 基础知识回顾 在传送过程中,若同时有多个数据包在网络中遗失,大多数情况下TCP Reno都必须等到超时(Timeout)时才能重送遗失的数据包。主要原因在于:TCP Reno收到Partial ACK就会结束快恢复(Fast-recovery),进入拥塞避免(Congestion Avoidance)阶段。其中,Partial ACK的ACK号码比先前收到的ACK大,但比稍早已送出的数据包编号小。会出现Partial ACK是因为使用快重传(Fast-Retransmit)重送遗失的数据包只更正了部分数据包遗失的错误,事实上,从接收端的观点看,仍有许多预期该收到的数据包未被收到。TCP Reno的传送端在重新收到Congestion Avoidance阶段时,由于没有足够的Duplicate ACK可以触发重送的机制而只能等待超时。 超时对于TCP的效果有很大的影响。首先,若遗失的数据包无法使用Fast-Retransmit/ Fast-recovery重送,就必须等待超时来触发重送的机制,在等待超时的这段时间,TCP不能重送新的数据,这使得链路的使用率很低;其次,在超时之后,cwnd的值会被重设为1,也因此大大较低了TCP的传输效果。 【TCP NewReno】 NewReno是修改自Reno的TCP版本。New Reno跟Reno 在只有一个数据包遗失的情况下,其机制是一样的。当同时有多个 packet遗失时,New Reno就显示出了它的优势。这个版本主要修改了TCP Reno的Fast-recovery算法。NewReno在收到Partial ACK时,并不会立即结束Fast-recovery,相反,NewReno的传送端会持续地重送Partial ACK之后的数据包,直到将所有遗失的数据包重送后才结束Fast-recovery。这使得NewReno的传送端在网络有大量数据包遗失时不需等待Timeout就能更正此错误,减少大量数据包遗失对传输效果造成的影响。NewReno大约每一个RTT时间可重送一个遗失的数据包,在Fast-recovery阶段,若允许的话,传送端会继续送出新的数据包,以增加链路的使用率。 【TCP with Selective Acknowledgments(SACK)】 虽然NewReno可以解决大量数据包遗失的问题,但是NewReno在每个RTT时间只能一个数据包遗失的错误。为了更有效地处理大量数据包遗失的问题,另一个解决方法就是让传送端知道哪些已经被接收端收到,但用此方法必须同时修改传送端和接收端的传送机制。 SACK是TCP Reno的另一个衍生版本。在这个版本中,加入了一个SACK选项(TCP option field),允许接收端在返回Duplicate ACK时,将已经收到的数据区段(连续收到的数据范围)返回给传送端,数据区段与数据区段之间的间隔就是接收端没有收到的数据。传送端就知道哪些数据包是已经收到的,哪些是该重送的,因此SACK的传送端可以在一个RTT时间内重送一个以上的数据包。 NewReno,SACK与Reno之间的关系,可以用图1来表示: 实验步骤 在今天的实验中,我们来观察Reno,NewReno及SACK这3个TCP版本,并比较它们在遇到多数据包遗失时的异同。 仿真实验结果图(图2) 图2 网络结构图 上图对于大家可能不太陌生。我们在上一个试验(各种TCP版本之Tahoe与 Reno)中已经描述并使用过,就不在赘述。有一点区别在于:Buffer size=15。 为什么呢?因为NewReno和Sack主要解决大量数据包遗失问题,将r0与r1间的队列缓冲区设置得小一点,更容易遗失数据包,观察实验结果。 【实验1:TCP Reno】 TCL程序代码(假设我将此代码保存于/home/ns下的tcpversion1.tcl中) if {$argc !=1} { puts Usage: ns tcpversion1.tcl TCPversion puts Example: ns tcpversion1.tcl Tahoe or ns tcpversion1.tcl Reno exit } set par1 [lindex $argv 0] #产生一个仿真的对象 set ns [new Simulator] #打开一个trace file ,用来记录数据包传送的过程 set nd [open out-$par1.tr w] $ns trace-all $nd #打开一个

文档评论(0)

1亿VIP精品文档

相关文档