运输层最低按限度必须提供一种复用/分解服务,以便在网络层与正确的应用级进程之间传递数据。
使用UDP的时候,在发送报文段之前,发送方和数据方的运输层实体之间没有握手,故被称作是无连接的。DNS是一个通常使用UDP的应用层协议的例子。
使用UDP的几点原因:
- **关于何时、发送什么数据的应用层控制更为精细。**只要应用进程将数据传递给UDP,UDP就会将此数据打包进UDP报文段并立即将其传递给网络层。实时应用通常要求最小的发送速率,不希望过分延迟报文段的传送,且能容忍一些数据丢失,TCP服务模型不太符合。
- **无需连接建立。**UDP不会引入建立连接的时延。
- 无连接状态。TCP需要在端系统中维护连接状态,包括接收和发送缓存、拥塞控制参数以及序号与确认号的参数。故可以支持更多的活跃用户。
- 分组首部开销小。每个TCP报文段有20字节的首部开销,UDP仅有8字节。
如果多个客户启动流式高比特率视频而不是用任何拥塞控制的话,就会使路由器中有大量的分组溢出,以至于几乎没有UDP分组能成功的通过源到目的的路径传输。
使用UDP的应用是可以实现可靠数据传输的,可以通过在应用程序中自身建立可靠性机制来完成。
应用进程可以进行可靠通信,而无需受制于由TCP拥塞控制机制,也无需受制于传输速率限制。
UDP报文段结构
应用层数据占用UDP报文段的数据字段。
UDP首部只有4个字段,每个字段2个字节,共 4 × 2 × 4 = 32 b i t 4×2×4=32 bit 4×2×4=32bit
通过端口号可以使目的主机将应用数据交给运行在目的端系统中的相应进程-执行分解功能
长度字段指示了在UDP报文段中的字节数-首部加应用数据,接收方可以用于检验该报文段是否出现差错。
UDP 检验和
UDP检验和提供差错检测的功能。
发送方的UDP对报文段中的所有16比特字的和进行反码运算,求和时遇到的任何溢出都被回卷(即把溢出的最高位和低16位做加法运算)。得到的结果被放在UDP报文段中的检验和字段。
发送方具体的做法:先将16比特字相加,如果溢出则回卷,得到的结果计算反码,也即0-1互换,结果为检验和
接收方的具体做法:将报文中的全部16比特字以及检验和加在一起,如果该分组没有引入差错,接收方处该和将是111111111111
。如果这些比特之一是0,那么分组可能出了差错。
UDP提供检验差错的原因:不能保证源和目的之间的所有链路都提供差错检测
端到端原则:因为某种功能必须基于端到端实现(UDP差错检验即为其一实例)