传输层协议 UDP:无连接、不可靠,但高效

**在 TCP/IP 协议栈中,传输层承担着端到端通信的重任。UDP(User Datagram Protocol,用户数据报协议)**作为传输层的两大核心协议之一,常常被拿来与 TCP 做对比。如果说 TCP 是"打电话",那么 UDP 更像"寄信"------简单、快速,但不保证送达。


一、传输层概述

传输层是TCP/IP协议栈中承上启下的关键层次,其核心职责是确保数据能够从发送端可靠地传输到接收端 。与网络层仅负责"点到点"的主机寻址不同,传输层通过**端口号(Port)**机制实现了更细粒度的"端到端"进程间通信。

1.1 端口号的作用

端口号用于标识一台主机上不同的应用程序。例如,同一台服务器(如 172.23.12.14)可以同时运行FTP服务(TCP 21)、SSH服务(TCP 22)、SMTP服务(TCP 25)和HTTP服务(TCP 80)。当网络层通过IP地址将数据包送达目标主机后,传输层通过端口号决定将该数据交给哪个应用进程处理。

1.2 五元组标识通信

在TCP/IP协议中,一个完整的通信连接由五元组唯一标识:

  • 源IP地址

  • 源端口号

  • 目的IP地址

  • 目的端口号

  • 协议号

可以通过 netstat -n 命令查看当前系统的网络连接状态。


二、端口号范围划分

范围 类型 说明
0 - 1023 知名端口号 分配给HTTP、FTP、SSH等广泛使用的应用层协议
1024 - 65535 动态端口号 由操作系统动态分配,通常用于客户端程序

2.1 常见知名端口号

服务 协议 端口号
SSH TCP 22
FTP TCP 21
Telnet TCP 23
HTTP TCP 80
HTTPS TCP 443

💡 查看本机服务端口映射执行 cat /etc/services 命令可查看系统中注册的知名端口号。

2.2 两个关键问题

  1. 一个进程是否可以绑定多个端口号? ------ 可以

  2. 一个端口号是否可以被多个进程绑定? ------ 通常不可以(除非使用 SO_REUSEADDR 等特殊选项)


三、UDP协议详解

3.1 UDP协议头格式

UDP报文头部结构非常简洁,仅包含4个字段:

  • 16位源端口号:标识发送方进程(可选,若为0表示不回复)

  • 16位目的端口号:标识接收方进程

  • 16位UDP长度:表示整个数据报(UDP首部 + UDP数据)的最大长度

  • 16位校验和:用于检测数据在传输过程中是否出错;若校验失败,直接丢弃该报文

3.2 UDP的核心特点

UDP的传输过程类似于寄信------发出后不再过问,也没有确认回执。

特性 说明
无连接 知道对端IP和端口号就直接传输,无需建立连接(如TCP的三次握手)
不可靠 没有确认机制,没有重传机制;网络故障导致数据丢失时,UDP不会向应用层返回任何错误信息
面向数据报 不对数据进行拆分或合并,保持应用层报文的边界

3.3 面向数据报的含义

应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并。

示例:用UDP传输100字节的数据

  • 发送端调用一次 sendto,发送100字节

  • 接收端必须调用一次 recvfrom,接收100字节

  • ❌ 不能循环调用10次 recvfrom,每次接收10字节

这种"报文边界"的保持是UDP与TCP流式传输的本质区别。


四、UDP的缓冲区机制

4.1 发送缓冲区

UDP没有真正意义上的发送缓冲区。 调用 sendto 后,数据直接交给内核,由内核将数据传给网络层协议进行后续传输。这种设计使得UDP发送具有低延迟的特性。

4.2 接收缓冲区

UDP具有接收缓冲区,但有以下特点:

  • 不保证收到的UDP报文顺序与发送顺序一致(乱序到达)

  • 若缓冲区已满,新到达的UDP数据将被直接丢弃

  • 不会发生阻塞或等待,体现UDP的"尽力而为"特性

4.3 全双工通信

UDP的Socket既能读也能写,这种特性称为全双工------同一时刻可以同时进行数据的发送和接收。


五、UDP使用注意事项

5.1 数据包大小限制

UDP协议首部中的16位长度字段决定了单个UDP数据报的最大长度为64KB(包含UDP首部)。

⚠️ 在当今互联网环境下,64KB是一个非常小的数字。高清图片、视频流、大文件等远超此限制。

5.2 解决方案:应用层分包与重组

当需要传输超过64KB的数据时,必须在应用层手动处理:

  1. 发送端:将大数据手动拆分为多个不超过64KB的数据包,多次发送

  2. 接收端:接收所有数据包,按序重组,恢复原始数据

这实际上是在应用层重新实现了类似TCP的分段与重组逻辑。


六、基于UDP的应用层协议

尽管UDP不可靠,但其低延迟、无连接、开销小的特性使其在特定场景下不可替代:

协议 全称 用途
NFS 网络文件系统 分布式文件共享
TFTP 简单文件传输协议 轻量级文件传输(如无盘工作站启动)
DHCP 动态主机配置协议 自动分配IP地址
BOOTP 启动协议 无盘设备启动
DNS 域名解析协议 域名到IP地址的映射查询

此外,在实时音视频通话、在线游戏、物联网传感器数据采集等对延迟敏感的场景中,开发者也常基于UDP自定义应用层协议,并在应用层实现必要的可靠性保障(如自定义确认、重传、前向纠错等机制)。