基于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 报文准备待发送数据报并将其发送到以太网上。
评论