本文基于《计算机网络——自顶向下方法》一书
无连接运输:UDP
UDP只是做了运输协议能够做的最少工作。除了复用/分解功能海燕少量的差错检测之外,它几乎没有对IP增加别的东西。事实上,如果程序员选择UDP,则该应用程序差不多就是直接与IP打交道。使用UDP发送报文段之前,发送方和接收方的运输层实体之间并没有握手。正因如此,UDP是无连接的。
UDP的优点有以下几点:
- 关于发送什么数据以及何时发送的应用层控制更为精细。TCP为了保证其报文送达,会一直发送数据报知道目的主机收到并且加以确认,不管可靠交付需要用多长时间。而UDP只会把数据报发送出去之后就不管了。因为实时应用(比如直播、网络电话等)对最小发送速率有要求,而且不希望过分的延迟报文段传送,并且可以容忍一些数据丢失,因此这些应用可以使用UDP构建
- 无需建立连接。TCP在开始传输数据之前需要经过三次握手,但是UDP可以不进行任何准备就开始传输数据,因此UDP没有建立连接的时延。这也是DNS建立在UDP智商的主要原因。
- 无连接状态。TCP需要维护连接状态,包括接收和发送缓存,拥塞控制参数以及序号和确认好的参数。而UDP不维护连接状态,也不需要这些参数。因此,某些专门用于某种特定应用的服务器在使用UDP时会能支持更多的活跃用户。
- 分组首部开销小 每个TCP报文段都有20自洁的首部开销,而UDP仅有8字节的开销。
因此,电子邮件、远程终端访、Web等运行在了TCP上,而DNS运行在UDP上。但是对于视频流媒体是否使用UDP仍然有争议,因为如果每个人都启用流式高比特率视频而不使用任何拥塞控制,则会使得路由器的缓存被快速耗尽,导致路由有大量的分组溢出。以至于只有非常少的UDP分组能够成功通过源传输到目的地。
3.3.1 UDP报文段结构
UDP首部只有四个字段,每个字段有两个字节组成。长度字段知识了UDP报文段中的字节数(首部加数据)。接收方使用校验和来检查报文是否出了差错。
3.3.2 UDP校验和
UDP校验和提供了差错检测的功能,就是说校验和用于确定当UDP报文段从源到达目的地移动时,其中的比特是否发生了改变。
假定我们有如下三个16bit的字:
一、0110011001100000 二、0101010101010101 三、1000111100001100
一和二和三相加为0100101011000010
则将这个和作反码运算得1011010100111101,这个就是UDP的的校验和。如果该分组中没有在传输中出现差错,则在接收方处将报文中的所有字相加,并且和校验和相加,得出的结果为1111111111111111。如果得出的结果出现了0,则证明传输出现了差错。但是虽然UDP提供了差错检测,但是它对恢复差错无能为力,它只能丢弃受损的报文段或者将受损的报文段交给应用程序并给出警告。