运输层及 UDP 协议

2019-09-07

告知你不为人知的UDP-疑难杂症和使用

UDP概述

用户数据报协议 UDP 只在数据报服务上增加了复用分用的功能以及差错检测的功能;UDP 的传输效率比 TCP 高。

UDP 的主要特点是:
  1. UDP无连接的,即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。
  2. UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表(这里面有许多参数)。
  3. UDP面向报文的。发送方的 UDP 对应用程序交下来的报文,在添加首部后就向写交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这就是说,应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。如下图所示。在接收方的 UDP ,对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程。也就是说,UDP 一次交付一个完整的报文。因此,应用进程必须选择合适大小的报文。若报文太长,UDP 把它交给 IP 层后,IP 层在传送时可能要进行分片,这回降低 IP 层的效率。反之,若报文太短,UDP 把它交给 IP 层后,会使 IP 数据报的首部的相对长度太大,这也降低了 IP 层的效率。

UDP是面向报文的

  1. UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。如 IP 电话、实时视频会议等要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延。UDP 正好符合这种要求。

  2. UDP支持一对一、一对多、多对一和多对多的交互通信

  3. UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。

虽然某些实时应用需要使用没有拥塞控制的 UDP,但当很多的源主机同时都向网络发送高速率的实时视频流时,网络就有可能发生拥塞,结果大家都无法正常接收。因此,不使用拥塞控制功能的 UDP 有可能会引起网络产生严重的拥塞问题。

还有一些使用 UDP 的实时应用,需要对 UDP 的不可靠的传输进行适当的改进,以减少数据的丢失。在这种情况下,应用进程本身可以在不影响应用的实时性的前提下,增加一些提高可靠性的措施,如采用前向纠错重传已丢失的报文

UDP 的首部格式

UDP用户数据报的首部和伪首部

当运输层从 IP 层收到 UDP 数据报时,就根据首部中的目的端口,把 UDP 数据报通过相应的端口,上交最后的终点——应用进程。

请注意,虽然在UDP 之间的通信要用到其端口号,但由于 UDP 的通信是无连接的,因此不需要使用套接字(TCP 之间的通信必须要在两个套接字之前建立连接)。

在计算检验和时,要在 UDP 用户数据报之前增加 12 个字节的伪首部。伪首部并不是 UDP 用户数据报真正的首部。只是在计算检验和时,临时添加在 UDP 用户数据报前面,得到一个临时的 UDP 用户数据报。检验和就是按照这个临时的 UDP 用户数据报来计算的。伪首部既不向下传送也不向上递交,而仅仅是为了计算检验和。UDP 的检验和是把首部和数据部分一起都检验

二进制反码求和运算:从低位到高位逐列进行计算。0 和 0 相加是 0,0 和 1 相加是 1, 1 和 1 相加是 0 但要产生一个进位 1,加到下一列。若最高位相加后产生进位,则最后得到的结果要加 1(即最高位产生的进位加到最后一位)。如下图所示:
IP 数据报首部检验和的计算过程.jpg

计算 UDP 检验和的例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值