请教lwip高手,如何解决lwiplwip 内存溢出解决问题

各行业芯片自主问题备受关注。然而,谁知被冠以“中国特……
日的谷歌I/O大会已经召开完毕,颇具戏剧性的是……
&过去18年来,阿里巴巴的商业做得太成功,掩盖了……
多年前,日本电产新建总公司大楼,日本电产的永守重信董……
物联网、智能硬件、汽车电子、工业4.0等的发展,给传感器……
演讲人:卢柱强时间: 10:00:00
演讲人:曾伟权时间: 10:00:00
演讲人:黄科涛时间: 10:00:00
预算:¥50000预算:¥10000
上海市上海市
基于LWIP的ICMP路由重定向改进
[导读] LWIP是用于嵌入式系统的轻量级开放源码的TCP/IP协议栈。本文在介绍LWIP的整体设计思路的基础上,指出ICMP层的处理机制存在的不足及所带来的开销损失;提出增加自适应路由缓存的改进思路,在不增加处理复杂度的前提下解决了路由重定向问题,最后给出具体的实现方案。
LWIP(Light Weight Internet Protoco1)是瑞士计算机科学院(Swedish Institute of Computer Science)AdamDunkels等人开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LWIP的含义是Light Weight(轻型)IP协议。LWIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。LWIP TCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用。一般它只需要几十KB的RAM和40 KB左右的ROM就可以运行,这使LWIP协议栈适合在小型嵌入式系统中使用。比如,武汉大学的陈杰等把LWIP移植到了一个车辆监控终端系统当中,它可以实时采集车辆信息,在GIS地图上显示出车辆的位置,并根据需要对车辆进行调度;南京大学的方怀东等将LWIP移植到了DSP系统中,这个嵌入式系统用于视频的采集、处理与通信;Astechnix研究院的Jani Monoses将LWIP移植到了RedHats eCos;F1orian Schtdze则宣称他将LWIP移植到了DJGPP/MS―DOS系统以及Visual C++6.O/Win32平台。1 LWIP设计思路&&& 与许多其他的TCP/IP实现一样,LWIP也是以分层的协议为参照来设计实现TCP/IP。大部分的TCP/IP实现在应用层和底层协议层之间进行了严格的划分,底层协议之间可以进行或多或少的交叉存取;而LWIP在应用层与低层协议则使用了内存共享这种比较松散的通信机制。每一个协议作为一个模块被实现。LWIP采取将所有协议驻留在同一个进程的方式,以便独立于操作系统内核之外。应用程序既可以驻留在LWIP的进程中,也可以使用一个单独的进程。应用程序与TCP/IP协议栈通信可以采用两种方法:一种是函数调用,适用于应用程序与LWIP使用同一个进程的情况;另一种是使用更抽象的API。整个协议栈框图如图1所示。本文引用地址: &&& 由于在传输层UDP比TCP协议要简单得多,故仅以TCP为例。&&& 在接收数据方面,链路层的ethernetifinpuIt()函数在收到数据包后,将IP包交付ip_input()函数,ARP包交付etharp_arp_input()函数处理。ip_input()则负责拆解IP包,将ICMP包交付icmp_input()函数处理,将TCP包交付tcp_input处理。tcp_input()负责收到的TCP包,完成TCP头部验证,放入相应的状态链,并交付tcp_process()处理。tcp_process完成TCP无限状态机的处理。tcp_receive()将收到的包放在接收队列中,这些接收队列中的数据最终被应用程序使用。&&& 在发送数据方面,tcp_write()检查是否允许发送数据,当允许发送时,就调用tcp_enqueue()进行发送。tcp_enqueue()将数据放入发送队列。tcp_output()发送数据并在可能时捎带确认。ip_output_if()在接到数据后,填充IP头,交付netif一&output,即etharp_output()处理。etharp_output()判断是单播地址后,交付etharp_query()。etharp_query()填入源、目标mac地址,并最终交付low_level_output()发送。2 ICMP层的不足&&& LWIP在ICMP层的处理流程如图2所示。&&& ICMP模块仅实现了echo_reply包的回应处理,显得过于简单。对小型的协议栈而言,其所在的网络环境相对简单,因而在大多数情况下都是适用的。&&& LWIP一般使用在终端设备上。终端设备所在的情形可作如下的划分:一是单网卡、单网关的情形;二是单网卡、多网关的情形;三是多网卡、多网关的情形。单网卡、单网关的情形是LWIP最适合的情形。因为LWIP本身没有实现路由缓存,单网关的情形恰好不需要路由缓存,因为此情形下网关总是唯一的,下一跳总是不变的。多网卡、多网关的情形可以看成是单网卡、多网关的特殊情形。&&& 在单网卡、多网关的情形下,如果默认网关的下一跳不是最优下一跳,那么终端会收到一个路由重定向ICMP消息,告诉终端去往这个方向上,这个下一跳不是最优的,并给出最优下一跳。这就是所谓的路由重定向。如果终端一直不采用这个最优下一跳,那么每一个发出的非最优下一跳IP包都会收到路由器发来的一个重定向包。LWIP由于没有实现路由缓存,不能记录下网关发来的最优下一跳,故对此消息的处理是忽略。忽略的结果是LWIP源源不断地收到重定向包,这个包会经过数据链路层、IP层,最终在ICMP层被丢弃,引起不必要的开销。3 改进思路&&& 改进的思路是在多网关情况下,处理ICMP包;但LWIP并没有路由缓存功能,所以需要引入路由缓存功能,将此重定向的路由记录下来,以使得下次可使用。为降低内存开销,可以在收到ICMP重定向包的情况下(此时表明是多网关情形,下一跳非最优),再开启缓存,缓存这个下一跳地址。如果一段时间不用这个缓存,则清理出去。当最后一条缓存也被清理后,就关闭缓存功能。这相当于一个自适应功能的路由缓存。在没有重定向消息时,使用原有的LWIP工作方式,不会引起额外的开销;在收到重定向消息时,开启这个缓存功能,以避免重定向消息引起的额外处理开销。当IP包的流向在一定时间内集中于少数几个目的地时,这种方法会特别有效。&&& 对路由缓存的更新,可采用一种类似于LFU(LeastFrequently Used)的算法。为此引入一个计数器,跟踪当前条目被使用的情况,定义MAX_CA_COUNT表示已经过期,O~MAX_CA_COUNT之间的数字表示当前计数值,同时每隔一段时间增加这个计数值。当这个计数值增至MAx_CA_COUNT时,认为这个条目已经过时。同时在插入条目时,可利用这个计数器,总是选用这个数值最大的条目作为被替换对象(LFU算法)。&&& 考虑到LWIP是个小型协议栈,不应设置过于复杂的数据结构及针对此种数据结构的操作,把路由缓存的数据结构定义为结构体数组。数组的条目也不宜过多,以免占用过多资源;另外作为终端设备,在一小段既定的时间内,与其通信的对端具有一定的确定性,一般来说比较少,重定向的条目也比较少,这也为使用较小的数组提供了一个理由。4 实 现&&& 对ICMP层改进的实现代码主要集中于3处。&&& 第一处位于ICMP模块的icmp_input()函数,针对ICMP的消息处理机制,增加了路由重定向的处理。整个函数的处理流程如图3所示。其中虚线框起来的部分为我们增加的功能。首先检查是不是重定向包,然后检验包的完整性和有效性。在这些检查都通过以后,判断缓存功能是否启用。启用与否由一个全局变量控制,默认是关闭的。如果没有启用缓存,则对重定向包进行计数,当达到上限后,启用缓存功能。重定向计数器应当定时归零,这样在一段时间内没有收到足够的重定向包,缓存功能仍然不会开启。这可以把这个重定向计数器加入其他需要定时执行的函数中来实现(比如arp_timer()函数)。开启缓存后,初始化缓存表,将每个条目的老化计数器置为最大,表示已过期,即所有条目都是空闲可用状态。然后启用定时老化功能。LWIP提供sys_timeout(interval,func_handler,arg)函数,用于每隔interval时间后,执行函数func_handler(arg)。定向老化功能可以将函数实现后,向这个sys_timeout()注册来实现。如果缓存已经开启,那么缓存这个收到的重定向包,总是把它插入老化计数器最大的条目,以实现LFU算法。&&& 第二处改进仍然位于ICMP模块,但添加了一个函数rou_cache_timer()。它是一个定时老化路由缓存的函数,用于老化、清理缓存条目,并再次向sys_timeout()注册自己。其函数流程如图4所示。&&& 在所有缓存条目都已过图4定时老化、清理路由缓存期后,应当关闭缓存功能,同时注销定时老化函数。这些功能由rou_cache_timer()来完成。&&& 第三处改进位于数据链路层的etharp_output()函数内。这个函数负责将下一跳的IP地址对应的MAC地址填入。&&& 显然,路由缓存的使用正在于此。在它使用默认网关地址前,应当查询一下缓存中是否已将此路由重定向了。如果确实重定向了,那么在此下一跳IP被使用前,应该替换已重定向的IP。整个函数的流程如图5所示。虚线框起来的部分是加入的功能。&&& 结 语&&& 本设计针对LWIP在多网关情况下不处理重定向IC―MP消息而作出了改进。这种改进包括接收这个ICMP消息并缓存路由信息,为此加入了自适应路由缓存的功能,即只在有重定向消息的时候自动开启缓存,在缓存全部老化后又自动关闭缓存。路由缓存在比较完整的TCP/IP协议栈上都得到实现,但复杂度较高。这里使用一种较简单的路由缓存结构以降低代码量及资源使用开销。本文提出的思路不仅适用于LWIP,在其他的小型协议栈上也适用。
如果你在使用网件的路由器,或许想要购买网件的路由,你可能需要多加小心了。最近,一名安全研究员发现,一些备受欢迎的网件路由器存在严重安全漏洞。如果被黑客利用,这些路由器就会变成僵尸网络的一部分。......关键字:
不同于当前市面上主打各种上网功能的一般Wi-Fi路由器,花生壳蒲公英X系列是以Cloud VPN为亮点,可以创建具有特殊拓扑结构的安全网络,尤其是能够突破网络、运维限制,60秒钟即可快速完成异地虚拟局域网的组建。......关键字:
美国联邦贸易委员会(FTC)给出的通告显示,D-Link的路由器和网络摄像头让数以万计的消费者面临被黑客攻击的风险。......关键字:
近期,针对家庭无线路由器的网络攻击,频频占据安全新闻的头条。Broadband Genie最近委托安全机构对无线路由器进行安全调查,发现超过一半英国用户的路由器采用默认的路由器账户设置,存在被黑客攻击的风险。......关键字:
看到 D-Link 新推出的「云路由器」(Cloud Router)1200 及 2000 大家应该都会被其圆柱形的外观所吸引吧,这样的设计和常见的路由器相比还真是非常的别致呢。这两款支援 802.11n 的产品都可以通过 Android ......关键字:
爱国者今日正式推出移动伴侣,目前有两个型号,分别是 PB716(无线固态硬盘 SSD 型)和 PB726(无线硬盘HDD 型),两者主要的区别是 PB716 的内置存储介质是 SSD 固态硬盘(32G 到 128GB),内置的锂聚合物电池......关键字:
相比起iPhone、iPad、甚至是Mac,苹果的路由器业务都显得太过渺小。现在彭博社给出的报道称,苹果已经终止了自家品牌的路由器研发,解散了无线路由器开发团队,如果事实真是如此的话,那么AirPort Extreme、Time Cap......关键字:
最近小米发布了一款路由器产品,将智能路由的话题又推向了一个高峰。小米、果壳加上之前的极路由、百度、360、迅雷等,几大巨头将在短时间内加入路由大战,不禁大家都在发问:这难道是下一个颠覆商业模式的革命性产......关键字:
我 要 评 论
热门关键词查看: 785|回复: 8
最近在做LWIP移植,遇到点问题,哪位高手指点一下,在线等
主题帖子精华
初级会员, 积分 143, 距离下一级还需 57 积分
在线时间2 小时
最近在移植LWIP,现在电脑通过网线接到无线路由上可以PING通板子也能通过端口号和IP收发数据,但是把网线拔掉电脑通过无线WIFI连接到路由器怎么ping不通了,哪位做过LWIP的移植求指导,困扰了好几天了。(板子通过网线连接到无线路由器上)
回复【4楼】冰冷的游客:
-------------------------------
下载链接:http://www.openedv.com/posts/list/43643.htm
主题帖子精华
在线时间1405 小时
回复【4楼】冰冷的游客:
-------------------------------
下载链接:
开往春天的手扶拖拉机
主题帖子精华
在线时间1405 小时
没遇到过,我的通过电脑通过wifi连接路由器是可以ping通板子的。
开往春天的手扶拖拉机
主题帖子精华
初级会员, 积分 59, 距离下一级还需 141 积分
在线时间6 小时
把路由器配置发上来看看
主题帖子精华
初级会员, 积分 143, 距离下一级还需 57 积分
在线时间2 小时
回复【2楼】zuozhongkai:
---------------------------------
能分享下源码吗
主题帖子精华
初级会员, 积分 143, 距离下一级还需 57 积分
在线时间2 小时
回复【3楼】今时今日:
---------------------------------
怎么发图片啊,路由器设置应该没有错吧,手机能够连接上
主题帖子精华
新手入门, 积分 15, 距离下一级还需 5 积分
在线时间52 小时
从新配置路由器,应该就能解决了。
原子哥是不是又要出黑科技了呀。^_^...
主题帖子精华
初级会员, 积分 143, 距离下一级还需 57 积分
在线时间2 小时
回复【6楼】fanghuiopenedv:
---------------------------------
我再试下
主题帖子精华
初级会员, 积分 143, 距离下一级还需 57 积分
在线时间2 小时
回复【8楼】zuozhongkai:
-----------------------------
谢谢
Powered by请教lwip高手,如何解决lwip内存溢出问题_百度知道
请教lwip高手,如何解决lwip内存溢出问题
我有更好的答案
  lwip&shut和close的区别很大,lwip 是协议线,shut是关闭,close是亲密的。它们的用法如下: lwip 。lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。LwIP是Light Weight (轻型)IP协议,有无操作系统的支持都可以运行。LwIP实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用,它只需十几KB的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端的嵌入式系统中使用。 shut(1)vt.& vi.关闭;闭上;合上;打烊(2)adj.关闭;关门;停业;合拢例句:There&is&a&tendency&to&shut&museums&or&shops&at&a&moment's&notice.&现在博物馆或商店有一种说关就关的趋势。 close(1)adj.亲密的;紧密的;亲近的(2)vt.关;结束;使靠近(3)vi.关闭;关;结束(4)adv.紧密地(5)n.结束例句:(1)I'm&close&with&her.&我和她关系密切。(2)I&had&a&close&relationship&with&my&grandfather.&我和爷爷很亲。
采纳率:63%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。请教!stm32f107上裸跑LwIP的速度测试问题
[问题点数:20分]
请教!stm32f107上裸跑LwIP的速度测试问题
[问题点数:20分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|&&&&Lwip,light weight IP;是由Adam Dunkels 开发的一个小型开源的协议栈;目前已经为全球共同开发的开源协议;支持TCPIP协议族的核心协议;包括:ARP/ICMP/TCP/UDP/IPV4/IPV6/DHCP等;其核心特点是:功能齐全、运行需求的RAM和ROM少;
&&&&所有的功能和性能都可进行裁剪和配置;相关文件为:lwipopts.h
&&&&内部实现支持带操作系统和不带操作系统;核心框架是:外部单线程驱动协议栈状态机;底层使用中断进行数据的接收;
&&&&其提供三种API :1)RAW API 2)lwip API 3)BSD API。其中BSD API就是大家最熟悉的socket API了。Linux和Windows平台中的socket接口都与此大同小异;
将lwip移植到不同的平台主要包括两个部分工作:
MAC+PHY层移植,包括初始化、数据的收发;
应用层框架移植,如操作系统层的线程创建、定时器、消息邮箱;
&&&&硬件:STM32F107 PHY芯片:DM9161AEP
&&&&软件:UCOS-ii&&&&
移植核心点
&&&&ST公司针对STM32F107 不带操作系统版本的LWIP移植版本,文件名为STM32F107_ETH_LwIP,版本为V1.0.0;由于其版本不再更新且与本软件平台不一致,所以不做参考;
&&&&由于STM32F1 STM32F2 STM32F4的以太网驱动都是一致的。所以到ST官网下载stm32cubdf2。其中有LWIP针对FREERTOS的移植;而FREERTOS与UCOS大同小异;所以只要针对其修改应用层框架移植的实现即可;相关代码位于:stm32cubef2\STM32Cube_FW_F2_V1.1.0\Projects\STM322xG_EVAL\Applications\LwIP\LwIP_UDPTCP_Echo_Server_Netconn_RTOS;
&&&&LWIP的代码使用1.4.1版本,可到LWIP官网上下载;也包含在stm32cubef2中;
&&&&移植的理论基础来源于lwip 1.4.1源码包中doc文件夹中的文件;同时官方也有移植到各个平台中的示例,文件为:contrib-1.4.1.zip,到官网上下载即可;
MAC+PHY移植:
& & & & & & & & & & & & 需要修改的文件为:
& & & & & &app_ethernet.c/h
& & & & & &ethernetif.c/h
& & & & & &同时需要将stm32cubef2驱动库中的stm32f2xx_hal_eth.c/h拷贝过来;
& & & & & &以上文件只需要配置好,保证编译没问题,则MAC+PHY层移植完成;
& & & &2. 应用层框架移植:
& & & & & & & & & & & 修改1个文件sys_arch.c,位于stm32cubef2\STM32Cube_FW_F2_V1.1.0\Middlewares\Third_Party\LwIP\system;
&&&&所有的移植即完成;
&&&&STM32Cube_FW_F2_V1.1.0此版本中关于lwip的驱动MAC代码是有bug的,具体表现在当以太网包数量加大时,会出现底层收数据很慢的情况;使用PING命令经常出现TIMEOUT;
此bug在STM32cubeF4中得到解决;相关问题原因描述见参考资料;
核心论文 &&Design and Implementation of the lwIP TCP/IP Stack&& By Adam Dunkels.2001
& & & & &&&lwIP&TCP/IP&stack&demonstration for&STM32F107xx&connectivity&line&microcontrollers && By ST
& & &3. &lwip官方网站https://savannah.nongnu.org/projects/lwip/
阅读(...) 评论()

我要回帖

更多关于 java内存溢出问题 的文章

 

随机推荐