Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 合同模板 > LWIP协议栈可靠性配置分析研究

LWIP协议栈可靠性配置分析研究

收藏

本作品内容为LWIP协议栈可靠性配置分析研究,格式为 docx ,大小 221260 KB ,页数为 8页

LWIP协议栈可靠性配置分析研究


('LWIP协议栈可靠性配置分析研究摘要:随着工业控制实时性要求提高,以太网接口通讯在工业的应用也越来越多,以太网技术的广泛使用,为自动化技术带来了深刻变革。工业嵌入式产品集成以太网接口,但由于嵌入式产品本身硬件资源有限,普遍移植占用资源较少的LWIP协议栈,在实际应用中会碰到通讯配置的问题,特别是大数据冲击的条件下的协议栈配置也会尤为关键。本文通过对LWIP协议栈的工作流程及大数据冲击机理分析,提出针对性的可靠性优化方案。关键词:以太网;LWIP;大数据冲击Abstract:Withtheimprovementofreal-timerequirementsofindustrialcontrol,theapplicationofEthernetinterfacecommunicationinindustryisincreasing.ThewideuseofEthernettechnologyhasbroughtprofoundchangestoautomationtechnology.IndustrialembeddedproductsintegrateEthernetinterfaces.However,duetothelimitedhardwareresourcesofembeddedproducts,itiscommontotransplanttheLWIPprotocolstackwithlessresources,whichwillmeettheproblemofcommunicationconfigurationinpracticalapplication,especiallytheprotocolstackconfigurationundertheimpactofbigdatawillbeparticularlycritical.BasedontheanalysisofLWIPprotocolstackworkflowandbigdataimpactmechanism,thispaperproposesatargetedreliabilityoptimizationscheme.Keywords:Ethernet;LWIP;BigDataImpact一、引言LwIP是一套用于嵌入式系统的开放源码的轻型TCP/IP协议栈,它实现了较为完备的IP、ICMP、UDP、TCP协议,具有超时时间估计、快速恢复和重发、窗口调整等功能。LwIP在保持协议主要功能的基础上减少对RAM和ROM的占用,一般它只需要几十K的RAM和40K左右的ROM就可以运行。在LwIP移植应用时,在总线数据报文量不多且数据帧长度少于512bytes时,保持协议栈原有通用配置就可以满足几个设备间正常通讯,但当众多设备同时接入交换机形成的局域网,由于总线数据包及数据帧长度增加,会导致嵌入式设备通讯响应受影响,其中在实际测试过程中并且存在以下两种数据状态时,将导致嵌入式以太网设备出现通讯失败:①当总线数据达到4万包/分钟,数据单包协达到1472bytes/帧;②当总线数据达到4万包/分钟,数据分包前达到4806bytes。二、原因分析1、以太网接口工作过程如下:空调机组采用LWIPTCP/IP协议栈和芯片自带以太网控制器进行上位机通讯,整个系统TCP/IP协议栈各层的报文封装与拆封如下图1所示,当设备的网卡接收到某个数据包后,它会将其放置在网卡的接收缓存中后产生一个中断,然后释放一个信号量通知网卡接收线程去处理这些接收的数据,然后将数据这些数据封装成消息,投递到tcpip_mbox邮箱中,LwIP内核线程得到这个消息,就对消息进行解析,根据消息中数据包类型进行处理:在链路层,实际上是调用ethernet_input()函数决定是否递交到IP层,如果是ARP包,内核就不会递交给IP层,而是更新ARP缓存表,对于IP数据包则通过ip4_input()函数递交给IP层去处理。在网络层,LwIP内核就会去处理这个IP报文,首先内核要确认这些数据是否是给自己的(通过判断ip地址,包括组播或者单播),并且还要保证这些数据的格式必须是正确的;如不是给本地的数据,IP层还要将这些数据进行转发或者丢弃,当然,如果对于分片的数据,IP层还需要负责将其组装起来,并且校验组装完成的数据是否完整,如果不完整则丢弃它,当数据是正确的,对于UDP报文,IP层就会调用udp_input()函数将报文数据递交给传输层处理。在传输层,LwIP内核会去处理这个UDP报文,UDP协议会对报文进行一些合法性的检测,如果确认了这个报文是合法的,那么就遍历UDP控制块链表,在这些控制块中找到对应的端口,然后递交到应用层,首先要判断本地端口号、本地IP地址与报文中的目标端口号、目标IP地址是否匹配,如果匹配就说明这个报文是给本地的,然后调用用户的回调函数recv_udp()将受到的数据传递给上层应用。而如果找不到对应的端口,内核将返回一个错误给源主机,然后丢弃报文。根据以上的数据接收过程分析,如果空调机组在接收控制命令时,程序开辟的内存池大小与总线上的数据量匹配不合适时,就会造成新的数据到来时,内核无法申请到内存池,此时会出现空调无法控制的现象。注:由于以太网协议规范规定单帧数据最大为1500byte,所以对于UDP协议的报文数据单帧最大长度为1500-20(IP报文头)-8(UDP报文头)=1472byte。当应用层UDP单帧数据长度大于1472byte时,内核会在网络层根据程序设置的最大分片数量将数据分片为多帧后,再通过链路层封包后发出去;同理,接收数据时,被拆分为多片的数据会在网络层进行重组后,再通过传输层解析后传递给应用层,当接收到的数据分片数量大于程序中设置的最大允许分片值时,内核会直接丢弃数据,释放对应内存池。图1TCP/IP协议栈各层的报文封装与拆封2、UDP控制命令接收过程分析如下:(1)PBUF_POOL类型pbuf缓冲池在协议栈初始化时设置,在内存中申请一块静态存储区,初始化成pbuf链表。分配该类型pbuf时,从缓冲池首部根据申请的大小分配一个或多个pbuf。图2Pbuf空链表图(2)链路层接收到总线上的UDP数据后,会产生中断信号通知内核,此时内核会按照帧数据大小从步骤(1)生成的单向链表中申请空间,用于存储通讯数据;(3)然后内核会将链路层的数据按照以太网协议解析后传送到网络层使用IP协议进行解析,此时网络层会对数据帧IP报文头进行解析:对于不是技术协议要求的IP地址的数据进行丢弃,释放内存;对于报文头格式不正确的数据进行丢弃,释放内存;对于需要合并的数据进行重组,重组失败的数据进行丢弃,释放内存,最后再将符合条件的数据传送到传输层;(4)传输层会按照UDP协议对数据包进行解析,不是空调报文端口、IP地址的数据进行丢弃,释放内存,将符合条件的数据传输到应用层进行处理,然后释放该数据包对应的数据块。3、通讯故障现象原因分析为:①当总线数据达到4万包/分钟,数据单包协达到1472bytes/帧:程序上电初始化建立通讯后,会按照图3设定值生成一个由6个512bytes大小的pbuf数据块组成的空单向链表,用于进行通讯数据存储。因此单包需要1472bytes的内存空间,Pool的方式就会给你分配三个512bytes的内存块(一共1536bytes)。图3Pbuf设定值因此6个内存块最多缓存两包1472bytes数据帧,当总线上短时间内存在大量的1472bytes数据包冲击情况下会导致程序来不及释放内存,最终导致协议栈异常无法发送数据。通过开展模拟大量1472bytes长度数据冲击测试,该现象可以复现。②当总线数据达到4万包/分钟,数据分包前达到4806bytes:在PBUF_POOL_SIZE=12的情况下,当总线上存在大量单帧最大数据长度为4806个byte的数据,此时发送方会将此数据帧拆分成4帧数据发到总线上,即第一帧1472byte,第二帧1472byte,第三帧1472byte,第四帧390byte,内核接收到前三帧数据后会分别申(1472/512)+(1472%512)/512=3个pbuf数据块,各组成一个单向链表,如图4,接收第四帧数据后会申请(390%512)/512=1个pbuf数据块;此时内核还剩12-10=2个pbuf空数据块,由于程序中允许的最大分片数量为10,所以在网络层会根据IP报文头数据将3/3/3/1共10个pbuf数据块合并成一个完整的帧数据传递给传输层,在传输层会按照UDP协议提取到完整的4806bytes的数据帧,判断出不是空调所需要的控制数据进行丢弃,并释放10个pbuf数据块。图4第1/2/3帧pbuf单链表图同理,故障现象是由于通讯接口板软件未筛除IP报文包长度,在总线上大量出现4806byte数据报文时占用的10个pbuf数据块还没有来得及释放,后面新的数据申请pbuf数据块时由于无法申请到合适大小的pbuf数据块导致数据被丢弃,从而出现上位机无法控制设备的现象。通过开展模拟大量4806byte长度数据冲击测试,该现象可以复现。三、解决措施1、更改方案:为保证嵌入式通讯模块的数据转换效率,需要根据模块应用需求,配置合适数量的pbuf数据块并增加通讯数据报文长度筛除,例如某一产品实际只需用到20bytes,故本方案调整程序所允许的分片最大数量IP_REASS_MAX_PBUFS=1,如总线上接收到数据分片数量超过1片(512bytes)就可确定为非本模块的数据报文,直接在网络层过滤掉该数据报文并释放对应的内存池,程序中设定了12个512byte大小的pbuf数据,可以满足各种极限条件的数据收发存储要求。图5修改后IP_REASS_MAX_PBUFS值2、测试验证通讯压力测试,通过压力测试工具模拟下发长包数据(10000bytes)、短包数据(300bytes)及长短包数据混合等在100Mbps数据流冲击,如图6,通讯接口板均能正常接收上位机的发送的控制指令,同时总线上也能读取到通讯接口板定时发送的数据报文。图6带宽压力测试四、总结通过以上分析可以了解以太网数据的分包和Lwip中IP数据重组及分片。在实际协议栈移植过程中,要根据产品功能的实际要求,对数据的分包和分片进行配置,这样既可以保证在有效硬件资源的条件下充分提升软件处理数据解析的效率。在opt.h里有所有的Lwip默认配置,另外lwipopts.h中是应用程序中对lwip协议栈的配置。协议栈首先会去检查lwipopts.h中的参数,没有定义的再去检查opt.h。最后再介绍几个关于IP分片重组相关的参数:①IP_REASSEMBLY和IP_FRAG:如果需要支持IP重组和分片功能,这两个宏一定要设置为1。②IP_REASS_MAXAGE:IP分片包的生存时间,超过这个时间还没有收到所有的IP分片,则重组失败,已经收到的IP分片也将从协议栈中删除。以秒为单位。③MEMP_NUM_REASSDATA:可以同时进行IP重组的IP数据报的个数。这个数值是指整个IP数据报的个数,不是指IP分片的个数。④IP_REASS_MAX_PBUFS:指在ip_reassdata链表中挂接的,等待重组的pbuf的总个数。⑤MEMP_NUM_FRAG_PBUF:可同时发送的IP分片个数。⑥MEM_SIZE:heap大小,发送的数据越大,这个size就需要越大。⑦PBUF_POOL_SIZE:pbufpool中buffer的个数,跟接收数据的大小有关。⑧PBUF_POOL_BUFSIZE:pbufpool中每个buffer的大小,跟接收数据的大小有关。参考文献:[1]LwIP在微控制系统中的移植与应用[J].薛建彬,郭燕波,许洋,毕玉,王斌.数字技术与应用.2016(10)[2]基于LwIP协议栈的嵌入式网络控制系统设计[J].张超,王志超,林岩.单片机与嵌入式系统应用.2019(02)[3]lwip协议栈的移植[J].张青青.信息系统工程.2015(08)[4]LwIP协议栈的pbuf结构探索与研究[J].徐健,孙庆.单片机与嵌入式系统应用2018,18(02)[5]嵌入式LwIP协议栈的移植与测试研究[J].王祖云,杨思国,王建伟,邓忠华.计算机与数字工程.2014(02)[6]基于STM32与Lwip协议栈的高效通信技术[J].李晨,蒋林,刘思平.电子技术与软件工程.2019(19)第页共7页',)


  • 编号:1700665515
  • 分类:合同模板
  • 软件: wps,office word
  • 大小:8页
  • 格式:docx
  • 风格:商务
  • PPT页数:221260 KB
  • 标签:

广告位推荐

相关合同模板更多>