摘自 趣谈网络协议 | 极客时间

目录

1. UDP 与 TCP 的区别

  • UDP(User Datagram Protocol,用户数据报协议
  • TCP(Transmission Control Protocol,传输控制协议

简单来说,TCP面向连接的,而 UDP面向无连接的。

在互通之前,面向连接的协议会先建立连接。例如,TCP 会三次握手,而 UDP 不会。

所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性

  1. 例如,TCP 提供可靠交付,通过 TCP 连接传输的数据,无差错、不丢失、不重复,并且按序到达;而 UDP 继承了 IP 包的特性,不保证不丢失,不保证按顺序到达
  2. 再如,TCP 是面向字节流的,发送的时候发的是一个流,没头没尾;而 UDP 继承了 IP 的特性,是基于数据报的,一个一个的收发
  3. 最后,TCP 可以有拥塞控制,当意识到网络环境变差,就会根据情况调整自己的行为;而 UDP 就不会

综上,TCP 其实是一个有状态的服务,精确记录着发送和接收的状态;而 UDP 则是无状态服务,不会在意发送和接收是否出现差错。

可以这样比喻:如果 MAC 层定义了本地局域网的传输行为IP 层定义了整个网络端到端的传输行为,这两层基本定义了这样的基因:网络传输是以包为单位的,二层叫帧,网络层叫包,传输层叫段,暂时笼统的称之为包。包单独传输,自行选路,在不同的设备封装解封装,不保证到达。基于这个基因,生下来的孩子 UDP 完全继承了这些特性,几乎没有自己的思想

2. UDP 包头部

无论应用程序写的使用 TCP 传数据,还是 UDP 传数据,都要监听一个端口。正是这个端口,用来区分应用程序

UDP 包头
UDP 包头

3. UDP 的三大特点

  1. 沟通简单:不需要大量的数据结构、处理逻辑、包头字段等,秉承性善论,相信网络通路默认就是很容易送达的,不容易被丢弃的
  2. 轻信他人:UDP 不会建立连接,虽然有端口号,但是监听在这个地方,谁都可以传给它数据,它也可以传给任何人数据,甚至可以同时传给多个人数据
  3. 不会根据网络情况进行发包的拥塞控制:无论网络丢包有多严重,它该怎么发还怎么发

4. UDP 的三大使用场景

  1. 需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用:类似 DHCP、PXE 中下载系统镜像所用的 TFTP 都是基于 UDP 协议
  2. 不需要一对一沟通、建立连接,而是可以广播的应用:UDP 的不面向连接的功能,可以承载广播或者多播的协议
  3. 需要处理速度快、时延低,可以容忍少数丢包:即便网络拥塞,也毫不退缩,一往无前,继续该怎么发包就怎么发

其他一些使用 UDP 的场景

  • Google 提出的 QUIC(Quick UDP Internet Connections,快速 UDP 互联网连接
  • 直播等流媒体的协议
  • 实时游戏
  • IoT 物联网
  • 移动通信领域

参考文章

  1. 趣谈网络协议 | 极客时间