跳转到主要内容

千兆网UDP通信

judy 提交于

作者:<span id="js_author_name" datarewardsn="" datatimestamp="" datacanreward="0">碎碎思</span> <span id="profileBt">来源:<a href="https://mp.weixin.qq.com/s?__biz=Mzg4ODA5NzM1Nw==&amp;mid=2247485295&am…微信公众号</a></span>

以太网帧格式
<center><img src="http://xilinx.eetrend.com/files/2020-05/%E5%8D%9A%E5%AE%A2/100049533-98…; alt=""></center>
<p align="center"><strong>图8‑12以太网帧格式</strong></p>

表8‑5以太网帧格式说明
<center><img src="http://xilinx.eetrend.com/files/2020-05/%E5%8D%9A%E5%AE%A2/100049533-98…; alt=""></center>

<strong>UDP协议分析</strong>

为什么UDP协议在FPGA实现时很受欢迎,最主要一个原因就是简单,简答到什么地步呢?UDP协议只是在IP的数据服务之上增加了复用和分用的功能和查错检验的功能。
<center><img src="http://xilinx.eetrend.com/files/2020-05/%E5%8D%9A%E5%AE%A2/100049533-98…; alt=""></center>
<p align="center"><strong>图8‑13 UDP协议示意图</strong></p>

从上图简单总结几个UDP的特点:

1、UDP是面向报文的,发送方的UDP只需要对应用数据报文添加相关首部后就向下交付,这个过程UDP对应用层交下来的数据报文,既不合并也不进行拆分,而是保留这些报文的边界;

2、UDP 是无连接的,从图中可以看出,UDP只是对应用数据添加首部后便以以太网帧格式进行发送,发送前不需要建立连接(发送数据结束时也没有连接可释放),减少了开销和发送数据之前的时延;

3、UDP 使用尽最大努力交付,即不保证可靠交付,主机不需要维持复杂的连接状态表;

4、UDP 没有拥塞控制,从上面可以看出,由于源主机只是进行发送(或接收),而不进行复杂的连接,从而网络出现的拥塞也不会使源主机的发送速率降低。(说白了,就是发送时我不管数据能不能被准确接收,接收时也不管数据是否准确)这对某些实时应用是很重要的;

5、UDP 支持一对一、一对多、多对一和多对多的交互通信;

6、UDP 的首部开销小,只有8个字节,比 TCP 的20个字节的首部要短。这就在产生首部时减少很多时间。

<strong>端口分用</strong>

上面提到UDP支持一对多交互通信,也就是端口分用。当运输层从 IP 层收到 UDP 数据报时,就根据首部中的目的端口,把 UDP 数据报通过相应的端口,上交最后的终点——应用进程:
<center><img src="http://xilinx.eetrend.com/files/2020-05/%E5%8D%9A%E5%AE%A2/100049533-98…; alt=""></center>
<p align="center"><strong>图8‑14 UDP基于端口的应用</strong></p>

如果接受方 UDP 发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用程序),就丢弃该报文,并由网际控制报文协议 ICMP 发送“端口不可达”差错报文给发送方

<strong>UDP 的首部格式</strong>

用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,由四个字段组成,每个字段都是两个字节

<strong>首部字段</strong>

源端口源端口号。在需要对方回信时。不需要时可用全0

目的端口目的端口号。这在终点交付报文时必须使用

长度 UDP 用户数据报的长度,其最小值是8(仅有首部)

检验和检测 UDP 用户数据报在传输中是否有错。有错就丢弃

<strong>伪首部</strong>

UDP 用户数据报首部中检验和的计算方法有些特殊。在计算检验和时,要在 UDP 用户数据报之前增加 12 个字节的伪首部。所谓“伪首部”是因为这种伪首部并不是 UDP 用户数据报真正的首部。只是在计算检验和时,临时添加在 UDP 用户数据报前面,得到一个临时的 UDP 用户数据报。检验和就是按照这个临时用户数据报来计算的。伪首部既不向下传也不向上递交,而仅仅是为了计算检验和。
<center><img src="http://xilinx.eetrend.com/files/2020-05/%E5%8D%9A%E5%AE%A2/100049533-98…; alt=""></center>
<p align="center"><strong>图8‑15 UDP用户数据报的首部和伪首部</strong></p>