新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于Nagle算法的嵌入式TCP协议

基于Nagle算法的嵌入式TCP协议

作者:时间:2012-04-05来源:网络收藏

Nagle 算法的描述

在一个连接上已经传输的数据还没有被确认的情况下,发送方的应用程序又生成了后续数据,并照常将数据送到输出缓冲区中,但这时并不发送后续报文段,而是等到有足够的数据填满一个达到最大长度的报文段之后再把缓冲区中的数据发送出去。

如果某个应用程序每次仅产生一个八位组的数据, TCP 会立即发送最初的那个八位组,但是在确认到达之前, TCP 会把后续数据存入缓冲区中。因此当应用程序生成数据的速率比网络的速率快很多时(如传送文件) ,后续的报文段将包含大量的数据,而当应用程序比网络速度更慢时(如用户敲键盘) ,就会发送较短的报文段而不必经过长的延时。

Nagle 算法在嵌入式环境的适用性

在嵌入式系统的环境中,嵌入式TCP 协议会面临着各种情况,比如一两个开关量的传输,或者是传感器数据实时的传输,而Nagle 算法能够自动适应网络速率和应用层数据流量的各种情况,因为它是以确认来触发的自计时的协议。

网络模拟

NS-2 是一个应用于网络研究的离散事件模拟器,它充分支持有线与无线网络上对于TCP、路由和多播协议的模拟。它自问世以来受到学术界的充分信赖,成为设计和检验新的协议和算法的权威网络模拟测试平台。

网络模拟环境的构建

图3 是本文构建的网络模拟环境:节点0 使用本文提出的嵌入式TCP 协议发送数据,节点1 使用用户投文协议(UDP) 组播协议来发送大量的数据,用于测试嵌入式TCP 协议在网络阻塞情况下的性能,节点2 和节点3 之间是瓶颈路径,模拟交换机之间的线路情况。

嵌入式TCP 协议的性能指标有吞吐量(throughp ut) ,即单位时间内TCP 源节点发送的字节数;延时,即源节点的应用层发出数据到目的节点应用层接收到数据的时间量。

基于Nagle 的简化TCP 协议的吞吐率

作为一个简单确认的TCP 协议,因为窗口始终是1 ,所以吞吐率( t hroughp ut ) 是恒定的,由于采用Nagle 算法,不再有大量小数据包产生,提高了吞吐率,提高的倍数约等于Internet 数据包最大值除以应用层产生数据包大小。比如应用层产生的数据包是10 byte ,那么吞吐率就提高了1000/ 10 = 100 倍。

如图4 所示,接收到的数据是随着时间线性增长的,也就是说吞吐率是恒定的。最高的曲线是采用Nagle 算法的简化TCP 协议的吞吐率;最低的曲线是未采用Nagle 算法的简化TCP 协议在同样环境下的吞吐率;中间曲线为未经过简化的标准TCP 协议,因此可以从图中看出,采用Nagle 算法明显优于其他两种情况,并且大大改善了简化TCP 的吞吐率。

基于Nagle 的简化TCP 协议的响应时间

再看看延时的问题,Nagle 算法会立即传送最初的数据,然后再以大吞吐量发送余下的数据。这就导致,第一,吞吐率大大增加,使得传送数据更快;第二,产生的数据包数量减少,使得发生拥塞重传的机会也减少。图5 和6 中分别是标准TCP 协议的延时抖动(jit ter) 和采用Nagle 算法的TCP 协议的延时抖动。

图6 曲线在开始的尖峰说明了在数据连接的开始Nagle 算法会立即发送接收到的小数据包,而接下来是将接收的大量的数据打成大包发送。图6曲线的平滑情况说明了延时抖动很小,适合嵌入式系统中实时数据的传输。在同样的模拟参数下,标准TCP 协议发送了大量的数据包(120 个) ,而采用Nagle 算法的简化的TCP 协议发送了不到20 个数据包。显而易见,采用Nagle 算法的简化TCP 协议在吞吐率高的同时还节省了网络的带宽。



评论


相关推荐

技术专区

关闭