FPGA实现千兆网UDP通讯-1

近来要写一个udp的通讯,如下图所示:

需传输数据--》UDP协议的数据+需传输数据--》IP协议的数据+UDP协议的数据+需传输数据--》前导码+MAC协议的数据+IP协议的数据+UDP协议的数据+需传输数据--》在RJ45可以量到的波形

 

FPGA实现千兆网UDP通讯-1_第1张图片

 

数据链路层到PHY之间的MII有好些种类:MII GMII RGMII SRGMII。在使用中需要注意使用哪一种:

FPGA实现千兆网UDP通讯-1_第2张图片

在硬件设计时候,需要注意的不多。

以太网的帧格式:在以太网链路上的数据包称作以太帧。以太帧起始部分由前导码和帧开始符组成。后面紧跟着一个以太网报头,以MAC地址说明目的地址和源地址。帧的中部是该帧负载的包含其他协议报头的数据包(例如IP协议)。以太帧由一个32位冗余校验码结尾。它用于检验数据传输是否出现损坏。

来自线路的二进制数据包称作一个帧。从物理线路上看到的帧,除其他信息外,还可看到前导码和帧开始符。任何物理硬件都会需要这些信息。

下面的表格显示了在以1500个八比特组为MTU传输(有些吉比特以太网甚至更高速以太网支持更大的帧,称作巨型帧)时的完整帧格式。一个八比特组是八个位组成的数据(也就是现代计算机的一个字节)。

ethernet || 型 以太网帧结构
前导码 帧开始符 MAC 目标地址 MAC 源地址 802.1Q标签 (可选) 以太类型 负载 冗余校验 帧间距
10101010 7个octet 10101011 1个octet 6 octets 6 octets (4 octets) 2 octets 46–1500 octets 4 octets 12 octets
  64–1522 octets  
72–1530 octets  
84–1542 octets

 

前导码和帧开始符

参见:Syncword

一个帧以7个字节的前导码和1个字节的帧开始符作为帧的开始。快速以太网之前,在线路上帧的这部分的位模式是10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101011。由于在传输一个字节时最低位最先传输(LSB),因此其相应的16进制表示为0x55 0x55 0x55 0x55 0x55 0x55 0x55 0xD5。

10/100M 网卡(MIIPHY)一次传输4位(一个半字)。因此前导符会成为7组0x5+0x5,而帧开始符成为0x5+0xD。1000M网卡(GMII)一次传输8位,而10Gbit/s(XGMII) PHY芯片一次传输32位。 注意当以octet描述时,先传输7个01010101然后传输11010101。由于8位数据的低4位先发送,所以先发送帧开始符的0101,之后发送1101。

报头

报头包含源地址和目标地址的MAC地址,以太类型字段和可选的用于说明VLAN成员关系和传输优先级的IEEE 802.1QVLAN 标签。

帧校验码

帧校验码是一个32位循环冗余校验码,以便验证帧数据是否被损坏。

帧间距

主条目:en:Interframe gap

当一个帧发送出去之后,发送方在下次发送帧之前,需要再发送至少12个octet的空闲线路状态码。

 

UDP协议帧格式

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据报的方法。RFC 768  描述了 UDP。
Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是 TCP,该协议几乎做了所有的事情。

UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层,处于IP协议的上一层。UDP有不提供数据包分
组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持
那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用
UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使在今天UDP仍
然不失为一项非常实用和可行的网络传输层协议。
许多应用只支持UDP,如:多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。当强调传输性能而
不是传输的完整性时,如:音频和多媒体应用,UDP是最好的选择。在数据传输时间很短,以至于此前的连接过程成为整个
流量主体的情况下,UDP也是一个好的选择。

FPGA实现千兆网UDP通讯-1_第3张图片

UDP 报文格式

FPGA实现千兆网UDP通讯-1_第4张图片

FPGA实现千兆网UDP通讯-1_第5张图片

1)源端口(2 字节):发送方端口号

2)目的端口(2 字节 ):接收方端口号

3)报文长度(2 字节):UDP 用户数据报的总长度,以字节为单位。

4)校验和(2 字节):检测 UDP 用户数据报在传输中是否有错,有错就丢弃。

用于校验 UDP 数据报的数字段和包含 UDP 数据报首部的“伪首部”。

用于校验 UDP 数据报的数字段和包含 UDP 数据报首部的“伪首部”。

伪首部, 又称为伪包头(Pseudo Header):是指在 TCP 的分段或 UDP 的数据报格式中,在数据报首部前面增加源 IP 地址、目的 IP 地址、IP 分组的协议字段、TCP 或 UDP 数据报的总长度等共12字节,所构成的扩展首部结构。此伪首部是一个临时的结构,它既不向上也不向下传递,仅仅只是为了保证可以校验套接字的正确性。

5)数据:UDP 的数据部分如果不为偶数需要用 0 填补,就是说,如果数据长度为奇数,数据长度加“1”。

注:图片来自网络,如有侵权,请告知删掉,谢谢!

你可能感兴趣的:(FPGA)