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) |
点击查看本文参考资料
| 参考方向 | 参考原文 |
| TCP协议 | 图解网络介绍 | 小林coding (xiaolincoding.com) |
| UDP协议 | UDP协议简介 (biancheng.net) |
| UDP协议 | UDP_百度百科 (baidu.com) |
一、UDP协议简介
1. UDP是什么?
UDP,User Datagram Protocol即用户数据报协议,它也是一种传输层协议,它是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
2. UDP协议特点
- 没有各种连接:在传输数据前不需要建立连接,也避免了后续的断开连接。
- 不重新排序:对到达顺序混乱的数据包不进行重新排序。
- 没有确认:发送数据包无须等待对方确认。因此,使用
UDP协议可以随时发送数据,但无法保证数据能否成功被目标主机接收。
3. 适用场景
发送小尺寸数据(如对
DNS服务器进行IP地址查询时)在接收到数据,给出应答较困难的网络中使用
UDP(如:无线网络)。适合于广播/组播式通信中。
MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议。流媒体、
VOD、VoIP、IPTV等网络多媒体服务中通常采用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报文格式如下图所示:
2. 字段说明
| 源端口 | 这个字段占据 UDP 报文头的前 16 位,通常包含发送数据报的应用程序所使用的 UDP 端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选的,所以发送端的应用程序不一定会把自己的端口号写入该字段中。如果不写入端口号,则把这个字段设置为 0。这样,接收端的应用程序就不能发送响应了。 |
| 目的端口 | 接收端计算机上 UDP 软件使用的端口,占据 16 位。 |
| 包长度 | 该字段占据 16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8。 |
| 校验和 | 该字段占据 16 位,可以检验数据在传输过程中是否被损坏。 |