当前位置:首页 > EDA > 电子设计自动化
[导读]1引言随着嵌入式系统与网络的日益结合,在嵌入式系统中引入TCP/IP协议栈,以支持嵌入式设备接入网络,成为嵌入式领域重要的研究方向。并且随着 Internet技术的迅猛发展和规模的不断扩大,现行的Internet协议IPv4在地

1引言

随着嵌入式系统与网络的日益结合,在嵌入式系统中引入TCP/IP协议栈,以支持嵌入式设备接入网络,成为嵌入式领域重要的研究方向。并且随着 Internet技术的迅猛发展和规模的不断扩大,现行的Internet协议IPv4在地址空间、端到端的IP连接、服务质量和网络安全等方面暴露出了不足,极大地限制了IP网络的进一步发展。而IPv6所提供的巨大地址空间和网络安全等因素已经使其成为下一代因特网IP协议,为了能够支持IPv6的应用,并且考虑到从IPv4到IPv6仍然需要一个过渡期,本文实现了一种基于实时操作系统的IPv4/IPv6双协议栈结构。

2协议栈的设计要点

2.1平台无关性

本文所设计的TCP/IP双协议栈,要求不能局限于特定的硬件环境和软件系统。因此,本协议栈的实现采用将所有的TCP/IP协议都驻留在一个进程当中,协议栈模块与操作系统内核分开。通过定义一个操作系统模拟层实现平台无关性。操作系统模拟层屏蔽硬件上的差异和获取操作系统提供统一的接口,如时钟、过程同步以及信息传递机制等。对于特定的嵌入式操作系统,直接对操作系统模拟层相应部分进行修改,以符合具体的要求。操作系统模拟层主要包括下面两个部分:

⑴与处理器和编译器有关

对不同微处理器的BYTE_ORDER存储系统定义;对不同编译器的数据类型长度的定义;与CPU或编译器相关的内容的定义。

⑵与操作系统相关

协议栈进程与应用程序进程之间的同步与通讯,需要对信号量sys_sem_t、消息队列sys_mbox_t和时钟函数进行定义和操作。

2.2协议栈的裁减

标准的TCP/IP协议栈功能复杂,代码量大,且需大量的存储器资源。为了满足嵌入式应用,必须对RFC定义的协议栈进行裁减[1]。本协议栈的实现作了如下裁减:

⑴IP模块:不支持数据分片,不支持数据包转发,不支持IPv6移动功能,不支持部分IPv6的扩展报头。

⑵ICMPv6模块:支持信息报文中的请求和应答报文,支持错误报文中的目的不可达和超时报文。

⑶邻居发现模块:支持地址解析、重复性探测,省略了路由功能。

⑷TCP模块:支持多个连接,简化滑动窗口,实现快速重传、慢启动与拥塞避免算法的TCP可靠性机制;约减掉半关闭,紧急指针,大部分TCP选项等。

协议栈的层次结构如图1所示。采用独立于网络层的方式,IPv4协议和IPv6协议分开实现,条理清楚,易于裁减,同时不会增加太多代码空间。

上层应用(HTTP)

TCP

ICMPv4ICMPv6

ARPIPv4IPv6

网络驱动

3协议栈的实现

3.1内存管理

内存管理主要是针对协议栈内部缓冲区的管理。为了胜任任意大小报文的处理,并且能够达到比较高的处理效率,在这里定义了两种缓冲区实现机制:固定长度缓冲区(pbuf_pool)和变长度缓冲区(pbuf_ram)。pbuf_pool主要适合于网络设备驱动,存放从网卡接收的数据。 pbuf_ram根据数据的大小动态的分配缓冲区,如协议的报头空间。

在这里对存储空间的申请做了一定改进。由于发送数据时很难确定各层协议头部需要多大的内存空间,特别是IPv6报文可以包含若干个扩展头,所以只申请基本头部的内存空间,在使用中动态调整的可能性就会很大,使得系统的效率降低。在这里提出了一种优化方法,根据局部性原理,通常情况下一个连接在局部时间范围内需要网络层提供相同功能的概率非常大,所以在该连接的TCP_PCB控制块中增加一个变量num,用于记录上次通信时IPv6协议头所使用的字节数,并且此变量可以被网络层的函数进行修改。当传输层下次申请pbuf时,就参考这个值。如果所需的存储空间比此值大,就需重新申请能满足要求的存储空间,同时修改num的值,并作为下一次申请的参考。

3.2网络接口的实现

网络接口层在设计上主要考虑下面几个目标:⑴向协议层提供一个统一的网络通信接口,能够将上层协议模块与具体的网络接口硬件隔离开来,以利于向不同操作系统的移植;⑵支持一个网络接口配置多个IP地址的功能,因为IPv6一个接口的IP地址包括本地链路、本地站点和全局三类地址;⑶支持多播报文的收发,提供动态的多播IP与多播MAC地址的映射服务;⑷提供较好的通信性能等。

针对上述目标,设计了如下的网络接口控制结构:

struct netif {

struct netif *next; /*指向下一个netif结构的指针*/

netif_ipaddr *iplist; /*指向接口的ip地址链的首指针*/

char name[2]; /*接口名称*/

err_t (* input)(struct pbuf *p, struct netif *); /*接口输入函数指针*/

err_t (* output)(struct netif *, struct pbuf *p,netif_addr *); /*接口输出函数指针*/

err_t (* linkoutput)(struct netif *, struct pbuf *p); /*链路层输出函数指针*/

void *state; /*指向接口的状态信息*/

mac_addr netifmacaddr; /*接口的MAC地址*/

netif_multi *multilist; /*本接口的MAC多播地址链首指针*/

┊ /*省略了部分信息 */

};

网络接口层是协议栈与下层网络设备驱动程序之间的接口,同时支持IPv4报文和IPv6报文,通过判断帧的类型字段,把接收到的不同类型的报文交给不同的协议模块进行处理。


3.3 IPv6模块

IPv6[2]模块主要包括两部分的功能,一是负责从网络接口层接收IPv6数据包,对数据包进行一定的处理后发送给上层处理模块(TCP或ICMPv6)。二是从上层接收数据,进行报文的选路,封装IPv6报头后将数据报发送给网络接口层。

3.3.1 ICMPv6[3]的简化分析

⑴ICMPv6信息报文

嵌入式设备只需作为Ping的接收端,所以不需要发送回显请求报文和处理回显应答报文。为了让客户端可以测试网络状态以及测试使用,必须支持接收请求报文和发送相应的应答报文。

⑵ICMPv6错误报文

由于嵌入式设备不会作为路由转发设备,所以需要实现发送端口不可达报文,同时要支持超时报文通告对端超时错误。在BSD中,IP层没有发送参数问题报文, ICMPv6无需支持处理参数问题报文。

3.3.2邻居发现协议(NDP)的简化分析

NDP[4]是IPv6协议的一个基本组成部分,它用于地址解析、邻居发现以及路由器及网络参数发现。本协议栈不支持路由功能,所以无需实现发送路由器通告报文,但必须接受路由器通告报文,以完成路由发现功能。同时支持邻居通告和邻居请求报文的接收和发送,以实现地址解析和重复探测。

3.4 TCP模块

在TCP之上实现有限的WEB服务,可以对该协议的实现机制作相应的简化及优化。

3.4.1 TCP模块的扩展

TCP对IPv4和IPv6报文的处理过程没有任何的不同,但是由于IPv4和IPv6地址结构不同,需要对使用IP地址的部分进行扩展。

⑴数据结构扩展

PCB是用来记录每个TCP连接状态的,包括本地IP地址和远程IP地址,扩展时使用union结构添加IPv6地址,同时添加标识位区别连接。

⑵操作扩展

在TCP处理过程中包括输入时对IP地址和端口号的匹配,输出时校验和的计算和路由的查找。由于对IPv4和IPv6报文调用相同的处理函数,需要在实现时在这几个函数的处理过程中加入对相应PCB中标识位的判断。

3.4.2 简化TCP状态机

TCP的面向连接和可靠性传输等特性决定了每一个标准的TCP状态机庞大而且复杂,对于嵌入式应用,可以根据需要进行简化。

建立连接分为主动打开和被动打开,本协议栈设计作为监听状态的服务器端,仅实现被动打开。在设计中去掉了CLOSED状态,让它一开始就处于LISTEN状态,等待对方发起连接。

断开连接分为主动断开和被动断开,从安全性的角度考虑,本设计仅实现主动断开连接。当服务器发送完数据时,向客户机发送关闭连接请求。

通过以上分析,根据特定的应用不失一般性的裁减掉复杂和冗余的机制,除去标准状态机中的客户端部分,简化连接的建立和关闭过程,就得到如图2所示的简化的TCP状态机模型。


图2 简化TCP有限状态机


图3 滑动窗口示意图

3.4.3 简化的窗口机制

标准的TCP协议使用慢启动的滑动窗口机制[5],它允许发送方在等待一个确认之前发送多个窗口。其确认是一种批量的确认,处理器要对多个数据报连续传输进行维护和处理,困难较大。

而滑动窗口的一个极限情况,是只使用单个窗口,这就变成了一种简单确认的处理方法。只是对于单个数据报的发送和确认,虽然节约了系统的资源,也使维护更加方便,但是却降低了效率。

系统采用了一个折中的办法,适当调整窗口的大小,限制连续发送报文段的个数来实现了一个简化的窗口机制,如图3所示。在这里,设置窗口大小(snd_wnd)为4个最大报文段长度(MSS),可以适当提高数据传输效率。

4 协议栈的移植和测试

在完成双协议栈的设计调试后,将此协议栈移植到基于ARM7TDMI核的AT91M40800开发板上,使用其中内嵌的10Mbps以太网控制器 RTL8019AS作为网络接口。在该平台上实现了一个简单的Web Server。通过构建提供IPv4地址和IPv6地址访问的网络拓扑结构进行测试,该双协议栈运行稳定、正常。

同时,在相同环境下将此协议栈与开源的协议栈LwIP作了吞吐率性能方面的比较,如图4所示。可知,本协议栈有较好的吞吐率,在连接数达到3条以后,平均吞吐率达到了460kB/s。


图4 协议栈吞吐率比较

5 结语

本文主要介绍了一种嵌入式双协议栈的实现,实践证明它是一个符合TCP/IP协议规范的,高性能,低开销,可移植的IPv4/IPv6双协议栈。本协议栈仅实现了基本的IPv4和IPv6通信功能,还有需多需要改进和增强的地方,扩展IPv6的移动功能是此协议栈下一步的研究重点。

本文作者创新点:嵌入式双协议栈的实现独立于操作系统内核和硬件平台。设计了具有较高处理效率的缓冲区管理机制,对IPv6功能模块进行了裁减,对TCP模块中的运行状态机和滑动窗口机制进行了简化。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

电力线通信(Power Line Communication,英文简称PLC)技术是指利用电力线传输数据和媒体信号的一种通信方式 [1] 。该技术是把载有信息的高频加载于电流然后用电线传输接收信息的适配器再把高频从电流中...

关键字: 电力线通信 网络接口

业内消息,近日广州电信宣布自 10 月 1 日起不再为新装普通宽带用户及存量私网双栈用户提供直接转动态公网 IPv4 地址服务。

关键字: IPv4 IPv6

据业内消息,由国家电网智能电网研究院有限公司(国网智研院)牵头提交的标准提案 “基于 IPv6 转发平面的分段路由(SRv6)网络性能监测方法”已正式获得瑞士日内瓦国际电信联盟批准立项。

关键字: 国家电网 智研院 IPv6 分段路由

据 21ic 业内获悉,近日八部门(工信部、网信办、发改委、教育部、交运部、中国人民银行、国资委、国家能源局)联合发布《关于推进 IPv6 技术演进和应用创新发展的实施意见》,文件表示要推进 IPv6 技术演进和应用创新...

关键字: 工信部 网信办 IPv6

根据国家 IPv6 发展监测平台的公开统计数据显示,上个月国内移动网络 IPv6 占比首次突破 50%,IPv6 流量首次超越 IPv4,说明国内移动网络 IPv6 的发展规模达到了一个标志性的阶段。

关键字: IPv6 IPv4

未来网络技术是各行业数字化转型的重要驱动力量,随着5G、物联网、AI等技术的应用走入深水区,业务对网络的质量成本、响应速度、运维管理提出了更严苛的要求。IP和光技术的不断发展,使得IPv6技术的拓展性和适应性与光技术的底...

关键字: 新华三 IPv6 网络

中东迪拜2022年10月13日 /美通社/ -- 在华为全联接大会2022迪拜站“深耕油气数字化,助推多场景智慧化进程”主题论坛上,华为企业BG油气系统部首席代表李阳明提出,数字技术是实现“向数据要石油、向智能要发展”的...

关键字: 华为 数字化 网络架构 IPv6

济南2022年9月27日 /美通社/ -- 8月24日,2022无锡创建"IPv6+"创新之城启动仪式暨互联网大会在无锡市院士小镇举办。中国工程院院士、推进IPv6规模部署专家委员会主任邬贺铨、江苏省...

关键字: 互联网 TOP 大数据 IPv6

9月9日,全球IPv6峰会如期举行,本次会议汇聚全球顶尖产业专家,分享行业动态、探讨前沿趋势和应用部署,共研IPv6下一代互联网新技术、新生态。紫光股份旗下新华三集团受邀出席,并从IPv6发展趋势洞察、行业应用、技术落地...

关键字: 新华三 IPv6 互联网

作为全球最早布局NB-IoT(窄带互联网)业务的运营商之一,中国电信NB-IoT连接规模超1.6亿,是全球首个NB-IoT连接数破亿的运营商,并且中国电信在物联网领域打造了一个又一个标杆案例,为物联网产业应用落地注入新动...

关键字: 物联网 天翼物联 IPv6
关闭
关闭