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

发布于:2025-07-10 ⋅ 阅读:(26) ⋅ 点赞:(0)

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 地址暂时无法知晓,所以将其值填充为 0ARP 返回报文中的值由于已经知晓,所以以太网首部和 ARP 数据报中的值用实际值填充。
以太网 ARP 报文各字段功能含义

以太网帧头

(14字节)

目标MAC地址 6 -
发送 ARP 请求报文时,该值为广播地址(FF-FF-FF-FF-FF-FF)
发送 ARP 应答报文时,该值为对应的发送请求报文设备的实际 MAC 地址。
源MAC地址 6 -
数据帧发送方 MAC 地址
以太网类型 2 0x0806 0x0806是 ARP 帧的类型值

ARP报文部分

(28字节)

硬件类型 2 0x0001
以太网类型值
协议类型 2 0x0800
上层协议为 IP 协议
硬件地址长度 1 0x6
以太网 MAC 地址长度为 6
协议地址长度 1

0x4

IP 地址长度为 4
操作码 2

0x1/

0x2

0x1 表示 ARP 请求报文
0x2 表示 ARP 应答报文
发送方MAC地址 6 -
MAC 地址
发送方IP地址 4 -
IP 地址
目标MAC地址 6 -
发送 ARP 请求报文时,当前未知, 用全 0 填充。
发送 ARP 应答报文时,该值为对应的发送请求报文设备的实际 MAC 地址。
硬件地址长度 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:

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

//摸鱼结束


网站公告

今日签到

点亮在社区的每一天
去签到