《计算机网络——自顶向下方法》运输层——无连接运输:UDP
2020-02-16 本文已影响0人
YAN_DAOJIANG
无连接运输:UDP
运输层最低限度必须提供一种复用、分解服务,以便在网络层与正确的应用及进程之间传递数据。UDP就是只做了运输层协议能够做的最少工作。除了复用/分解功能及少量的差错检测之外,它几乎没有对IP增加别的东西。在使用UDP时,发送方和接收方的运输层实体之间没有握手,正因为如此,UDP被称为是无连接的。
既然TCP提供了可靠的数据传输服务,而UDP不能提供,那么TCP是否总是首选?答案是否定的,因为许多应用程序更适合用UDP,原因主要有以下几点:
- 关于合适、发送什么数据的应用层控制更为精细;
- 无需连接建立 ,UDP不会引起建立连接的时延;
- 无连接状态 ,TCP需要在端系统中维护连接状态,此连接状态包括接收和发送缓存,拥塞控制参数以及序号与确定号参数。要实现TCP可靠数据传输与拥塞控制这些状态信息是必要的。另一方面,UDP不需要维护这些状态信息,也不跟踪这些参数,因此,某些撞门用于某种特定应用的服务器当应用程序运行在UDP而不是在TCP上时,一般都能支持更多的活跃用户。
-
分组首部开销小, 每个TCP报文段都有20字节的首部开销,而UDP仅有8字节的开销。
需要提出的是:使用UDP的应用时可以实现可靠数据传输的,这可以通过在应用程序自身中建立可靠机制来完成。
UDP报文段结构
UDP报文段结构如下图所示。应用层数据占用UDP报文段的数据字段。UDP的首部只有4个字段,每个字段有两个字节组成。通过端口号可以使目的主机将应用数据交给运行在目的端系统中的相应进程。长度字段指示了在UDP报文段中的字节数(首部加数据)。因为数据字段的长度在一个UDP段中不用一在另一个段中,故需要一个明确的长度。接收方使用检验和来检查该报文段中是否出现了差错。实际上计算检验和时,除了UDP报文段以外还包括了IP首部的一些字段。
image
UDP检验和
UDP检验和提供了差错检测功能。检验和用于确定当UDP报文段从源到达目的地移动时,其中的比特是否发生了改变。
发送方的UDP报文段中的所有16比特的字的和进行反码运算,求和遇到溢出时都被回卷(将异常位加到最低位)。得到的结果放在UDP报文段中的检验和字段。
举例来说我们有下满3个16比特的字:
这些16比特的字的前两个之和是:
再将上面的和与第三个字相加是:
※ 最后一次加法有溢出它要被回卷。
因此将该和求反码的结果是:,这变为了检验和。
在接收方,全部的4个比特字(包括检验和)加在一起。如果该分组中没有引入差错,则显然在接收方处该和将是.如果这些比特之一是0,那么我们就知道分组中已经出现了差错。