复制指南-UDP

此次介绍的主要是两大重要协议之一UDP,

一般常规用途如下

复制指南-UDP

UDP详解

UDP是传输层的协议,用户数据报协议UDP只在IP的数据报服务至上增加了复用和分用的功能以及差错检测的功能。拥有面向无连接的报文,不可靠传输的特点。UDP对应用层交下来的数据只添加首部,并进行特别的处理,就交给网络层;对网络层传递上来的用户数据报拆封首部后,原封不动的交给应用层,由于UDP提供不可靠服务,具有TCP所没有的优势
复制指南-UDP

UDP 特点:

  1. UDP无连接,时间上不存在建立连接需要的时延。空间上,TCP需要在端系统中维护连接状态,需要一定的开销。此连接装入包括接收和发送缓存,拥塞控制参数和序号与确认号的参数。UCP不维护连接状态,也不跟踪这些参数,开销小。空间和时间上都具有优势。
    举个例子:

  2. DNS如果运行在TCP之上而不是UDP,那么DNS的速度将会慢很多。
    HTTP使用TCP而不是UDP,是因为对于基于文本数据的Web网页来说,可靠性很重要。
    同一种专用应用服务器在支持UDP时,一定能支持更多的活动客户机。

  3. 分组首部开销小**,TCP首部20字节,UDP首部8字节。

  4. UDP没有拥塞控制,应用层能够更好的控制要发送的数据和发送时间,网络中的拥塞控制也不会影响主机的发送速率。某些实时应用要求以稳定的速度发送,能容 忍一些数据的丢失,但是不能允许有较大的时延(比如实时视频,直播等)

  5. UDP提供尽最大努力的交付,不保证可靠交付。所有维护传输可靠性的工作需要用户在应用层来完成。没有TCP的确认机制、重传机制。如果因为网络原因没有传送到对端,UDP也不会给应用层返回错误信息

  6. UDP是面向报文的,对应用层交下来的报文,添加首部后直接乡下交付为IP层,既不合并,也不拆分,保留这些报文的边界。对IP层交上来UDP用户数据报,在去除首部后就原封不动地交付给上层应用进程,报文不可分割,是UDP数据报处理的最小单位。
    正是因为这样,UDP显得不够灵活,不能控制读写数据的次数和数量。比如我们要发送100个字节的报文,我们调用一次sendto函数就会发送100字节,对端也需要用recvfrom函数一次性接收100字节,不能使用循环每次获取10个字节,获取十次这样的做法。

  7. UDP常用一次性传输比较少量数据的网络应用,如DNS,SNMP等,因为对于这些应用,若是采用TCP,为连接的创建,维护和拆除带来不小的开销。UDP也常用于多媒体应用(如IP电话,实时视频会议,流媒体等)数据的可靠传输对他们而言并不重要,TCP的拥塞控制会使他们有较大的延迟,也是不可容忍的

首部格式

·用户数据报UDP分为两个字段:数据字段和首部字段,从图来分析用户数据报UDP的首部格式。复制指南-UDP
UDP首部字段很简单,由4个字段组成,每个字段的长度都是两个字节,共8字节。

  1. 源端口 原端口号,在需要对方回信时选用,不需要时可全0
  2. 目的端口 目的端口号,这在终点交付报文时必须使用,不然数据交给谁呢?
  3. 长度 UDP的长度,最小值为8字节,仅有首部
  4. 检验和 检测用户数据报在传输过程是否有错,有错就丢弃。
  5. 在传输的过程中,如果接收方UDP发现收到的报文中的目的端口不存在,会直接丢弃,然后由网际控制报文协议ICMP给发送方发送“端口不可达”差错报文。
伪首部

计算校验和时,需要在UDP之前增加12个字节的伪首部。这种首部并不是用户数据报的真正首部。伪首部并不在网络中传输,只是在计算检验和,临时添加在UDP用户数据报前,得到一个临时的用户数据报。

UDP的校验和是把首部和数据部分一起校验,发送方计算校验和的一般步骤:

  1. 将首部的校验和字段填充为0(零)
  2. 把伪首部和用户数据报UDP看出16位的字符串连接起来
  3. 如果数据部分不是偶数字节,则填充一个全零字节(该字节不发送到网络层)
  4. 按二进制反马计算出这些16位字的和
  5. 然后将和写入校验和字段,就可以发送到网络层了。
  6. 接收方收到用户数据报后,连同伪首部一起,按二进制反码求这些16位字的和,无差错结果是应全为1.否则出错,直接丢弃该报文。复制指南-UDP
注意事项
  1. 校验时,若UDP数据报部分的长度不是偶数个字节,则需要填入一个全0字节,但是次字节和伪首部一样,是不发送的。
  2. 如果UDP校验和校验出UDP数据报是错误的,可以丢弃,也可以交付上层,但是要附上错误报告,告诉上层这是错误的数据报。
  3. 通过伪首部,不仅可以检查源端口号,目的端口号和UDP用户数据报的数据部分,还可以检查IP数据报的源IP地址和目的地址。
    这种差错检验的检错能力不强,但是简单,速度快