UDP协议
UDP即用户数据报协议,是一种无连接的传输层协议,提供面向消息的简单不可靠信息传送服务。
报头
UDP报头占用8个字节,分别是2个字节长的源和目的端口号,以及2个字节长的数据报长度和2个字节长的校验和
UDP和TCP的校验和都是基于包头和数据本身,UDP在计算校验和时会加上12字节的伪头部(包含IP的数据包的信息)
TCP和UDP的区别
- TCP面向连接,UDP无连接,即发送数据之前不需要建立连接
- TCP提供可靠的传输服务,即通过TCP传输的数据是无差错,不丢失,不重复,且按序到达,UDP尽最大努力交付数据,不保证一定可靠
- TCP通过校验和,重传,序号,滑动窗口,确认应答等实现可靠传输,而UDP没有这些机制
- UDP实时性好,工作效率高,适用于对高速传输和实时性有较高的通信或广播通信(UDP有数据就发送,没有nagle等优化算法),UDP没有拥塞控制,即便网络拥塞也不会降低源主机的发送速率
- TCP只能是一对一,端到端的通信,而UDP支持多播和广播
- TCP是基于字节流的协议,UDP是基于数据包的协议(发一个收一个)
TCP和UDP的应用场景
TCP注重的是可靠性,而UDP则注重的是实时性,如果对于发送的数据要求保证可靠性,不能出错或者丢失,则用TCP,而如果要求数据有实时性,则用UDP
- UDP一般用于实时性高的场景,比如视频通话,语音通话,视频直播等(视频聊天等一般而言一点卡顿是可以接受的,如果用TCP那么TCP有超时重传,等重传了,你现在可能看到一起的画面和声音,则会很怪异,所以用UDP更好,如果用TCP那么需要关闭nagle和延迟确认)
- TCP一般用于可靠性要求高的应用,比如http,FTP文件传输等
https://blog.csdn.net/lotluck/article/details/52688851
UDP广播和组播(多播)
- 广播,即一个主机将数据发送给整个广播网络中的所有主机,当主机收到消息后根据端口号来决定是否使用此广播信息(即广播中还是包含接收者的端口号,如果主机某些端口号不可用,则会丢弃此广播),广播会带来广播网络中某些主机不必要的负载,因为广播会发送给所有主机(虽然主机可以通过端口号来过滤掉)
- 组播,虽然有广播,可以将数据发送给广播域内的所有主机,但是这样无疑会增加不需要广播的主机的负担,所以考虑使用组播,需要接收数据的各个主机都加入一个多播组,一个主机可以随时加入或者离开多播组,一个主机也可以属于一个或者多个多播组。源主机将单个分组发送一个组播地址(就是个路由器,多播组维护在路由器中),该组播地址标识一组主机,然后网络(路由器)把该数据报给分组中的每个主机都拷贝一份
- 组播的好处在于,减轻了网络的负载,提高了网络利用率,减轻了发送者的负担,但是组播不提供可靠的服务
- 组播的应用一般在视频点播或者视频会议,或者直播平台中
UDP如何实现其可靠性
UDP本身不实现可靠性,但是可以在应用层为其实现可靠性,即还是用确认机制,超时重传等机制
几种常见的基于UDP且实现了可靠性机制的应用层协议
RUDP /RTP/UDT等