2.1无连接传输——UDP协议

概述

由[RFC 768]定义的UDP知识做了运输协议能够做的最少工作。除了复用/分解功能及少量的差错检测外,他几乎没有对IP增加别的东西。选择UDP而不是TCP,则该应用程序差不多就是直接与网络层IP打交道。注意:使用UDP时在发送报文段之前,发送方和接收方的运输层实体之间没有握手,因此UDP是无连接的

哪些应用适合使用UDP协议呢?

  • 1.关于何时、发送什么数据的应用层控制更为精细。只要应用程序将数据传递给UDP,UDP就会将此数据打包进UDP报文段并立即将其传递给网络层。而且TCP有一个拥塞控制机制,可能会需要用较长时间完成可靠交付。如不希望过分延迟报文段发送,且能容忍一些数据丢失的应用。比如视频电话、网络会议等
  • 2.无需建立连接 相比于TCP3次握手,UDP无需任何准备即可进行数据传输,因此UDP不会引入建立连接的时延。比如DNS使用UDP协议,如果使用TCP协议则会慢很多
  • 3.分组首部开销小。每个TCP报文段有20字节的首部开销,而UDP仅有8字节的开销

下图为流行因特网应用及运输层使用协议:

 UDP报文段

UDP报文段结构:

UDP首部只有4个字段,每个字段由两个字节组成。

源端口号:标识源主机进程

目的端口号:标识目的主机上的相应进程

长度字段: 指示了在UDP报文段中的字节数(首部加数据)

检验和用于确定当UDP报文段从源到达目的地移动时,其中的比特是否发生了改变。

应用数据:应用层数据占用

检验和检验过程:

发送方的UDP对报文段中的所有16比特字的和进行反码运算,求和时遇到的任何溢出都被回卷。得到的结果被放在UDP报文段中的检验和字段。

假定有3个16比特的字为例:

注意到:最后一次加法有溢出,它要被回卷。反码运算后,0100101011000010变为1011010100111101,这变为了校验和。接收方全部的4个16比特的字(包含校验和)加在一起。如果没有差错结果应为1111111111111111。如果其中之一为0说明分组中出现了差错。

为什么UDP提供了检验和?

原因是由于不能保证源和目的之间的所有链路否提供给差错检测。即也许这些链路中的一条可能没有使用没有差错检测的协议。 UDP就必须在端到端基础上在运输层提供差错检测。这涉及到在系统设计中非常重要的“端到端原则”。

端到端原则表述为:因为某种功能必须基于端到端实现,与在较高级别提供这些功能的代价相比,在较低级别上设置的功能可能是冗余的或几乎没有价值的

猜你喜欢

转载自blog.csdn.net/weixin_39722922/article/details/88370821