微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > enc28j60+LWIP在复杂网络长时间运行出现问题

enc28j60+LWIP在复杂网络长时间运行出现问题

时间:10-02 整理:3721RD 点击:
该问题出现的时间也不短了,鉴于本渣对网络研究不精,希望网络大神能指点一二
为了详细描述问题,这里交代下设备的使用背景:
公司有一批设备采用的网卡芯片是ENC28J60,使用的网络协议栈是LWIP,
在简单的网络底下运行没有问题(包括带有视频数据包的网络),但在某些网络下使用一段时间就会出问题
例如某场景的网络拓扑图如下:


一开始所有设备都能正常工作,但使用一段时间后就会所有设备都失效,
虽然所有设备不是同时出现问题,但只要有一只出现问题,其他设备都会前赴后继的出问题
经过了一段时间的跟踪之后,终于把问题缩小到设备和路由器之间,目前还不知道网卡的问题还是路由器的问题
本渣使用wireshark抓了2个设备的数据包,一个正常,一个异常,数据内容都比较短
通过比较两个数据包的内容发现设备发送给路由器的数据包都正常:
1、正常设备(192.168.4.194)上传的数据包:


2、异常设备(192.168.4.199)上传的数据包:


通过比较,两者的源IP和目的IP都正常,源MAC地址与目的MAC地址也正常,而且包头的内容也基本一致(除了标识和校验有差别)
基本可以肯定这2台设备的数据包都是合法的!
既然设备到路由的数据包正常,那么我重新抓了路由到光猫的数据包
一般而言数据包经过路由器后,源IP地址会被封装成路由器的IP地址,源MAC地址会被封装成路由器的MAC地址
对于正常的设备来说都没有问题,问题就在于不正常的设备并没有按照上面的法则来做!
这是我抓到异常的设备通过路由器后的数据包:


这里发生了非常神奇的一幕,异常的设备(192.168.4.199)经过路由器后,源MAC地址变成了路由器的MAC地址,但源IP地址并没有改变!
what the fuck!这理论上是不可能的,通过路由器的数据包怎么可能只改变了源MAC而不改变源IP呢?
ps:别问我是怎么抓路由器到光猫的数据包的,带端口镜像的路由器可以抓通过路由器的所有数据包,包括LAN和WAN
搞了很久也没能搞出来,包括把虚拟服务器也设置了,这诡异的问题还在!
本渣只能把问题的范围缩小到这里,至于是路由器的问题还是ENC28J60的问题,本渣已经没能力考究了,恳请各位大佬赐教!

用的什么协议,网络有所谓的心跳包啊

谢谢你的回复!
设备跟服务器通信用的是UDP协议,正常工作时会定时发心跳包到服务器,1分钟内服务器没有响应就重启整个单片机。
不过现在的问题不是出在与服务器通信上,而是出在本地网络,谢谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top