amobbs.com 阿莫电子技术论坛

标题: 分享个ucos tcpip协议栈的诡异情况供大家了解 [打印本页]

作者: honami520    时间: 2020-3-21 15:26
标题: 分享个ucos tcpip协议栈的诡异情况供大家了解
最近ucos以及它的绝大部分组件都全部开源了。作为老牌RTOS,作为一个上过火星的操作系统。后面估计也会有不少朋友会重新使用这个历史悠久的RTOS。
那么,作为ucos的网络协议栈组件的uc tcpip,我有近1年的使用经验。我是在zynq上面使用ucos和uc tcpip的,在此之前它是以lib的形式提供的。

下面我给大家分享一个诡异的使用情况供大家了解。
我们的设备已经陆续研发1年,在这1年中,网络设备都是正常使用的,但是在1月底的时候。因为小批量的,于是几十台设备放到一起运行。
几次意外事件发现,当服务器断网后一段时间再恢复后,总会有些设备和服务器断开连接,必须断电重启。

最近我们使用十台设备以及多个交换机、路由器,用各种组网的形式,找出了这个问题出现的情况了。
再服务器于多级交换机和设备连接的时候,如果服务器所处的位置在拓扑图里面比设备要低的时候,就会出现这种诡异的情况 “拔掉服务器的网线,然后十台设备会在10分钟左右陆续出现ping不通,30分钟后基本都ping不通

如果使用其他的网络拓扑结构,那么所有的异常情况,不管是怎么操作,设备都会一切正常,很耐操。只有在上面那种情况下才会出现。
感觉就是uc tcpip在这种结构下,底层的程序死掉了。连ping都ping不通。由于这个是lib文件的。所以也没法验证这个时候它的底层2个线程里面到底是怎么回事。所有的网络操作返回值都说是正常的。

所以大家要注意了,当然你们运气好的是这个uc tcpip现在已经开源了。你们要是运气不好遇到了类似的情况还有机会解决。
我们这边准备改成lwip了。也不知道lwip会不会出现什么诡异的问题。至少半个月的工作量。
作者: wye11083    时间: 2020-3-21 17:26
都zynq了干吗不上linux。。好歹驱动程序强壮度完全不是一个量级的。
作者: honami520    时间: 2020-3-21 17:40
是为了加快产品开发。如果一开始多花点时间上linux,现在可能就根本没有这些破事了。中间开发确实也很顺利很快。中间开发了3个版本。分别用于不同场合。
这一代的才发现这种问题。
作者: huchunlei    时间: 2020-3-21 18:03
谢谢提醒,最近也准备把 uc-tcp/ip 用起来。
作者: ddcour    时间: 2020-3-21 18:37
上过火星的ucos组件比不上一直开源的lwip么?
作者: guxingganyue    时间: 2020-3-21 22:19
如果服务器所处的位置在拓扑图里面比设备要低的时候  
这个 低 怎么理解啊
作者: honami520    时间: 2020-3-21 22:39
guxingganyue 发表于 2020-3-21 22:19
如果服务器所处的位置在拓扑图里面比设备要低的时候  
这个 低 怎么理解啊 ...

好比1级交换机下面挂2个交换机。然后交换机下面再挂2个交换机。然后再挂2个交换机。服务器在最下面。设备放在上面的交换机。
这个时候就会出问题。

如果服务器所处交换机等级比所有设备都高,就没有任何问题。
作者: honami520    时间: 2020-3-21 22:40
ddcour 发表于 2020-3-21 18:37
上过火星的ucos组件比不上一直开源的lwip么?

ucos上过火星,但是uc tcpip不一定上过啊。
作者: xjmlfm1    时间: 2020-3-21 22:41
握个爪,我们用RTX+TCPnet做一款产品也开发了一年多了,最近也是一个网络问题搞不定,搞不好也要换lwIP了,悲催。
作者: guxingganyue    时间: 2020-3-22 11:22
honami520 发表于 2020-3-21 22:39
好比1级交换机下面挂2个交换机。然后交换机下面再挂2个交换机。然后再挂2个交换机。服务器在最下面。设备 ...

看看我理解的对不,从下图看,设备是不知道自己所处的层级关系的,交换机也只做数据按端口转发,拓扑结构改变后数据转发方向(端口)改变,这么看和设备没关系,但是呢你这里出现了问题,可以先从设备失联后抓包分析下,或者打开uc tcp ip的调试输出日志(如果有的话),再看看失联后输出的是什么。。。。。。。一般情况下都是自己的问题或者配置不对造成的,这是我用lwip的得到教训。
[attach]506134[/attach]
作者: LCH201328    时间: 2020-3-22 11:42
我现在裸机的程序用网络的都是用自己写的协议栈(目前只有ICMP,ARP,UDP),比较好把控,在STM32平台和 ZYNQ7000平台都能稳定地运行。
作者: aaabbbad    时间: 2020-3-22 15:30
xjmlfm1 发表于 2020-3-21 22:41
握个爪,我们用RTX+TCPnet做一款产品也开发了一年多了,最近也是一个网络问题搞不定,搞不好也要换lwIP了, ...

能说说具体什么问题吗,刚开始使用RLNET,好怕以后踩到这个坑……
作者: youkebing    时间: 2020-3-22 16:58
guxingganyue 发表于 2020-3-22 11:22
看看我理解的对不,从下图看,设备是不知道自己所处的层级关系的,交换机也只做数据按端口转发,拓扑结构 ...

这类我还是建议抓包看看
作者: saccapanna    时间: 2020-3-22 17:11
LWIP目前现场使用很稳定,如果在家里的时候就做过大量测试,其实也有一些坑需要自己填的。主要是存储空间分配要吃透。还有一些阻塞死的问题也与空间分配有关。做好链接异常检测和重连机制。目前现场网络异常重连很稳定。
作者: rom    时间: 2020-3-22 17:40
guxingganyue 发表于 2020-3-22 11:22
看看我理解的对不,从下图看,设备是不知道自己所处的层级关系的,交换机也只做数据按端口转发,拓扑结构 ...

看几层的,二层交换机不改变端口也不改变MAC地址,级联也不变MAC地址的吧,三层交换机会变MAC,内网NAT会变端口
作者: 硬邦邦    时间: 2020-3-22 18:39
感觉LWIP真香。新版有很多应用协议支持,拿来就用
作者: gongxd    时间: 2020-3-22 19:35
高稳定要求的考虑UDP自定义协议吧,就类似串口
作者: greenwoods    时间: 2020-3-22 20:32
    嵌入式的设备使用简化的lwip协议,也会出现过10几分钟后,无法ping通的情况,后来通过wareshark分析,发现在主机每隔十几分钟更新arp缓存时,设备无法回应arp的请求,就无法ping通了。一直没有找到移植协议的问题,后来发现通过arp 设置静态的缓存,将设备的ip和mac地址写入静态arp表中,就能一直连接,就写了一个批处理命令自动运行,就先这样用了。
作者: honami520    时间: 2020-3-22 21:12
多谢各位的回复,有一些还是比较有启发的。
不过,我的问题和你们的都不一样,我正常通信都是没有问题的。问题是在某种组网模式下,拔掉服务器的网线后,才会出现这样的情况。
作者: fenglove    时间: 2020-3-27 10:27
honami520 发表于 2020-3-22 21:12
多谢各位的回复,有一些还是比较有启发的。
不过,我的问题和你们的都不一样,我正常通信都是没有问题的。 ...

这种特定条件下出现的异常确实很头疼,就是个定时炸弹,如果真解决不了只能换其它网络协议栈。。。。
作者: Edesigner.    时间: 2020-3-27 10:59
一定要用现成的成熟平台
作者: tomyqg    时间: 2020-3-27 11:11
现在开源了,有问题可以直接去github上提,官方应该还会继续维护吧
作者: saccapanna    时间: 2020-3-27 13:51
honami520 发表于 2020-3-22 21:12
多谢各位的回复,有一些还是比较有启发的。
不过,我的问题和你们的都不一样,我正常通信都是没有问题的。 ...

如果已经明确问题触发的地方,就加代码规避吧,重启服务,重新建立连接。不然要去分析底层代码,工作量还是比较大。
作者: fenglove    时间: 2020-3-28 08:20
xjmlfm1 发表于 2020-3-21 22:41
握个爪,我们用RTX+TCPnet做一款产品也开发了一年多了,最近也是一个网络问题搞不定,搞不好也要换lwIP了, ...

TCPnet 啥问题啊,最近要用
作者: kyq_linux    时间: 2020-3-29 01:02
上linux 它不香点吗




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4