LV06-02-网络基础-08-UDP协议

本文主要是网络基础——UDP协议的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows windows11
Ubuntu Ubuntu16.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
SecureCRT Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日
开发板 正点原子 i.MX6ULL Linux阿尔法开发板
uboot NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)
linux内核 linux-4.15(NXP官方提供)
STM32开发板 正点原子战舰V3(STM32F103ZET6)
点击查看本文参考资料
点击查看相关文件下载
--- ---

一、UDP协议简介

1. UDP是什么?

UDPUser Datagram Protocol即用户数据报协议,它也是一种传输层协议,它是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

2. UDP协议特点

  • 没有各种连接:在传输数据前不需要建立连接,也避免了后续的断开连接。
  • 不重新排序:对到达顺序混乱的数据包不进行重新排序。
  • 没有确认:发送数据包无须等待对方确认。因此,使用 UDP 协议可以随时发送数据,但无法保证数据能否成功被目标主机接收。

3. 适用场景

  • 发送小尺寸数据(如对DNS服务器进行IP地址查询时)

  • 在接收到数据,给出应答较困难的网络中使用UDP(如:无线网络)。

  • 适合于广播/组播式通信中。

  • MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议。

  • 流媒体、VODVoIPIPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输。

4. 与TCP的区别

4.1 连接方面

  • TCP 是面向连接的传输层协议,传输数据前先要建立连接。
  • UDP 是不需要连接,即刻传输数据。

4.2 服务对象方面

  • TCP 是一对一的两点服务,即一条连接只有两个端点。
  • UDP 支持一对一、一对多、多对多的交互通信。

4.3 可靠性方面

  • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。
  • UDP 是尽最大努力交付,不保证可靠交付数据。

4.4 拥塞控制和流量控制

  • TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
  • UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。

4.5 首部开销

  • TCP 首部长度较长,会有一定的开销,首部在没有使用选项字段时是 20 个字节,如果使用了选项字段则会变长的。
  • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

4.6 传输方式

  • TCP 是流式传输,没有边界,但保证顺序和可靠。
  • UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。

4.7 分片不同

  • TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
  • UDP 的数据大小如果大于MTU大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。

二、UDP报文格式

1. 报文图示

UDP报文格式如下图所示:

image-20220623202813106

2. 字段说明

源端口 这个字段占据 UDP 报文头的前 16 位,通常包含发送数据报的应用程序所使用的 UDP 端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选的,所以发送端的应用程序不一定会把自己的端口号写入该字段中。如果不写入端口号,则把这个字段设置为 0。这样,接收端的应用程序就不能发送响应了。
目的端口接收端计算机上 UDP 软件使用的端口,占据 16 位。
包长度 该字段占据 16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8。
校验和 该字段占据 16 位,可以检验数据在传输过程中是否被损坏。