OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 539|回复: 11

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

[复制链接]

  离线 

23

主题

649

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
2974
金钱
2974
注册时间
2015-11-5
在线时间
944 小时
发表于 2017-9-18 23:28:18 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 FreeRTOS 于 2017-9-18 23:26 编辑

该问题出现的时间也不短了,鉴于本渣对网络研究不精,希望网络大神能指点一二

为了详细描述问题,这里交代下设备的使用背景:
公司有一批设备采用的网卡芯片是ENC28J60,使用的网络协议栈是LWIP,
在简单的网络底下运行没有问题(包括带有视频数据包的网络),但在某些网络下使用一段时间就会出问题
例如某场景的网络拓扑图如下:
拓扑图.PNG
一开始所有设备都能正常工作,但使用一段时间后就会所有设备都失效,
虽然所有设备不是同时出现问题,但只要有一只出现问题,其他设备都会前赴后继的出问题
经过了一段时间的跟踪之后,终于把问题缩小到设备和路由器之间,目前还不知道网卡的问题还是路由器的问题
本渣使用wireshark抓了2个设备的数据包,一个正常,一个异常,数据内容都比较短
通过比较两个数据包的内容发现设备发送给路由器的数据包都正常:
1、正常设备(192.168.4.194)上传的数据包:
normal.png
2、异常设备(192.168.4.199)上传的数据包:
abnormal.png
通过比较,两者的源IP和目的IP都正常,源MAC地址与目的MAC地址也正常,而且包头的内容也基本一致(除了标识和校验有差别)
基本可以肯定这2台设备的数据包都是合法的!!!

既然设备到路由的数据包正常,那么我重新抓了路由到光猫的数据包
一般而言数据包经过路由器后,源IP地址会被封装成路由器的IP地址,源MAC地址会被封装成路由器的MAC地址
对于正常的设备来说都没有问题,问题就在于不正常的设备并没有按照上面的法则来做!!!
这是我抓到异常的设备通过路由器后的数据包:
router.png
这里发生了非常神奇的一幕,异常的设备(192.168.4.199)经过路由器后,源MAC地址变成了路由器的MAC地址,但源IP地址并没有改变!!!what the fuck!!!!!!这理论上是不可能的,通过路由器的数据包怎么可能只改变了源MAC而不改变源IP呢????
ps:别问我是怎么抓路由器到光猫的数据包的,带端口镜像的路由器可以抓通过路由器的所有数据包,包括LAN和WAN

搞了很久也没能搞出来,包括把虚拟服务器也设置了,这诡异的问题还在!
本渣只能把问题的范围缩小到这里,至于是路由器的问题还是ENC28J60的问题,本渣已经没能力考究了,恳请各位大佬赐教!!!
@正点原子 @zuozhongkai @八度空间 @aozima
鉴于本论坛没有LWIP的专版,暂时在该版发布,以后开通LWIP专版时再转移





最佳答案

查看完整内容[请看2#楼]

有一点需要纠正下,通过测试另外的两款网卡在路由器复位后仍能正常工作,包括W5500! 前面我提到的W5500也不能正常工作并不准确,当使用W5500替代原本的设备后(IP和MAC与被替换设备一样) W5500一开始是不能正常工作,但几分钟后就恢复正常工作! 找了2周大概找到问题的出现情况了,原因并不在于上层的协议(UDP/TCP) 只有使用企业级路由器时才会有这情况,家用级路由器并不存在这种情况,当企业级路由器复位后,不知为 ...
生活不只有眼前的苟且,还有你看不懂的诗和永远到不了的远方!
回复

使用道具 举报

  离线 

23

主题

649

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
2974
金钱
2974
注册时间
2015-11-5
在线时间
944 小时
 楼主| 发表于 2017-9-18 23:28:19 | 显示全部楼层
本帖最后由 FreeRTOS 于 2017-10-2 22:54 编辑
aozima 发表于 2017-9-25 09:37
楼主的问题找到了没有

有一点需要纠正下,通过测试另外的两款网卡在路由器复位后仍能正常工作,包括W5500!
前面我提到的W5500也不能正常工作并不准确,当使用W5500替代原本的设备后(IP和MAC与被替换设备一样)
W5500一开始是不能正常工作,但几分钟后就恢复正常工作!

找了2周大概找到问题的出现情况了,原因并不在于上层的协议(UDP/TCP)
只有使用企业级路由器时才会有这情况,家用级路由器并不存在这种情况,当企业级路由器复位后,不知为何会把我们的设备排除在网络外,
也就是说路由器会认为这些设备并不是自己管理的,因此会把设备的所有数据包都直接pass到上一层路由。

目前通过测试有一种方法可以让企业级的路由器在复位后重新识别我们的设备,
具体的做法是当设备识别到路由器重启后便立刻重复发送ARP包来通知路由器更新ARP表的信息。
最新版本的LWIP也没有这功能,用户可以通过修改源码让LWIP实现重复发送ARP,由于跟公司签了保密协议具体代码本渣不能提供,希望各位大神谅解







生活不只有眼前的苟且,还有你看不懂的诗和永远到不了的远方!
回复

使用道具 举报

  离线 

482

主题

8万

帖子

30

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
117328
金钱
117328
注册时间
2010-12-1
在线时间
902 小时
发表于 2017-9-19 00:18:51 | 显示全部楼层
帮顶
回复

使用道具 举报

  离线 

3

主题

175

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
370
金钱
370
注册时间
2016-12-31
在线时间
84 小时
发表于 2017-9-19 06:40:21 来自手机 | 显示全部楼层
帮顶!!!
来自: 微社区
回复

使用道具 举报

  离线 

23

主题

649

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
2974
金钱
2974
注册时间
2015-11-5
在线时间
944 小时
 楼主| 发表于 2017-9-19 08:26:19 | 显示全部楼层
生活不只有眼前的苟且,还有你看不懂的诗和永远到不了的远方!
回复

使用道具 举报

  离线 

23

主题

649

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
2974
金钱
2974
注册时间
2015-11-5
在线时间
944 小时
 楼主| 发表于 2017-9-19 08:26:31 | 显示全部楼层

谢谢
生活不只有眼前的苟且,还有你看不懂的诗和永远到不了的远方!
回复

使用道具 举报

  离线 

8

主题

688

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2011-5-23
在线时间
711 小时
发表于 2017-9-19 09:34:54 | 显示全部楼层
本帖最后由 aozima 于 2017-9-19 09:38 编辑

1. NAT转换后,端口号也会发生变化,你这里没有变
2. 请列出正常的设备的包
3. 检查 路由器 的LAN和WAN的IP/mask/gw,特别是netmask的设置,这里如果有 255.255.0.0 就会有问题。
4. 检查设备的  IP/mask/gw,是否有人在错误的ARP攻击或是有多个DHCP server
5. 在设备这级加入PC等其它设备来测试
6. 问题是必现还是偶然? 路由的WAN和LAN的MAC地址一般是不同的,要分别留意。
7. 换个普通路由器,并配置成一样,直接换上去。
回复

使用道具 举报

  离线 

23

主题

649

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
2974
金钱
2974
注册时间
2015-11-5
在线时间
944 小时
 楼主| 发表于 2017-9-19 09:53:04 | 显示全部楼层
aozima 发表于 2017-9-19 09:34
1. NAT转换后,端口号也会发生变化,你这里没有变
2. 请列出正常的设备的包
3. 检查 路由器 的LAN和WAN的 ...

十分感激大神的耐心回复!
1、我忘了当时有没有开通虚拟服务器了,如果开了虚拟服务器端口就没有变,这个我后续跟进下
2、路由器WAN的IP:192.168.1.9,网关:192.168.1.1,子网:255.255.255.0
3、路由器关闭了DHCP功能,设备采用固定IP
4、问题的出现可以认为是必然的,只是出现的时间不定,有时候几天就出现,有时候一个月才出现
下面附上数据包:
wireshark抓包.rar (28.57 KB, 下载次数: 35)
生活不只有眼前的苟且,还有你看不懂的诗和永远到不了的远方!
回复

使用道具 举报

  离线 

8

主题

688

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2011-5-23
在线时间
711 小时
发表于 2017-9-19 10:04:56 | 显示全部楼层
如果开了虚拟服务器端口就没有变

1. 开通了虚拟服务,则只能指向内网的某一个IP。
且内网出去的包是这个端口,也可能出问题。请先关闭这个功能。

2. 只需要外网的端口是固定的即可,可以尝试让设备使用随机端口或绑定其它端口,而不要像现在这样都使用一样的端口。

3. 换个普通路由器,别开这种特殊功能,与虚拟主机或DMZ等,对比结果后再说。
回复

使用道具 举报

  离线 

23

主题

649

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
2974
金钱
2974
注册时间
2015-11-5
在线时间
944 小时
 楼主| 发表于 2017-9-19 11:17:19 | 显示全部楼层
aozima 发表于 2017-9-19 10:04
1. 开通了虚拟服务,则只能指向内网的某一个IP。
且内网出去的包是这个端口,也可能出问题。请先关闭这 ...

我也不太懂路由器的设置,源端口不要求固定,目的端口(服务器的端口)固定就好
同事建议路由器每天早上4点重启,也有打算换个普通的路由器试下看有没有问题
还是十分感谢大神的耐心解答,有问题再向你请教吧,谢了
生活不只有眼前的苟且,还有你看不懂的诗和永远到不了的远方!
回复

使用道具 举报

  离线 

8

主题

688

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2011-5-23
在线时间
711 小时
发表于 2017-9-25 09:37:13 | 显示全部楼层
楼主的问题找到了没有
回复

使用道具 举报

  离线 

23

主题

649

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
2974
金钱
2974
注册时间
2015-11-5
在线时间
944 小时
 楼主| 发表于 2017-9-26 08:44:25 | 显示全部楼层
aozima 发表于 2017-9-25 09:37
楼主的问题找到了没有

上周用W5500对比过,在有问题的网络下5500一样有问题,后来抓过5500的数据包除了ARP包的频率不一样外,暂时还没发现有什么特别的。

公司有一批正在使用的旧机子是买回来贴牌的,这批机子在网络出问题时也会失灵,但听同事说这些机子只要断电重启就能恢复,我打算这两天对这批机子抓下包看能不能找到有用的数据包
生活不只有眼前的苟且,还有你看不懂的诗和永远到不了的远方!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-11-23 04:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */