背景描述 :最近在进行带有网口功能的FPGA编程,数据包的封装过程由FPGA完成,FPGA通过10G网线与一台服务器相连。在调试过程中,通过服务器上的Wireshark抓包来看包的内容是否正确。
问题描述: 可以确定数据包已被发送方发出,而接收方的Wireshark无法抓取到数据包
解决方法:
1、如果所发包的目的地址不是接收方的IP,那么需要开启混杂模式。通过下图的流程开启混杂模式即可:
- 点击设置按钮:
- 勾选开启混杂模式:
2、确保数据包的正确
首先需要知道的是,Wireshark可以接收到IP头和UDP头的校验和错误的数据包。但是并不是说数据包头随便写都能被Wireshark抓到。
网卡检查以太网帧并解开帧头、帧尾,再向上层递交数据包。如果以太网帧的前导码、长度、CRC校验出错都会导致网卡丢帧。
其中前导码即为7字节0x55和1字节d5构成;CRC校验采取CRC-32的校验方式;以太网帧长并没有显式的表示,但是在以太网帧的开头和结尾都各有一字节的0xfb,其间的长度即为以太网帧长。
我没有收到包的原因即是数据帧长错误,在IP头中有一个字段用于表示整个包的长度(IP头及IP数据),而以太网帧头为固定14字节,所以说数据帧长需要与IP头数据长度和UDP头数据长度对应。
总的来说,当包的结构正确时,网卡或者Wireshark可以正确解析出每一个字段的意义,所以当可以确定发送方已发出包,而接收方没有收到时,需要确认一下数据包每个字段的内容是否正确。