目录
1. UDP 与 TCP 的区别
- UDP(User Datagram Protocol,用户数据报协议)
- TCP(Transmission Control Protocol,传输控制协议)
简单来说,TCP 是面向连接的,而 UDP 是面向无连接的。
在互通之前,面向连接的协议会先建立连接。例如,TCP 会三次握手,而 UDP 不会。
所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性
- 例如,TCP 提供可靠交付,通过 TCP 连接传输的数据,无差错、不丢失、不重复,并且按序到达;而 UDP 继承了 IP 包的特性,不保证不丢失,不保证按顺序到达
- 再如,TCP 是面向字节流的,发送的时候发的是一个流,没头没尾;而 UDP 继承了 IP 的特性,是基于数据报的,一个一个的收发
- 最后,TCP 可以有拥塞控制,当意识到网络环境变差,就会根据情况调整自己的行为;而 UDP 就不会
综上,TCP 其实是一个有状态的服务,精确记录着发送和接收的状态;而 UDP 则是无状态服务,不会在意发送和接收是否出现差错。
可以这样比喻:如果 MAC 层定义了本地局域网的传输行为,IP 层定义了整个网络端到端的传输行为,这两层基本定义了这样的基因:网络传输是以包为单位的,二层叫帧,网络层叫包,传输层叫段,暂时笼统的称之为包。包单独传输,自行选路,在不同的设备封装解封装,不保证到达。基于这个基因,生下来的孩子 UDP 完全继承了这些特性,几乎没有自己的思想。
2. UDP 包头部
无论应用程序写的使用 TCP 传数据,还是 UDP 传数据,都要监听一个端口。正是这个端口,用来区分应用程序。
3. UDP 的三大特点
- 沟通简单:不需要大量的数据结构、处理逻辑、包头字段等,秉承性善论,相信网络通路默认就是很容易送达的,不容易被丢弃的
- 轻信他人:UDP 不会建立连接,虽然有端口号,但是监听在这个地方,谁都可以传给它数据,它也可以传给任何人数据,甚至可以同时传给多个人数据
- 不会根据网络情况进行发包的拥塞控制:无论网络丢包有多严重,它该怎么发还怎么发
4. UDP 的三大使用场景
- 需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用:类似 DHCP、PXE 中下载系统镜像所用的 TFTP 都是基于 UDP 协议
- 不需要一对一沟通、建立连接,而是可以广播的应用:UDP 的不面向连接的功能,可以承载广播或者多播的协议
- 需要处理速度快、时延低,可以容忍少数丢包:即便网络拥塞,也毫不退缩,一往无前,继续该怎么发包就怎么发
其他一些使用 UDP 的场景:
- Google 提出的 QUIC(Quick UDP Internet Connections,快速 UDP 互联网连接)
- 直播等流媒体的协议
- 实时游戏
- IoT 物联网
- 移动通信领域