基于Nagle算法的嵌入式TCP协议---一.doc

基于Nagle算法的嵌入式TCP协议---一.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于Nagle算法的嵌入式TCP协议---一

  基于Nagle算法的嵌入式TCP协议   随着嵌入式系统的发展,在嵌入式系统中实现网络连接已成为研究热点,广泛使用的廉价8/ 16 位嵌入式处理器的性能不足与网络协议的复杂构成了尖锐的矛盾。嵌入式Internet 技术的核心是在嵌入式系统中实现TCP/ IP 协议簇, TCP 协议的机制比较复杂,对8/ 16 位嵌入式处理器的存储能力和运算能力要求较高,必须进行简化。   本文提出了一种适用于8/ 16 位低速处理器的简化TCP 协议。对其性能进行分析发现,在嵌入式网络大量使用小数据包,造成网络带宽利用率低下并且容易造成网络阻塞。 因此在简化的TCP 协议中引入Nagle 算法,大幅度减少了嵌入式网络中发送的小数据包个数,提高了吞吐率,并减少了所需的带宽。 简化TCP 协议的提出   TCP 协议的数据传输分为3 个阶段: 建立连接、传输数据和断开连接,可以用状态机 来实现。8/ 16 位嵌入式微控制器要完整实现这样复杂的状态机是十分困难的。在嵌入式系统中简化TCP 的实现已有相关的研究,本文进一步引入了Nagle 算法并且进行了网络模拟,给出了实验结果。 连接建立和断开机制   TCP 建立连接有两种方式:主动打开和被动打开。如果实现服务器端应用,可以将TCP 状态机的主动打开连接部分简化掉。同理客户端应用,可以将状态机的被动打开连接部分简化掉。断开连接也有两种方式:主动断开和被动断开。其中被动断开连接的处理较为简单。但为了保证安全性,希望主动断开连接。主动断开连接简化实现的方法是:发送一个Fin 数据报,在接收到对Fin 数据报的确认后,再发送一个Reset 数据报,就可完成主动断开连接。 以服务器端的TCP 连接为例,简化后的TCP状态机如图1。 单TCP 连接   在8/ 16 位微控制器上实现简化TCP 协议,无需实现多个TCP 连接,只需实现单个TCP 连接即可。 简单确认机制   嵌入式系统发送数据包不大,可以将TCP 协议的滑动窗口机制去掉,成为简单确认机制,只对单个数据报而不是批量数据发送确认。实现方法是设置TCP 头部windows 字段的大小为1 ,即可保证TCP协议双方都使用简单确认。 仅计算发送TCP 报文的校验和   由于TCP 协议校验和的计算对系统存储和计算资源的占用都比较多,可以省去对接收数据报校验和的计算,保留发送数据报TCP 校验和的计算。 简化TCP 方案小结   在上述4 个方面的基础上,在嵌入式处理器中实现了简化的TCP 协议,程序流程如图2。其中"不同状态的相应处理"指根据接收到的TCP 报文准备待发送数据报并将其发送到以太网上。 简化TCP 协议的性能分析 这种简化的TCP 协议的性能可以通过在NS-2 网络模拟器中进行模拟实现。   通常在嵌入式的环境中,应用层产生的数据包是很小的,经常是每个包只有几个、十几、几十个字节的数据,这样就产生了一个问题: TCP 协议的报头开销太大。假设数据仅有一个字节,而TCP 的包头有40 个字节,这样的数据报对底层网络的利用率仅仅只有1/ 41 ,考虑到分组之间的间隙和网络硬件组成帧还需要一些比特,实际的网络利用率更低。 嵌入式系统的这种常见的小的数据包造成了网络带宽的极大浪费。除了网络利用率不高之外,还有另外一个问题是产生TCP 数据包数量极多,网关和路由器会由于这些极大数量的小数据包而发生阻塞。 组块技术与其不足   通过以上分析,很自然的想到采用组块技术(clumping) 把一定数量的数据包组成一个帧,这样既能减小报头开销,又能减小TCP 数据包的数量,而且代码量增加很少。但是,这样组包会产生一个问题,TCP 在数据帧未达到一定大小之前不会传输数据,这样产生的延时会影响到数据的实时传输。因此,有必要对怎样避免这种延时进行研究。 Nagle 算法的由来   在因特网发展初期,由于bbs 和新闻组的流行,网络上充斥着大量的telnet 产生的小的数据包,数量极大的这些数据包使得路由器和网关发生了严重的阻塞现象,这和嵌入式系统中的情形类似。JoneNagle 提出了一种算法来对付这种棘手的小数据包问题,后来被称为Nagle 算法。   Nagle 算法与简单的组包( clumping) 技术不同,它和慢启动一样使用自计时( self clocking) 、用确认的到达来触发其余数据的传输。因此它没有引入额外的延时,而且能有效地减少网络上小数据包的流量。   Nagle 算法的描述   在一个连接上已经传输的数据还没有被确认的情况下,发送方的应用程序又生成了后续数据,并照常将数据送到输出缓冲区中,但这时并不发送后续报文段,而是等到有足够的数据填满一个达到最大长度的报文段之后再把缓冲区中的数据发送出去。   如果某个应用程序每次仅产

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档