计算机网络传输层UDP协议
UDP包头
格式
源端口号(16位) | 目标端口号(16位) |
|
|
数据 | |
当一个包在网络中传输,最终到达目标机器时。目标机器首先会通过IP
头中的8位协议判断这个包属于什么协议,如果解析后发现这个包是一个UDP
包,目标机器就会按照以上所示的UDP
包头的格式解析。
解析完成后,这个UDP
包中的数据就会被解析出来,然后根据目标端口号将数据交给对应的应用程序。
UDP协议的三个特点
简单:
UDP
协议非常简单,没有复杂的数据结构,处理逻辑,大量包头字段。不会根据网络状态情况来控制接受和发送的速度,即没有拥塞机制。面向无连接:所谓的建立连接,是为了在客户端和服务端之间维护连接而建立一定的数据结构来维护双方交互的状态。用这样的数据结构保证所谓的面向连接的特性。
UDP的使用场景
需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用。
不需要一对一建立连接,而是可以广播的应用。
需要处理速度快,时延低,可以容忍少数丢包,但是要求即使网络拥塞,也要保证接收和发送速度的时候。
UDP的实际应用
网页或者APP的访问:原来访问网页或者APP都是基于
http
协议的,http
协议是基于TCP
协议的。因此,每次访问都需要建立连接,如果网络波动造成连接中断,TCP
协议还会重新连接,耗费时间。Google提出了QUIC
(全称Quick UDP Internet Connections
),目的是降低网络通信的延迟,提供更好的用户交互体验。流媒体协议:直播协议多使用
RTMP
,这个协议也是基于TCP
的。TCP
的严格顺序传输要保证前一个包收到了,下一个才能确认,这对于直播来说显然不合适,用户希望看到最新的直播,而不能因为旧的包没有收到,就卡顿住看不了最新的。因此很多直播应用基于UDP
协议实现了自己的视频传输协议。实时游戏:联机对战的游戏对实时性要求很高,在团战中卡顿1秒这波团战可能就输了。因此在游戏对实时性要求很高的情况下,采用自定义的可靠的
UDP
协议,自定义重传策略,尽量减少网络问题对游戏性造成的影响。物联网:物理网可能只是个内存非常小的嵌入式系统,维护
TCP
协议的代价太大。Google旗下的Nest建立Thread Group,基于UDP
协议推出了物联网通信协议Thread。移动通信领域:在4G网络里,移动流量上网的数据面对的协议
GTP-U
是基于UDP
的。因为移动网络协议比较复杂,而GTP
协议本身就包含复杂的手机上线下线的通信协议。如果基于TCP
,TCP
的机制就显得非常多余。