以太网基础③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 校验值。 wire31:0CRC_result; //调整 CRC 校验字字节顺序以符合以太网数据包校验格式 assignCRC_result ={CRC7:0,CRC15:8,CRC23:16,CRC31: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可以对发送的数据进行抓包 |

//摸鱼结束

相关推荐
坏孩子的诺亚方舟4 小时前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
FPGA小徐10 小时前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
FPGA小徐11 小时前
FPGA 数字信号处理:并行 FIR 与串行滤波器设计原理、对比与完整 Verilog 实现
fpga开发
Saniffer_SH1 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
zlinear数据采集卡1 天前
双核架构深度解析:ARM+FPGA如何让数据采集卡实现500Ksps高性能?
arm开发·fpga开发·架构
9527华安1 天前
FPGA实现GTH Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
fpga开发·gth·aurora 8b10b·transceivers
FPGA小徐2 天前
FPGA 数字信号处理(二):并行 FIR 滤波器的 Verilog 全流程设计与实现
fpga开发
国科安芯2 天前
基于AS32S601ZIT2型抗辐照MCU的商业航天卫星姿态确定与控制系统研究
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
ALINX技术博客2 天前
【黑金云课堂】FPGA技术教程FPGA基础:I2C 总线通信技术
fpga开发·i2c
Hello-FPGA2 天前
Xilinx KU040 FPGA Camera Link 图像采集
c++·fpga开发