安装的一个带网口的设备通过路由器经局域网连接到服务器,在服务器上PING该设备时始终没反应,后来经在设备端截取数据包发现一个奇怪的事情,服务器PING命令发到路由器后,路由器首先需要发 ARP 命令获得设备的MAC地址,问题就出在这个 ARP命令上,截取的ARP包如下:
0000 ff ff ff ff ff ff 00 16 4d 26 ad 61 08 06 00 01 ........M&.a....
0010 08 00 06 04 00 01 00 16 4d 26 ad 61 84 ef 7c a1 ........M&.a..|.
0020 00 00 00 00 00 00 84 ef 7c a3 00 00 00 00 00 00 ........|.......
0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
ARP包有效数据只有42个,另加18个字节的填充,最后是4个字节的CRC,而这个包的最后4字节CRC居然为 00 00 00 00 !(网络数据截取工具也指示该CRC错误)设备的网络芯片具有硬件CRC功能,软件里设置了自动过滤掉CRC错误的包,结果就导致设备对这个CRC错误的ARP命令不响应!
可回头一想,这个路由器是个成熟的设备啊,不应该出现这种低级错误吧?我没研究过路由器,不知道象这种CRC不对的数据包,是由路由器有意为之(比如人为可设置发CRC为0的ARP包?以应付某些恶意攻击?),还是就是路由器的BUG?
请兄弟们指点! |