010 FPGA千兆网UDP通信【转载】
一、以太网帧格式

图8‑12以太网帧格式
表8‑5以太网帧格式说明
|
类别 |
字节数 |
说明 |
|
前导码(Preamble) |
8 |
连续 7 个 8’h55 加 1 个 8’hd5,表示一个帧的开始,用于双方设备数据的同步; |
|
目的 MAC 地址 |
6 |
存放目的设备的物理地址,即 MAC 地址 |
|
源 MAC 地址 |
6 |
存放发送端设备的物理地址 |
|
类型 |
2 |
用于指定协议类型: 0800: IP 协议; 0806: ARP 协议; 8035: RARP 协议; |
|
数据 |
46~1500 |
最少 46 字节,不足需要补全 46 字节,例如 IP 协议层就包含在数据 部分,包括其 IP 头及数据。 |
|
FCS(帧尾) |
4 |
称为帧校验序列,采用 32 位 CRC 校验,对目的 MAC 地址字段到数据字段进行校验。 |
二、UDP协议分析
为什么UDP协议在FPGA实现时很受欢迎,最主要一个原因就是简单,简答到什么地步呢?UDP协议只是在IP的数据服务之上增加了复用和分用的功能和查错检验的功能。

图8‑13 UDP协议示意图
从上图简单总结几个UDP的特点:
1、UDP是面向报文的,发送方的UDP只需要对应用数据报文添加相关首部后就向下交付,这个过程UDP对应用层交下来的数据报文,既不合并也不进行拆分,而是保留这些报文的边界;
2、UDP 是无连接的,从图中可以看出,UDP只是对应用数据添加首部后便以以太网帧格式进行发送,发送前不需要建立连接(发送数据结束时也没有连接可释放),减少了开销和发送数据之前的时延;
3、UDP 使用尽最大努力交付,即不保证可靠交付,主机不需要维持复杂的连接状态表;
4、UDP 没有拥塞控制,从上面可以看出,由于源主机只是进行发送(或接收),而不进行复杂的连接,从而网络出现的拥塞也不会使源主机的发送速率降低。(说白了,就是发送时我不管数据能不能被准确接收,接收时也不管数据是否准确)这对某些实时应用是很重要的;
5、UDP 支持一对一、一对多、多对一和多对多的交互通信;
6、UDP 的首部开销小,只有8个字节,比 TCP 的20个字节的首部要短。这就在产生首部时减少很多时间。
端口分用
上面提到UDP支持一对多交互通信,也就是端口分用。当运输层从 IP 层收到 UDP 数据报时,就根据首部中的目的端口,把 UDP 数据报通过相应的端口,上交最后的终点——应用进程:

图8‑14 UDP基于端口的应用
如果接受方 UDP 发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用程序),就丢弃该报文,并由网际控制报文协议 ICMP 发送“端口不可达”差错报文给发送方
UDP 的首部格式
用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,由四个字段组成,每个字段都是两个字节
首部字段
源端口源端口号。在需要对方回信时。不需要时可用全0
目的端口目的端口号。这在终点交付报文时必须使用
长度 UDP 用户数据报的长度,其最小值是8(仅有首部)
检验和检测 UDP 用户数据报在传输中是否有错。有错就丢弃
伪首部
UDP 用户数据报首部中检验和的计算方法有些特殊。在计算检验和时,要在 UDP 用户数据报之前增加 12 个字节的伪首部。所谓“伪首部”是因为这种伪首部并不是 UDP 用户数据报真正的首部。只是在计算检验和时,临时添加在 UDP 用户数据报前面,得到一个临时的 UDP 用户数据报。检验和就是按照这个临时用户数据报来计算的。伪首部既不向下传也不向上递交,而仅仅是为了计算检验和。

图8‑15 UDP用户数据报的首部和伪首部
三、参考资料
1、https://mp.weixin.qq.com/s/EJOdYYI8l7TCD2l1bdy3MA
010 FPGA千兆网UDP通信【转载】的更多相关文章
- FPGA千兆网UDP协议实现
接着上一篇百兆网接口的设计与使用,我们接着来进行FPGA百兆网UDP(User Datagram Protocol)协议的设计. 1)UDP简介 在此,参考博主夜雨翛然的博文“https://www. ...
- 011 FPGA千兆网TCP通信【转载】
一.LWIP 首先通过上面的简单分析,我们应该很清楚一件事:TCP协议很复杂,光握手过程就需要"三次握手.四次挥手"的复杂过程,不是特别适合FPGA的纯逻辑实现,因为用FPGA实现 ...
- AC6102 开发板千兆以太网UDP传输实验2
AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...
- AC6102 开发板千兆以太网UDP传输实验
AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...
- 千兆网数据CRC检验和过滤
项目简述 本次项目在计算机将图像数据信息通过千兆网发送给FPGA后,由于接收到的数据可能混乱和无效,需要对数据CRC校验和无效包过滤. 项目原理及框图 对iddr_ctrl模块的输入数据和使能信号,分 ...
- Dalsa Sherlock 直连千兆网相机(通用驱动)
支持 Sherlock 7.1.7.2,用于千兆网相机与 Sherlock 的连接. 可适用于很多厂商的相机,如:巴斯勒(Basler),JAI,堡盟相机(Baumer),灰点相机(Point Gre ...
- linux fedora 14(内核2.6.35.6) PF_RING+libpcap 极速捕获千兆网数据包,不丢包
前面讲到了libpcap 捕获数据包,尤其在千兆网的条件下,大量的丢包,网上搜索好久,大概都是PF_PACKET +MMAP,NAPI,PF_RING之类的方法,我对PF_RING+libpcap进行 ...
- 华为S5700S-52P-LI-AC千兆网管交换机web登录界面配置
研究一下午,包装附的说明书根本就是错误的,通过技术售后和官方的文档结合,总算可以登录交换机的web管理界面. 首先需要使用通讯控制线缆(包装中附)连接电脑和交换机,一头接交换机的Console口,一头 ...
- 迅为双核imx6DL核心板_ARM定制专家_Cortex SATA 千兆网 4G GPS
核心板参数 尺寸:51mm*61mm CPU:Freescale Cortex-A9 双核精简版 i.MX6DL,主频 1.2 GHz 内存:1GB DDR3 存储:8GB EMMC 存储 EEPRO ...
随机推荐
- Centos中安装Node.Js
NodeJs安装有好几种方式: 第一种: 最简单的是用yum命令,可惜我现在用的时候 发现 镜像中没有nodejs:所以这种方式放弃: 第二种:去官网下载源码,然后自己编译:编译过程中可能会出现问题, ...
- php安裝7.3版本
CentOS 安装 EPEL 源: yum install epel-release 安装 REMI 源: CentOS 7: yum install http://rpms.remirepo.net ...
- Java实验项目三——递归实现字符串查找和替换操作
Program:按照下面要求实现字符串的操作: (1)设计一个提供下面字符串操作的类 1)编写一个方法,查找在一个字符串中指定字符串出现的次数. 2)编写一个方法,参数(母字符串,目标字符串,替换字符 ...
- Java 设置PDF跨页表格重复显示表头行
在创建表格时,如果表格内容出现跨页显示的时候,默认情况下该表格的表头不会在下一页显示,在阅读体验上不是很好.下面分享一个方法如何在表格跨页是显示表格的表头内容,这里只需要简单使用方法 grid.set ...
- rz上传文件报错:rpm Read Signature failed: sigh blob(1268): BAD, read returned 0
上传文件报错: [root@www localdisk]# rpm -ivh cobbler* error: cobbler-2.8.4-4.el7.x86_64.rpm: rpm Read Si ...
- C语言:Unicode字符集
Unicode 也称为统一码.万国码:看名字就知道,Unicode 希望统一所有国家的字符编码.Unicode 于 1994 年正式公布第一个版本,现在的规模可以容纳 100 多万个符号,是一个很大的 ...
- CF1329F题解
能发现: 1.输出序列与掉落顺序没有任何关系(因为单调性不会被改变). 2.输出的序列 \(h_i\) 最多有一组 \(h_i=h_{i+1}\). 对 2 的证明: 当 \(h_{i+1}\) 与 ...
- SLAM十四讲第二版项目代码总结
github地址:https://github.com/gaoxiang12/slambook2/tree/master/ch13 双目视觉里程计 头文件 所有的类都在myslam命名空间中 1.co ...
- 牛客OI测试赛1
题目链接: https://www.nowcoder.com/acm/contest/181#question A.斐波拉契 求$f[n-1]*f[n+1]-f[n]^2$,$f[n]$为斐波拉契数列 ...
- go反射原理
go反射原理 本文基于go1.13.15 1.go汇编 1.1 基本语法 go采用plan9的汇编器完成汇编,有下面几个重要的伪寄存器 FP: Frame pointer: 局部变量访问 PC: Pr ...