黄海利 ,王晓喃
(1.中国矿业大学 计算机科学与技术学院,江苏 徐州 221116;2.常熟理工学院 计算机科学与工程学院,江苏 常熟 215500)
TCP/IP的体系结构已经被广泛应用,传输层是整个网络体系结构中的关键层.从通信和信息处理的角度看,传输层向上面的应用层提供通信服务,属于面向通信部分的最高层,同时也是用户功能中的最低层.传输层有两种不同的传输协议,即面向连接的TCP(Transmission control protocol)和无连接的UDP(User da⁃tagram protocl).
由于两种协议各有特点和优势,因此它们适用于不同坏境的应用,从而面临着在不同的网络应用中该如何正确选择协议的问题.深入理解不同协议的优缺点和性能指标是应用协议的前提,因此本文从传输延时、丢包率、吞吐量三个方面分别对TCP和UDP的性能进行了分析,为如何应用这两种协议提供了参考依据.
TCP是面向连接的传输层协议,即应用程序在使用TCP协议之前,必须建立TCP连接,在数据传送完毕后,必须释放建立的连接,此过程也称作三次握手(Three-way handshake).
TCP提供可靠交付的数据传输,通过TCP连接传送的数据具有如下特点:无差错、不丢失、不重复并且按序到达.TCP使用分组编号,在发送端对用户数据进行分片,在接收端进行重组.接收端接收到数据后,都需发送确认消息给发送方,通知其已经成功收到数据.
TCP采用滑动窗口机制来控制发送方的发送速率,发送方和接收方都维持一个特定大小的窗口,窗口内的数据允许发送.当发送方接收到确认帧后,它会向前移动自己的发送窗口.接收方收到按序到达的数据后,也会向前移动自己的窗口,从而达到两个窗口相互作用控制发送速率的目的.
网络的拥塞是不可避免的,如何防止数据拥塞至关重要,TCP采取如下措施来防止拥塞.在发送端发送数据之前,并不知道网络的负荷情况,如果将大量的数据注入到网络,很有可能引起网络拥塞.慢开始(slow-start)算法是由小到大逐渐增大(按照指数规律增长)拥塞窗口的数值,不断监测网络拥塞情况.当注入量不断增大时,必然会导致拥塞.此时,采用拥塞避免机制解决这个问题.首先为拥塞窗口设置一个慢开始门限,当拥塞窗口达到门限值时就改用拥塞避免(按照线性规律变化).当网络出现拥塞时,将慢开始门限值减半,启动慢开始算法.快重传和快恢复算法在拥塞避免机制基础上进行了改进,只要连续接收到三个重复确认帧就重传接收端尚未收到的报文段,并把慢开始门限减半.这时,发送方认为网络已经拥塞,它会将拥塞窗口设置为慢开始门限减半后的值,开始执行拥塞避免算法.
UDP为应用程序提供了一种不必建立连接就可以发送IP数据报的方法.
UDP是无连接的,即在发送数据之前无需建立连接,因此减少了开销和数据传输时延.UDP不保证可靠交付,因此发送端不需要维持复杂的连接状态表.
UDP没有拥塞控制,因此当网络出现拥塞时,发送端不会降低自己的发送速率.因此UDP适用于具有如下特点的应用:1)要求发送端以恒定的速率发送数据;2)允许在网络发生拥塞时丢失一些数据;3)不允许数据有太大的时延.这些应用包括IP电话、实时视频会议等.
图1 仿真拓扑图
仿真工具采用NS-2,仿真参数见图1.源节点n0采用TCP传输cbr数据,n1采用UDP传输cbr数据.两条数据流在相同配置的链路上传输,链路的带宽是2 Mbs,链路延时是10 ms.两条数据流由n2接收后再转发给n3,节点n3采用sink代理接收数据.n2和n3之间的链路带宽为1.7 Mbps,延时为20 ms.上述的设置是为了产生瓶颈,出现丢包和排队现象以便进行性能分析.n2队列大小为20,数据包长度为1000 bytes,cbr发送速率为1 Mbps.
图2 TCP与UDP时延
如图2所示,TCP协议下的路由延时比UDP协议下的延时高,主要原因是TCP采用可靠机制传输数据.发送端在发送一个数据包后,必须等待确认帧,如果没有收到确认帧,必须进行重传.因此,TCP的传输时间就包括了传输的往返时间,从而增加了传输延时.与TCP协议对比,UDP无反馈机制,不保证可靠传输,所以UDP发送数据的时间只包括从发送端到接收端的时间,从而它的传输延迟比TCP短.
由图3可知,UDP的节点吞吐量高于TCP的吞吐量.TCP协议是可靠传输,采用滑动窗口协议控制发送窗口的发送速率,即接收方和发送方都维持特定大小的窗口,只有当发送方收到接收方的确认帧后,才会增加自己的窗口.在网络状况拥塞时,如果接收方没有收到确认帧,它就会减小发送窗口的大小,因此导致可以发送的数据量减小.当仿真时间到1.0 s时,UDP流和TCP流开始竞争带宽,因此TCP会降低自己的发送速率,而无反馈流UDP仍然按照原来的发送速率发送.所以,TCP的发送量减少,而UDP没有改变,从而导致UDP的吞吐量高于TCP.UCP吞吐量相比1.0 s之前会降低,是由于TCP数据流和UDP发生了竞争,产生了丢包.图2也说明了TCP和UDP的相互作用会影响TCP数据流对带宽的使用率.
从图4可以看出,TCP的丢包率呈下降趋势,这是由于TCP的滑动窗口和确认机制起了作用.TCP会定时检测网络拥塞情况,发现丢包后会降低自己的发送速率,从而也降低了丢包率.UDP不检测网络状况,也不会减少发送速率,因此它的丢包率受TCP发送数据量的影响,从而导致此起彼伏的现象,即TCP流数据少,UDP丢包率就少,TCP数据流多,UDP丢包率就多.在这里,不能判定由于TCP是可靠传输,就断定UDP的丢包率比TCP的丢包率要高,队列大小和cbr参数都会对丢包率造成影响.
图 5中,cbr从1 mb降低为 0.9 mb,从而得到UDP和TCP的丢包率.从图5可以看出,丢包率明显降低,这是因为数据流的发送速率降低缓解了网络的拥塞情况,从而给接收端提供了充裕的时间接收数据.
图6中,队列大小从20改为25.同样可以提取UDP和TCP的丢包率来比较.从图6可以看出,丢包率降低,这是由于在网络出现拥塞时队列缓存空间的增大可以接收更多的数据,因此降低了丢包率.
由仿真结果分析,TCP的可靠机制是用增加延时减少吞吐量作为代价.不能判定由于TCP是可靠传输,就断定UDP的丢包率比TCP的丢包率要高,怎样降低丢包率是个值得思考的问题.增加队列大小和降低发送速率虽然会降低丢包率,但是也会带来其他负面影响,比如增加队列大小会增加排队延时,降低发送速率会降低链路利用率等.
图3 TCP与UCP吞吐量
图4 TCP和UDP丢包率
图5 不同发送速率的丢包图
我们下一步的工作将从以下几方面入手:
(1)怎样在一定的网络坏境下设定最优值,使数据传输延时、丢包率、吞吐量都能达到最优解.
(2)为UDP设置一个监听器,监听网络拥塞情况,当网络出现拥塞时,以一定概率降低自己的发送速率.
(3)由于网络层的分组丢弃策略对TCP拥塞控制影响较大,因此,通过改进路由算法来提高TCP的性能.
图6 不同队列大小的丢包图
[1]罗万明,林闯,阎保平.TCP/IP拥塞控制研究[J]. 计算机学报,2001,24(1):1-18.
[2]Postel J.Transmission Control Protocol[S].RFC 793.1981.
[3]Postel J.User Datagram Protocol[S].RFC 768,1980.
[4]Velten D.Reliable Data Protocol[S].RFC908,1984.
[5]谢希仁.计算机网络[M].5版.北京:电子工业出版社,2008.
[6]卡萨德.TCP/IP入门经典[M].4版.井中月,译.北京:人民邮电出版社,2009.
[7]柯志享,程荣祥,邓德隽.NS2仿真实验:多媒体和无线网络通信[M].北京:电子工业出版社,2009.
[8]方路平,刘世华,陈盼,等.NS-2网络模拟基础与应用[M].北京:国防工业出版社,2008.
[9]Andrew Tanenbaum S.Computer Network[M].Fourth Edition.London:Prentice Hall PTR,2004.
[10]刘俊,童学红.TCP拥塞控制算法[J].计算机工程与设计,2011,32(7):2309-2313.