以太网基础③ARP 协议的原理与 FPGA 实现

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可以对发送的数据进行抓包 |

//摸鱼结束

相关推荐
xyx-3v9 小时前
SOC相对于版上系统的优势是什么?
fpga开发
Aaron15881 天前
RFSOC+VU13P+GPU 在6G互联网中的技术应用
大数据·人工智能·算法·fpga开发·硬件工程·信息与通信·信号处理
stars-he1 天前
基于 Design Compiler 的 UDP Payload 追加控制模块综合与门级后仿真
笔记·fpga开发·udp
尤老师FPGA2 天前
HDMI数据的接收发送实验(十)
fpga开发
逻辑诗篇2 天前
破核拆解:PCIE719——基于Xilinx Zynq UltraScale+的高性能SAS扩展卡设计
fpga开发·架构
逻辑诗篇2 天前
高性能存储扩展利器|PCIE719 基于Zynq UltraScale+的企业级可编程SAS方案
fpga开发
liuluyang5302 天前
SV主要关键词详解
fpga开发·uvm·sv
happyDogg_2 天前
验证环境采样rtl时序数据遇到的问题
fpga开发
unicrom_深圳市由你创科技2 天前
项目分析和FPGA器件选型外包服务包括哪些内容?别让选错芯片毁了整个项目
fpga开发
Aaron15882 天前
27DR/47DR/67DR技术对比及应用分析
人工智能·算法·fpga开发·硬件架构·硬件工程·信息与通信·基带工程