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 帧每个字段的数据意义(包含了以太网帧头部字段) |---------|--------|-------|------|------|--------|--------|-----|----------|---------|---------|--------| | 以太网帧头(14字节) ||| ARP报文部分(28字节) ||||||||| | 目标MAC地址 | 源MAC地址 | 以太网类型 | 硬件类型 | 协议类型 | 硬件地址长度 | 协议地址长度 | 操作码 | 发送方MAC地址 | 发送方IP地址 | 目标MAC地址 | 硬件地址长度 | | 6 | 6 | 2 | 2 | 2 | 1 | 1 | 2 | 6 | 4 | 6 | 4 | 发送 ARP 请求帧时,以太网首部中的目的 MAC 地址为广播地址,也就是 6 字节的 0xFF。而 ARP 数据报中当发送请求报文时由于目的 MAC 地址暂时无法知晓,所以将其值填充为 0。ARP 返回报文中的值由于已经知晓,所以以太网首部和 ARP 数据报中的值用实际值填充。 以太网 ARP 报文各字段功能含义 |----------------|----------|----|----------|--------------------------------------------------------------------------------| | 以太网帧头 (14字节) | 目标MAC地址 | 6 | - | 发送 ARP 请求报文时,该值为广播地址(FF-FF-FF-FF-FF-FF) 发送 ARP 应答报文时,该值为对应的发送请求报文设备的实际 MAC 地址。 | | 以太网帧头 (14字节) | 源MAC地址 | 6 | - | 数据帧发送方 MAC 地址 | | 以太网帧头 (14字节) | 以太网类型 | 2 | 0x0806 | 0x0806是 ARP 帧的类型值 | | ARP报文部分 (28字节) | 硬件类型 | 2 | 0x0001 | 以太网类型值 | | ARP报文部分 (28字节) | 协议类型 | 2 | 0x0800 | 上层协议为 IP 协议 | | ARP报文部分 (28字节) | 硬件地址长度 | 1 | 0x6 | 以太网 MAC 地址长度为 6 | | ARP报文部分 (28字节) | 协议地址长度 | 1 | 0x4 | IP 地址长度为 4 | | ARP报文部分 (28字节) | 操作码 | 2 | 0x1/ 0x2 | 0x1 表示 ARP 请求报文 0x2 表示 ARP 应答报文 | | ARP报文部分 (28字节) | 发送方MAC地址 | 6 | - | 源 MAC 地址 | | ARP报文部分 (28字节) | 发送方IP地址 | 4 | - | 源 IP 地址 | | ARP报文部分 (28字节) | 目标MAC地址 | 6 | - | 发送 ARP 请求报文时,当前未知, 用全 0 填充。 发送 ARP 应答报文时,该值为对应的发送请求报文设备的实际 MAC 地址。 | | ARP报文部分 (28字节) | 硬件地址长度 | 4 | - | 目的 IP 地址 | | 填充数据 || 18 | - | 因为物理帧最小长度为 64 字节,前面的 42 字节再加上 4 个 CRC 校验字节,还差 18 个字节 | | 以太网校验字 || 4 | - | CRC32校验值 | |
| ### 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: parameterCRC **=**32'hBB39CAC7 ; //CRC 校验值。 wire[31:0]CRC_result; //调整 CRC 校验字字节顺序以符合以太网数据包校验格式 assignCRC_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可以对发送的数据进行抓包 |
//摸鱼结束