UDP是运输层的协议,所以呢在这要稍微提一下运输层了。
运输层为相互通信的应用进程提供逻辑通信。它向高层用户屏蔽了下面网络核心的细节
运输层还有一个重要的功能:复用(发送方不同的应用进程都可以使用同一个运输层协议传送数据)和分用(接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程)
UDP在传输数据之前不需要先建立连接,远地主机的运输层在收到UDP报文之后,不需要给出任何的确认,因此UDP是不可靠的传输。虽然如此,但是在某些情况下UDP却是一种最有效的工作方式。
UDP的主要特点:
- UDP是无连接的,即发送数据之前不需要建立连接,因此会减少开销和发送数据之前的时延
- UDP是不可靠的,即它会尽最大努力交付,因此主机不需要维持复杂的连接状态表
- UDP是面向报文的,即UDP一次会交付一个完整的报文。这就出现了一个问题:假设应用层选择的报文过长,UDP把它交给IP层之后,会使IP数据报的首部的相对长度太大,会降低IP层的效率
- UDP没有拥塞机制:网络出现的拥塞不会使源主机的发送速率过低
- UDP支持一对一,一对多,多对一和多对多的交互通信
- UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短
UDP的首部格式:
UDP有两个字段:数据字段和首部字段。首部字段只有8个字节,由4个字段组成,分别是
- 源端口:在需要对方回信时选用
- 目的端口:在重点交付报文时必须要使用到
- 长度:UDP用户数据报文长度
- 校验和:检测UDP用户数据报在传输中是否有错,有错就丢弃
UDP首部校验和的计算方法:
在计算校验和的时候,要在UDP用户数据报之前增加12个字节的伪首部。伪首部临时添加在UDP用户数据报前面,得到一个临时的UDP用户数据报。伪首部仅仅是为了计算校验和而存在的,不向下传送也不向上递交。