赞
踩
UDP只在IP的数据报服务上增加了两个最基本的服务:复用和分用以及差错检验。UDP相对于TCP有以下优点:
UDP不需要建立连接。也就是说UDP不会有建立连接的时延。DNS如果运行在TCP上而不是UDP上,会慢很多,而HTTP之所以会运行在TCP上是因为对于基于文本数据的Web而言,数据链路的可靠性是很重要的。
无连接状态。TCP需要在端系统中维护连接状态,这个连接状态包括收发:缓存、拥塞控制参数、序号参数、确认号参数等数据。而UDP不用维护这些状态,也不用跟踪这些参数,所以使用UDP协议的服务器往往能支持更多的活动客户机。
分组首部开销小。TCP有20B的首部开销,而UDP只有8B的首部开销。
应用层能够更好地控制要发送的数据和数据的发送时间。UDP没有拥塞控制,网络中的拥塞不会影响主机的发送速率。有些应用需要以稳定的速度发送数据报,能够容许部分数据丢失,但不允许有较大的时延,正好UDP能满足需求
UDP支持一对一,一对多,多对一,多对多的通信
UDP通常用于一次性传输较少数据的网络应用。UDP不保证可靠交付,维护可靠性的工作可以由用户在应用层完成。UDP是面向报文的,也就是说不论应用层传给UDP多大的数据报,UDP都只是加个首部就往下传;对于从IP层传过来的数据报也是,只是把首部除去就往上传。
UDP数据报包含两部分:UDP首部和用户数据。UDP首部长度为8B,由4个字段组成,每个字段占2B
各个字段意义如下:
源端口:源端口号。在需要对方回信时选用,不需要的时候可以全为0
目的端口:目的端口号。在终点交付报文的时候必须使用到
长度:UDP数据报的长度(包括首部和数据部分),其最小值时8(只用到首部)
校验和:检验UDP数据报在传输中是否有出错。有错就丢弃。该字段为可选字段,当源主机不想计算校验和的时候,就直接令该字段为全0
当传输层从IP层收到UDP数据报的时候,就根据首部中的目的端口,把UDP数据报通过相应的端口上交给应用程序。
如果接收方UDP发现收到的报文中的目的端口号不正确(也就是说不存在对应于端口号的应用进程),那么就丢弃这个报文,并由ICMP发送"端口不可达报文"给发送方
这里说的校验指的是UDP数据报首部的校验和字段的计算方式。
在我们计算校验和的时候,需要在UDP数据报之前增加一个12B的伪首部,伪首部不是UDP真正的首部,只是在计算校验和的时候临时增加的一个用于计算的字段。伪首部既不向下传送又不向上递交,只是在传输层用于计算。
如图所示,伪首部由5个字段组成:
源IP地址:占4B,从IP层的首部获得
目的IP地址:占4B,从IP层的首部获得
全0字段:占1B
协议字段:占1B,写17意味着该处的协议是IP协议,也就是说这个伪首部伪的是IP数据报
UDP长度:占2B,指的是整个UDP数据报的长度
UDP校验和的计算方法和IP数据报首部校验和的计算方法相似,但是IP数据报的校验和只校验IP数据报的首部,而UDP的校验和会校验首部和数据部分。
发送方首先把全0放入校验和字段并添加伪首部,然后把UDP数据报视为许多个16位的自负穿接起来。如果UDP数据报的数据部分不是偶数个字节,那么就在数据部分末尾填入全0字节(这个字节不发送)。然后按照二进制反码计算出这16位字的和,将此和的二进制的反码写入校验和字段,然后发送出去。
接收方接收到这个UDP数据报后,将UDP数据报加上伪首部(如果不是偶数个字节,那么还需要补上全0字节)后,按照二进制反码进行求和,。当无差错时其结果应全为1,否则就表明出错了,接收方应该丢弃这个UDP数据报。
发送方的计算过程如图所示↑
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。