UDP在IP数据报服务之上增加复用分用的功能,以及差错检测的功能(使用UDP的原因)
(所以应用进程不可以跳过UDP直接交给IP层)
UDP特点:
(1)UDP无连接:发送数据之前不需要建立连接
(2)UDP尽最大努力交付,不保证可靠交付
(3)UDP面向报文
发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。
UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。
应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。
接受方的UDP,对IP层交上来的UDP用户数据报,在去除首部后酒原封不动交付给上层的应用进程。
也就是说,UDP一次交付一个完整的报文。
因此,应用程序必须选择合适大小的报文。若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片,这会降低IP层的效率。报文太短,UDP交给IP层后,会使IP数据报的首部相对长度太大,降低IP的效率。
(4)UDP没有拥塞控制。
网络出现拥塞不会使源主机的发送速率降低,对实时应用很重要。
(5)UDP支持一对一、一对多、多对一、多对多的交互通信
(6)UDP首部开销小,只有8个字节。
UDP首部:
源端口号、目的端口号
长度:UDP用户数据报(包括首部和数据)
检验和:检测UDP用户数据报在传输中是否有错,有错就丢弃(简单地丢弃)。
检验和是可选的,如果不想计算检验和,检验和端就全为0。
伪首部:不是UDP用户数据报或TCP报文段真正的首部,只是在计算检验和时,临时添加在UDP用户数据报或TCP报文段的前面,得到一个临时的UDP用户数据报或TCP报文段。伪首部既不向下传送也不向上递交,仅仅用于计算运输层的检验和。
使用二进制反码求和再取反。
使用UDP而不适用TCP的场景:
【实时数据的传输】
互联网传输实时数据的分组时,有可能会出现差错甚至丢失。如果利用TCP协议对这些出错或丢失的分组进行重传,那么时延就会大大增加。所以,宁可丢失少量分组,也不要等待太晚到达的分组。
在连续的音频或视频数据流中,很少量分组的丢失对播放效果的影响并不大,因而是可以容忍的。
如果不是实时数据,就可以使用TCP传输。
【注重报文发送速度】
当网络出现拥塞时,TCP的拥塞控制就会让TCP的发送方放慢报文段的发送。可能有的应用程序就不愿意放满报文段的发送速度。
文件必须使用TCP传输。