1. 今日摸鱼任务
ARP 协议获得目的主机的硬件(MAC)地址。
|
02_【逻辑教程】基于HDL的FPGA逻辑设计与验证教程V3.5.2.pdf
50.2.1以太网回环收发测试
54 ARP 协议的原理与 FPGA 实现 |
学习以太网开发调试过程中各种软件的操作方法
学习CRC 校验算法
|
2. 一些基础
2.1 ARP 帧工作原理 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
某个网络设备在不同的时间,其 IP 地址可能不一样.
所以需要用这种缓存表项定期失效的机制来避免 MAC 地址和不同时刻 IP 地址绑定的冲突。
ARP 帧每个字段的数据意义(包含了以太网帧头部字段)
发送 ARP 请求帧时,以太网首部中的目的 MAC 地址为广播地址,也就是 6 字节的 0xFF。而 ARP 数据报中当发送请求报文时由于目的 MAC 地址暂时无法知晓,所以将其值填充为 0。ARP 返回报文中的值由于已经知晓,所以以太网首部和 ARP 数据报中的值用实际值填充。
以太网 ARP 报文各字段功能含义
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.2 以太网测试工具生成数据帧 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
这里使用的是“小兵以太网测试仪” | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
配置好后,点击“确定” | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
得到内容如下: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0a, 0x35, 0x01, 0xfe, 0xc0, 0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0x00, 0x0a, 0x35, 0x01, 0xfe, 0xc0, 0xc0, 0xa8, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xa8, 0x00, 0x03, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x78, 0x62, 0x2e, |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.3 WireShark抓包验证 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
按照50章2.2的以太网回环收发测试例程,让电脑的网卡活动状态。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
①连接电源线、PL网口(PC端可以用USB转千兆网口) ②下载.bit文件 ③“控制面板”→“网络和共享中心” 找到对应的网络 ④静态绑定 管理员运行cmd arp -s 192.168.0.2 00-0a-35-01-fe-c0 arp -a 查询 ⑤关闭防火墙,允许NetAssist运行 ⑥设置如下 此时,保持活动状态 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
小兵界面: 选择网卡,勾选流,点击运行 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WireShark
其中,Destination 项为 Broadcast 的包就是 ARP 请求包,Xilinx包就是该 ARP 请求包的应答包。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.4 循环冗余校验(Cyclic Redundancy Check,CRC) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
利用线性编码原理,在数据发送端将要传输的 K 位信息码后面根据一定的规则产生一个校验码即CRC校验码 R 位,从而形成一个长度为(K+R)数据帧。
完整的以太网数据包结尾是 4 个字节的帧校验(FCS)字段,即 CRC32 值。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CRC_Calc+v0.1.exe:
出现这种问题,是因为存在换行符,删掉重新复制
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CRC 计算软件结果:低字节在前,高字节在后。
以太网使用时:高字节在前,低字节在后。
字节位为单位调换 4 个 字节的高低顺序
BB39 CAC7调换为C7CA 39BB
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
VERILOG:
parameter CRC = 32'hBB39CAC7 ; //CRC 校验值。
wire [31:0]CRC_result;
//调整 CRC 校验字字节顺序以符合以太网数据包校验格式
assign CRC_result = {CRC[7:0],CRC[15:8],CRC[23:16],CRC[31:24]};
|
3. 以太网 ARP 帧发包实例
跳过54.8的手动CRC节,对应54.9自动CRC |
arp_send_rgmii_with_crc |
eth_send_test |
CRC32_D8 |
eth_send |
配置了125MHz的时钟,FIFO是一个查找表 |
下载.bit到板卡中,用wireshark可以对发送的数据进行抓包 |
//摸鱼结束