为什么UDP头只有八个字节?
在弄清楚为什么是8个字节之前,先弄清楚UDP是什么?
UDP(User Datagram Protocol), 中文翻译过来是用户数据包协议。它是一种无连接的传输层协议,提供了简单不可靠的信息传送服务。UDP的传输和IP传输类似,我们可以将UDP看做IP协议暴露在传输层的一个接口。
那么为什么不直接使用IP协议,而要使用UDP协议呢?一个重要的原因是因为IP协议中没有端口(Port)的概念。IP协议是地址到地址的传输,但是每台计算机有多个端口,多个通信通道。
UDP的主要特点是:
-
无连接的。发送数据和TCP不同,不需要在传输之前进行握手的操作,因此减小了开销和发送数据的时延。
-
UDP是不可靠的,所以会丢失数据,以保证其最大化的数据传输,主机不需要维护状态表。
-
UDP没有拥塞的控制。
-
UDP支持一对多,多对多,多对一,一对一的通信。
-
UDP的头部只有8个字节,比TCP头部20个字节要短。
那么UDP头为什么是8个字节呢?
首先,我们要知道,UDP协议头只包含了4个字段,分别是:
-
源端口
-
目的端口
-
包长度
-
校验码
每一个字段都占16bit,也就是2个字节。
我们可以将应用到应用之间的传输过程分成两个部分:主机到主机的数据传输和主机到应用的数据转发。IP协议会负责数据包在主机到主机的传输,UDP协议头的端口号用于定位处理数据的具体进程并转发数据。
都说UDP是传输层协议,其实真正完成数据传输工作的是IP协议,而UDP协议只起到了定位的作用。
TCP/IP协议将通信分成了四个抽象层,分别是链路层(Link)、网络层(Internet)、传输层(Transport)和应用层(Application)
TCP/UDP等传输层协议的主要作用是为应用建立基本的数据管道;而IP等网络层协议则是寻址和路由,虽然UDP属于传输层协议,但是本身是没有提供主机到主机传输数据的能力的。
总结:
UDP协议是基于IP协议的上层协议,提供了数据的基本传输功能,它的作用就是提供端口号让一个机器可以提供多个对外的服务,由于不可靠,所以相对于TCP头部的32个字节,UDP头部只有8个字节。
因为UDP协议很简单,很多新的传输层协议都会基于UDP实现,例如QUIC协议。