以太网UDP数据回环实验

以太网通信的回环测试 RTL8211Dx,RTL8211E(G),RTL8211Fx 芯片只支持 PCS loopback 模式,类似前述 KSZ9031 芯片的本地 (数字) 回环模式,通过配置 Basic Mode Control 寄存器的 bit14 开启。线回环模式主要用于测试 MDI 接口的工作情况,在这种模式下,PHY PCS 层可以配置为三态输出,也可以驱动 RGMII RXD 端。对于外回环模式,MAC 向 PHY 发送的数据包经过 RJ45 连接器,重新发回 PHY,然后进入 MAC 端。 阅读详情
AI摘要

本文介绍了TCP/IP协议簇,包括IP、UDP协议及其校验和计算方法。IP首部校验和需将校验和字段置0后进行反码加法等操作。UDP校验和计算涉及伪首部、首部和有效数据。还阐述了以太网UDP数据回环实验,FPGA接收上位机数据并回传,UDP模块实现接收、发送及CRC校验功能。

一、TCP/IP协议簇

        前面说到TCP/IP是一个协议簇,其中包含有IP协议、TCP协议、UDP协议、ARP协议、DNS协议、FTP协议等。设备之间要想完成通信,就必须通过这些网络通信协议。

         物理层的主要作用就是传输比特流(将1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,即数模转换与模数转换)。
        数据链路层接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。MAC数据包位于数据链路层,当MAC数据包经过数据链路层到达网络层时,前导码、帧起始界定符、目的 MAC 地址、源 MAC 地址、类型/长度以及校验字节均被去除,只有有效数据传入了网络层。
        网路层通过路由选择算法,为报文(该层的数据单位,由上一层数据打包而来)通过通信子网选择最适当的路径。这一层定义的是IP地址,通过IP地址寻址,所以产生了IP协议。传入网络层的数据包并不完全是需要传输的有效数据,他的前面还包含着 20 字节的IP协议首部。网络层在接收到数据包后,取下数据包的IP首部,将剩余有效数据包发送到传输层。
        而传输层提供了主机应用程序进程之间的端到端的服务,基本功能是:分割与重组数据、按端口号寻址、连接管理、差错控制和流量控制、纠错功能。若传输层使用UDP协议,那么传入传输层的数据包为UDP数据包。
        应用层是计算机用户,以及各种应用程序和网络之间的接口。

         以太网数据包就是对各层协议的逐层封装来实现数据传输,MAC帧中的数据段为IP数据报文,IP报文中的数据段位UDP报文,UDP报文中的数据段为传输数据。

1.1 IP

        IP协议规定了数据传输时的基本单元和格式,位于以太网MAC格式的数据段,由IP首部和数据字段组成。

  • 版本(4bit):定义IP协议版本,设置为二进制的0100时表示IPv4,设置为二进制的0110时表示IPv6。
  • 首部长度 (4bit):定义数据报协议头长度,表示IP首部一共有多少个32位。协议头最小值为5,最大值为15。
  • 服务类型 (8bit):定义上层协议对处理当前数据报所期望的服务质量,并对数据报按照重要性级别进行分配。前3位成为优先位,后面4位成为服务类型,最后1位没有定义。这些8位字段用于分配优先级、延迟、吞吐量以及可靠性。
  • 总长度(16bit):定义整个IP数据报的字节长度,包括协议头部和数据。其最大值为65535字节。
  • 标识 (16bit):包含一个整数,用于标识主机发送的数据报,通常每发送一份数据包值加一。
  • 标记(3bit):由3位字段构成,其中最低位 (ME控制分段,存在下一个分段置为1,否则置0代表该分段是最后一个分段。中间位(DF) 指出数据报是否可进行分段,如果为1则机器不能将该数据报进行分段。第三位即最高位保留不使用,值为0。
  • 分段偏移 (13bit):在接收方进行数据报重组时用来标识分段的顺序。
  • 生存时间 (8bit):一种计数器,在丢弃数据报的每个点值依次减1直至减少为0。这样确保数据报拥有有限的环路过程(即TTL),限制了数据报的寿命。
  • 协议 (8bit):该字段指出在IP处理过程完成之后,有哪种上层协议接收导入数据报。
  • 首部校验和(16bit):该字段帮助确保IP协议头的完整性。由于某些协议头字段的改变,这就需要对每个点重新计算和检验。计算过程是先将校验和字段置为0,然后将整个头部每 16 位划分为一部分,将个部分相加,再将计算结果取反码,插入到校验和字段中。
  • 源地址 (32bit):发送端IP地址,该字段在IPV4数据报从源主机到目的主机传输期间必须保持不变。
  • 目的地址 (32bit):接收端IP地址,该字段在IPv4数据报从源主机到目的主机传输期间同样必须保持不变。

1.1.1 IP首部校验和

IP首部校验和计算步骤:

  1. 将16位检验和字段置为0,然后将IP首部按照16位分成多个单元;
  2. 对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位);
  3. 此时仍然可能出现进位的情况,将得到的和再次分成高16位和低16位进行累加;
  4. 最后将得到的和的反码填入校验和字段。

IP首部校验和校验

对IP首部中每个16bit进行二进制反码求和,将计算结果再取反码,若结果为0,通过检验,否则不通过检验。

例:验证IP首部 45 00 00 30 80 4c 40 00 80 06 b5 2e d3 43 11 7b cb 51 15 3d
(1)对 IP 首部进行反码求和:4500+0030+804c+4000+8006+b52e+d343+117b+cb51+153d=3fffc
     0300+3fffc=ffff
(2)对和结果取反码:~ffff=0,校验正确。

1.2 UDP

        UDP (User Datagram Protocol),即用户数据报协议,是一种面向无连接的传输层协议。无连接是指在传输数据时,数据的发送端和接收端不建立逻辑连接。即发送端只管发送,不会管接收端到底有没有接收到数据,而接收端也不会向发送端反馈反馈是否收到数据。

UDP首部共8个字节,同IP首部一样,也是一行以32位(4个字节)为单位。

  •  源端口号(16byte):用于区分不同服务的端口,端口号的范围从0到 65535。
  • 目的端口号(16byte):16位接收端端口号。
  • UDP长度(16byte):包含 UDP 首部长度+数据长度。
  • UDP校验和(16byte):提供了与TCP校验字段相同的功能,可选。

1.2.1 UDP校验和

        UDP校验和的计算需要三部分数据:UDP 伪首部、UDP首部和有效数据。伪首部包含IP首部一些字段,其目的是让UDP两次检查数据是否已经正确到达目的地,只是单纯做校验使用。

UDP校验和计算步骤:校验字节强制置0,将三部分数据按2字节, 即16比特,分开分别相加,若如果大于 FFFF 那么把高16位与低16位相加,直到最终结果为16比特数据。将计算结果取反作为 UDP 校验和字节。 

例:

(1) 将校验和字段00 92置为00 00:
a9 fe bf lf a9 fe 01 17 00 11 00 28 04 d2 04 d2 00 28 00 00 68 74 74 70 3a 2f 2f 77 7777 2e 63 6d 73 6f 66 74 2e 63 6e 20 51 51 3a 31 30 38 36 35 36 30 30
(2) 以2字节为单位,数据反码求和:
a9fe + bflf + a9fe + 0117 + 0011 + 0028 + 04d2 + 04d2 + 0028 + 0000 + 6874 + 7470+ 3a2f + 2f77 + 7777 + 2e63 + 6d73 + 6f66 + 742e + 636e + 2051 + 513a + 3130 +3836 + 3536 + 3030 = 6 ff67
(3) 将进位(6)加到低 16 位(f67)上:6 + ff67 = ff6d
(4)将 ff6d 取反得: checksum = 0092 

二、以太网UDP数据回环实验

        上位机通过网口调试助手发送数据给FPGA,FPGA通过以太网接口接收数据并将收到的数据发送给上位机,完成以太网UDP数据的回环。

        GMII TO RGMII模块负责将双沿 (DDR) 数据和单沿 (SDR) 数据之间的转换,GMII接收侧的引脚同时连接至 ARP顶层模块和UDP顶层模块,这个两个模块会分别根据ARP协议和UDP协议解析数据。而GMII发送侧引脚只能和ARP顶层模块和UDP顶层模块的其中一个连接,因此以太网控制模块会根据当前接收到的协议类型,选择切换GMII发送侧引脚和ARP顶层模块或者UDP顶层模块连接,并且根据输入的ARP接收的类型,控制ARP顶层模块返回ARP应答信号。ARP顶层模块解析ARP 请求命令,并返回开发板的MAC地址。UDP顶层模块实现了以太网 UDP 数据包的接收、发送以及 CRC 校验的功能。以太网单次会接收到大量数据,因此需要FIFO模块用来缓存数据,由于所使用的GMII接收时钟和GMII发送时钟实际上为同一个时钟,因此这里使用同步FIFO。

2.1 UDP模块

        UDP模块实现了以太网帧格式和UDP协议功能,由UDP接收模块、UDP发送模块和CRC校验模块组成。

UDP接收模块:接收模块较为简单只需要判断目的MAC地址与开发板MAC地址、目的IP地址与开发板IP地址是否一致。接收模块的解析顺序是:前导码+顺起始界定符→以太网头→IP首部→UDP首部→UDP数据(有效数据)→接收结束。IP数据报一般以32bit为单位,为了和IP数据报格式保持一致,所以要把8位数据转成32位数据,因此接收模块实际上是完成了8位数据转32位数据的功能。

UDP发送模块:发送模块多了IP首部校验和和CRC循环冗余校验的计算,CRC的校验在CRC校验模块里完成。发送模块的发送顺序是前导码+起始界定符→以太网头→IP首部→UDP首部→UDP数据(有效数据)→CRC校验。输入的有效数据为32位数据,GMII接口为8位数据接口,因此发送模块实际上完成的是32位数据转8位数据的功能。

CRC校验模块:CRC校验模块是对UDP发送模块的数据(不包括前导码和起始界定符)做校验,把校验结果值拼在以太网倾格式的FCS字段,如果CRC校验值计算错误或者没有的话,那么电脑网卡会直接丢弃该顿导致收不到数据。CRC32 校验在FPGA实现的原理是LFSR (Linear Feedback Shif Register,线性反馈移位寄存器),其思想是各个寄存器储存着上一次CRC32运算的结果,寄存器的输出即为CRC32的值。

2.1.1 UDP接收模块

        UDP接收模块按照UDP的数据格式解析数据,并实现将8位用户数据转成32位数据的功能,通过三段式状态机来解析以太网包。

module udp_rx(
    input                clk         ,    //时钟信号
    input                rst_n       ,    //复位信号,低电平有效
    
    input                gmii_rx_dv  ,    //GMII输入数据有效信号
    input
记一次网络风暴/网络环路 环境: win10 x64 ,联想云教室,电子教室,华三交换机。 状况描述: 最开始开机,一直卡在PXE启动界面,进不去系统。电脑技术张工说,先开教师机后开学生机。因为学生机开机需要读取教师机的镜像。但是状况依旧。 开始排查网络,重启交换机后,发现陆续有几台电脑能登陆进系统桌面了,但很慢起码过了5分钟以上才能进去。 教师机一直都是正常的,然后我在教师机部署电子教室。技术说这电子 教室与云教室IP冲突。 (那之后我查了下这两款软件的PID和端口,所占端口不一样,那没冲突) 我说不可能吧,这套软件在 阅读详情

相关推荐

基于光口的以太网 udp 回环实验

本章实验我们通过网络调试助手发送数据给 FPGA,FPGA通过光口接收数据并将数据使用 UDP 协议发送给电脑。

小王在努力...的博客 2810

FPGA实现以太网UDP数据回环的实战解析

本文详细解析了如何在FPGA上实现以太网UDP数据回环功能。通过剖析UDP数据包结构,手把手讲解接收与发送状态机的Verilog设计,并重点阐述了数据流转、系统集成及调试方法。该实践是理解FPGA网络通信、构建更复杂应用(如视频流传输)的关键基础,尤其适合硬件工程师及网络通信爱好者入门学习。

cola5的博客 726

千兆以太网传输层 UDP 协议原理与 FPGA 实现(UDP发送)

本章将讲解千兆以太网传输层 UDP 协议的相关内容。学习 UDP 层协议的内容,核心也是明确该协议的数据字段格式。在此基础上,理解其“不可靠、无连接”的传输特性。同时,结合前面章节的内容,进一步深化理解用户数据、UDP、IP、MAC 层的层层打包嵌套关系。

小王在努力...的博客 3894

FPGA UDP以太网接收模块与串口数据回环测试实战

本文详细介绍了基于Xilinx ZYNQ-7020开发板的FPGA UDP以太网接收模块设计与实现,重点解析了RGMII接口转换、UDP数据解析、跨时钟域异步FIFO设计及串口回环控制等关键技术。通过实际上板验证,成功实现了从千兆以太网接收数据并通过串口回传的完整数据流,为嵌入式网络通信开发提供了实用参考。

tensorflowjs6的博客 437

千兆以太网硬件调试实战:UDP回环测试从原理到排查全解析

在嵌入式系统和FPGA开发中,以太网通信是连接设备与网络的核心技术,其稳定性和性能直接影响系统可靠性。其工作原理基于OSI模型,从物理层的电气信号转换到数据链路层的帧封装,再到网络层的路由寻址。UDP协议作为传输层的重要成员,以其无连接、低延迟的特性,在需要快速数据传输的场景中展现出独特技术价值,尤其适用于实时音视频、物联网传感数据上报等对时效性要求高的领域。通过构建UDP回环测试框架,开发者可以透明观测数据链路状态,直接验证物理层信号完整性与协议栈处理能力。本文聚焦RGMII接口与PHY芯片配置,结合tc

weixin_33991418的博客 660

千兆以太网传输层 UDP 协议原理与 FPGA 实现(UDP接收)

在前面我们对以太网 UDP 帧格式做了讲解,UDP 帧格式包括前导码+帧界定符、以太网头部数据、IP 头部数据、UDP 头部数据、UDP 数据、FCS 数据,以太网接收模块同样是按照该格式接收数据。

小王在努力...的博客 2128

每天一个网络知识:什么是回环地址

而在IPv6协议中,回环地址的形式更简洁,用“::1”来表示,功能与IPv4的127.0.0.1完全一致,只是适配了更先进的IPv6地址格式。数据从“发送模块”出发,经过操作系统的网络协议栈处理后,直接被“接收模块”获取,整个过程不需要连接互联网,也不会占用外部网络带宽,通信效率极高。比如你在自己的电脑上通过127.0.0.1搭建了一个网站,其他同学的电脑无法通过这个地址访问到你的网站,因为回环地址的数据不会离开你的电脑。另外,在配置网络时,不能将回环地址分配给网卡等物理网络接口,否则会导致网络通信异常。

网络技术联盟站 916

基于 FPGA 的以太网回环测试verilog实现UDP协议

基于 FPGA 的以太网回环测试verilog实现UDP协议 verilog实现UDP协议: 该 设计使用 UDP 协议,首先通过串口助手接收 PC 发送的 UDP 数据包,然后提取其中的数据部分并使用 UDP协议发回给 PC。 FPGA 首先接收上位机发送的 UDP 数据包,解析目标 MAC address 来确定是否为发给 FPGA 的数据包。如果是的话,将数据包的数据部分保存到 fifo 中。然后 FPGA 通过发送程序再把 fifo 的数据包发送回上位机。 下面是程序的顶层文件设计: module

QQ_778132974的博客 3045

Xilinx 7系列FPGA上跑通88E1512千兆网PHY+UDP回环的完整工程包

直接可用的FPGA以太网验证工程,基于Xilinx 7系列器件,驱动Marvell 88E1512千兆物理层芯片,内置严格遵循IEEE 802.3标准的MDIO控制器,能可靠读写PHY寄存器(包括PHY地址设定、工作模式配置、链路状态轮询等);集成UIUDP Stack协议栈IP核,通过AXI4-Stream接口实现UDP数据包的自动封装、校验和、发送与接收,完成端到端UDP回环通信;提供已综合实现的bit文件(udp_loop_back.bit)和可烧录bin文件(udp_loop_back.bin),含

z2a3b4c5d的博客 243

桑基图实战指南:Excel/Python/R三工具高效绘制方法

桑基图是一种以线条宽度编码流量大小、以节点位置表达流程阶段、以连接关系呈现数据流向的专项可视化技术,其核心原理在于‘宽即量、位即序、连即逻辑’。它并非装饰性图表,而是面向业务诊断的分析前置工具,尤其适用于预算分配、能源损耗、用户转化等存在明确单向流动与显著数值差异的场景。相比传统柱状图或漏斗图,桑基图能天然暴露系统瓶颈与隐性损耗,大幅提升决策效率。本文聚焦工程落地,覆盖Excel插件快速交付、Python Plotly交互开发、R networkD3生态集成三大主流路径,兼顾数据准备铁律、索引映射规范与中文

cuml0912的博客 488

MIPS-5级流水线CPU

一、流水线CPU 流水线CPU就是指将一条分解为多步,在同一周期内进行多条指令的同时执行。MIPS五级流水线就是将指令分为:取指(IF),译码(ID),执行(EX),访存(MEM),写回(WB)五个阶段。举个例子: 比如第二条指令lui $t2,0x2100 在流水线CPU中执行的就是 可以看到在200-300ns的周期里,IF阶段取到0x00400004处的指令,300-400ns,这条指令到了ID阶段,而IF阶段执行下一条指令。400-500ns,执行这条指令,ALU的结果为0x2100

weixin_43877853的博客 2万+

DreamerV3实战:如何用世界模型在Minecraft中自动挖钻石(附完整训练流程)

本文详细介绍了如何使用DreamerV3世界模型在Minecraft中训练AI智能体自动完成挖钻石的复杂任务。文章深入分析了该任务对强化学习的挑战,提供了从环境配置、模型训练到结果评估的完整实战流程,并分享了关键的调优技巧与问题解决方案,展示了基于模型的强化学习在解决稀疏奖励问题上的强大能力。

weixin_29050271的博客 192

维纳(Wiener)复原滤波器的三种推导形式及其在图像处理中的应用

本文深入解析了维纳(Wiener)复原滤波器的三种核心推导形式:卷积形式、矩阵向量形式和频域形式,并重点阐述了其基于线性最小均方误差(LMMSE)估计的核心思想。通过Python实战演示,展示了频域形式如何高效地在图像去模糊与噪声抑制之间取得平衡,是图像复原领域的经典且实用的工具。

net55的博客 578

ADS1220 STM32硬件SPI驱动程序

前一段时间温故了下标准库,使用的是F1系列芯片,测试程序。

随风飘零翼的博客 5770

RTOS与Linux功能差异与应用场景全面对比

在嵌入式系统的开发中,操作系统的选择至关重要。和是两种广泛应用的操作系统,它们在功能、设计目标以及应用领域中各具优势。随着嵌入式系统的不断发展,已成为嵌入式行业的大趋势。那么,这两者到底有什么不同呢?

硬核科技 402

SAPGUI excel 导出时遇到的运行时错误:STRING_SIZE_TOO_LARGE

当报表导出需求远超单一 XLSX 文件的物理承载力时,与其在 SAPGUI 中硬拼 2 GB 限制,不如把分页、过滤、流式写入作为设计前提。掌握 ABAP2XLSX 或 CSV + Power Query 等工具链,既能满足审计合规,又能让应用服务器远离的噩梦。祝你在下一次导出海量数据时,既高效又优雅。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 641

CATIA二次开发——遍历几何图形集下的轴系及控制轴系生成位置

CATIA二次开发——轴系相关问题1.遍历几何图形集下的轴系2.解决轴系生成位置的问题 1.遍历几何图形集下的轴系 近期遇到的问题:遍历轴系的时候发现,AxisSystem属性的轴系只有放在轴系集合下,才能被找到,放在几何图形集或其他位置均不能被找到。本来想遍历几何图形集下的轴系元素,但是发现没有对应的属性,只能查找 几何图形集、几何元素、草图等元素,无法直接遍历轴系。 解决办法:(加入选择集,在选择集中筛选轴系类型) HybridBody axisHB = activePart.HybridBodies

WorkMan的博客 2731

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 以太网ARP测试实验
下一篇: FPGA实现Avalon-MM接口通信
STATEABC
博客等级 码龄6年 537粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值