一. UDP基本认识
UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。UDP头部只有8个字节(64)位

- 目标和源端口:告诉UDP协议应该把报文发给哪个进程
- 包长度:该字段保存了UDP首部的长度跟数据的长度之和
- 校验和:为了提供可靠的UDP首部和数据设计,防止收到在网络传输中受损的UDP包。
二. TCP 和 UDP 有什么区别
- 连接
- TCP是面向连接的传输层协议,传输数据前要先建立连接
- UDP不需要建立连接,即刻传输数据
- 服务对象
- TCP是一对一的两点服务,一条连接只有两个端点
- UDP支持一对一 、一对多、多对多的交互通信
- 可靠性
- TCP是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达
- UDP是尽最大努力交付,不保证可靠交付数据
- 拥塞控制、流量控制
- TCP有拥塞控制和流量控制,保证数据传输的安全性
- UDP没有,即使网络十分拥堵了,也不会影响UDP的发送速率
- 首部开销
- TCP首部长度较长,有一定开销,首部在没有使用 选项 字段时是20个字节,如果使用了选项字段,则会变长
- UDP首部只有8个字节(64位),并且是固定不变的,开销小
- 传输方式
- TCP是面向字节流,流式传输,没有边界,但保证顺序和可靠
面向字节流的话,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP可以把他划分短一些再传送。如果应用程序一次只发送一个字节,TCP也可以等待积累足够多的字节后再构成报文发出去。(有发生粘包的可能)
- UDP是面向报文,一个包一个包的发送,是有边界的,但可能会丢包和乱序
面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此应用程序必须选择合适大小的报文,若报文太长,则IP层需要分片,降低效率。UDP对应用层交下来的报文,即不合并,也不拆分,而是保留这些报文的边界。应用层交给UDP多长的报文,UDP就照样发送,一次发送一个报文。
- 分片不同
- TCP的数据大小如果大于 MSS 大小,会在传输层进行分片,目标主机收到后,也会在传输层组装TCP数据包,如果中途丢失了一个分片,只需要传输丢失的分片
- UDP的数据大小如果大于MTU大小,会在IP层分片,目标主机收到后,会在IP层组装完数据,接着再发送给传输层。
三. 两者的应用场景
- TCP面向连接,可以保证数据的可靠性交付,常用于
- UDP面向无连接,可以随时发送数据,再加上本身的处理即简单又高效,因此常用于
- 包总量较少的通信,如 DNS、SNMP等
- 视频、音频等多媒体通信
- 广播通信
四. 为什么 UDP 头部没有「首部长度」字段,而 TCP 头部有「首部长度」字段呢?
因为TCP 有可变长的「选项」字段,而 UDP 头部长度则是不会变化的,无需多一个字段去记录 UDP 的首部长度。
五. 为什么 UDP 头部有「包长度」字段,而 TCP 头部则没有「包长度」字段呢?
一. UDP基本认识
UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。UDP头部只有8个字节(64)位
二. TCP 和 UDP 有什么区别
三. 两者的应用场景
四. 为什么 UDP 头部没有「首部长度」字段,而 TCP 头部有「首部长度」字段呢?
五. 为什么 UDP 头部有「包长度」字段,而 TCP 头部则没有「包长度」字段呢?