Menu Close

用户数据包协议(UDP )及应用

在TCP/IP协议中,传输层协议有UDP和TCP协议,UDP(User Datagram Protocol)又称为用户数据包协议,在TCP/IP协议中是无连接的协议。因此UDP协议在IP路由时是否能准确到达目的主机是不能保证的。既没有包序检查,也没有超时重发机制,因此如何使用UDP协议完全由用户决定。

1. UDP的应用场景

但UDP协议相比TCP协议也有众多的优点,首先UDP使用比较简单,,不需要复杂的握手过程,其次由于没有负载的超时重传机制,对于某些应用场景传输速度更快,传输延迟小。第三UDP支持多播协议,是的远程会议等应用程序是惟一的选择。UDP一般用在对少量的数据丢失不敏感的场景,如实时语音或图像的传输,虽然有可能会有部分数据丢失,但在不影响理解的情况下,由于传输延时小,往往是比较好的选择。特别是多方视频或语音会议的使用,使UDP 得到广泛的应用,如微信视频会议就采用UDP协议进行网络通信。

2. UDP头部结构:

UDP的头部结构非常简单,总共8个字节,由16位Source Port, 16位Destination Port,16位UDP数据报长度,16位UDP校验和构成,如图1所示。

%title插图%num

图1

  • 端口号

是主机对应的一个应用端口:如 Echo的端口为 7,TFTP 为69, SMTP为 25, DNS 为53, DHCP为 67等,两台主机如果用UDP协议,双方都要指定端口号。已知端口号一般都在1024以内,目前随着应用程序的增加,已知端口号已接近5000,因此如果要开发特定的应用程序,自定义端口号一般在5000以上。

  • UDP数据长度:

此字段标记了整个数据报(UDP的首部+UDP数据)的长度

  • UDP 校验和

UDP校验和是可选字段,可以使用校验和,也可以不使用校验和。

如果不使用校验和,则校验和字段应填充0。

如果使用校验和,UDP 校验和的计算方法如下:

(1)伪头部构建:如下图,在UDP或TCP的Checksum的计算中,不仅要包含数据部分及UDP/TCP的头部,同时还要包含IP头的一部分信息,构成伪头部进行UDP/TCP checksum的计算。

(2)UDP的第9个字节设为零

(3)UDP伪头部长度等于UDP头部长度

(4)UDP的校验和先设为0

(5)按照16位方式求和(参见IP头的计算或下文的例1)

(6)有进位位,加回和中(如果再产生进位位,再加回和中),直到最终结果小于等于16’hffff

(7)取反

(8)结果填到校验和的位置

%title插图%num

图2

例1:

%title插图%num

图3

表1

项名称 数值 运算
源IP Address:  c0 a8 01 64  (192.168.1.100) 16’hc0a8 + 16’h0164 +
目的IP Address:  c0 a8 00 3c (192.168.0.60) 16’hc0a8 + 16’h003c +
IP 上层协议类型 : 11 (17) , UDP 16’h0011 +
UDP长度: 0d  (13)  16’h000d +
UDP 源Port: 1f40 (8000) 16’h1f40 +
UDP 目的Port: 1f41 (8001) 16’h1f41 +
UDP长度: 0d  (13)  16’h000d +
UDP数据: ef ec 16’hefec +
UDP数据: 3d d6 16’h3dd6 +
UDP数据: c5 16’hc500
= 32’h3b45e
16’hb45e + 16’h3
= 16’hb46e
~(取反)
校验和: = 16‘h4b9e

 

  • UDP接收端校验

接收的计算与IP头部checksum的计算类似,但是也要首先构建伪首部,然后与UDP包一起参与计算,结果为0,接收正确,否则接收错误。

  • 最大传输单元MTU

MTU (Maximum transportation unit) 1)标准的以太网MTU: UDP属于传输层,下面我们由下至上一步一步来看: 以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的。 这个1500字节被称为链路层的MTU(最大传输单元)。 但这并不是指链路层的长度被限制在1500字节,其实这个MTU指的是链路层的数据区并不包括链路层的首部和尾部的18个字节。所以事实上这个1500字节就是网络层IP数据报的长度限制。因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节。而这个1480字节就是用来放TCP传来的TCP报文段或UDP传来的UDP数据报的。又因为UDP数据报的首部8字节,所以UDP数据报的数据区最大长度为1472字节。这个1472字节就是我们可以使用的字节数。 2)有些网路因为缓冲区的限制,不能做到超过缓冲区字节数,因次在发送数据包时就会将大的数据包拆分成小的数据进行发送,因次才会出现IP拆包与组包的过程,也解释标志及片偏移字段进行控制。 3)一旦IP包有拆包的的过程,IP的checksum将在每个子包当中重新计算,如果网络是以太网,则以太网的MAC层的CRC32也要重新计算。

思考题:如果UDP的数据报只有4个字节,整个网络包应如何构建?

 

Posted in FPGA, FPGA, 教材与教案, 文章, 资料区

1 Comment

发表评论

相关链接