UDP总论
UDP(User Datagram Protocol)用户数据报协议和TCP(Transmission Control Protocol)传输控制协议是传输层最重要的两个协议.相比TCP,UDP不能验证接收方是否收到,不想TCP那样具有可靠性.UDP只尽最大能力交付,适用于不要求传输质量只要求传输时效性的情况.
UDP数据包
UDP数据包由标头和数据组成.
数据包如下:
源端口(16bit) | 目的端口(16bit) | 长度(16bit) | 校验和(16bit) | 数据 |
---|
校验和部分主要是用来校验数据包的正确性,UDP可以通过校验和来提供数据正确性验证,但无法自动修正.有错只能丢弃
UDP与TCP
UDP有如下几个特点:
- 无连接
- 不可靠
- 不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制
- 保留消息边界
- 开销小、效率高
那么相对应的,TCP的特点如下:
- 有连接
- 可靠
- 不保留消息边界
- 开销比UDP大
无连接
TCP发送数据是必须建立连接的,而UDP不用建立连接.
不可靠
UDP发送数据不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制
UDP不提供可靠交付,只会通过检验和去丢弃那些不完整的报文,尽最大努力来保证交付的可靠性。
1.UDP协议不提供重复消除
说UDP协议不可靠,是因为当你使用它发送数据时,并不能保证你的数据真的能被送到目标机器的目的端口,而是有可能发生丢失或重复。而TCP协议保证你发送的数据会被并且仅仅会被接收到一次。
2.UDP协议不提供队列管理
队列管理指的是是否保证消息的顺序。UDP发送12345个包可能由于网络的问题,接收方收到的数据包可能是13245这样的无序数据.或者会产生数据包丢失.
保留消息边界
在阻塞模式下,UDP的通信是以数据包作为界限的,即使server端的缓冲区再大也要按照client发包的次数来多次接收数据包,server只能一次一次的接收,client发送多少次,server就需接收多少次,即客户端分几次发送过来,服务端就必须按几次接收。
比如发送的数据包是:
这是 | 一个U | DP的数据 | 包 | 示范 |
---|
接收方收到的可能是:
一个U | 这是 | 包 | DP的数据 | 示范 |
---|
对照TCP而言:
发送数据包:
这是 | 一个U | DP的数据 | 包 | 示范 |
---|
接收数据可能是:
这是 | 一 | 个UDP的数 | 据包示 | 范 |
---|
UDP应用
DNS协议是基于UDP协议的
基于DNS的组播网络,可以实现服务间的同步,但限于UDP报文的长度限制,不推荐。