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 位,可以检验数据在传输过程中是否被损坏。 |