**在 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 两个关键问题
-
一个进程是否可以绑定多个端口号? ------ 可以
-
一个端口号是否可以被多个进程绑定? ------ 通常不可以(除非使用
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的数据时,必须在应用层手动处理:
-
发送端:将大数据手动拆分为多个不超过64KB的数据包,多次发送
-
接收端:接收所有数据包,按序重组,恢复原始数据
这实际上是在应用层重新实现了类似TCP的分段与重组逻辑。
六、基于UDP的应用层协议
尽管UDP不可靠,但其低延迟、无连接、开销小的特性使其在特定场景下不可替代:
| 协议 | 全称 | 用途 |
|---|---|---|
| NFS | 网络文件系统 | 分布式文件共享 |
| TFTP | 简单文件传输协议 | 轻量级文件传输(如无盘工作站启动) |
| DHCP | 动态主机配置协议 | 自动分配IP地址 |
| BOOTP | 启动协议 | 无盘设备启动 |
| DNS | 域名解析协议 | 域名到IP地址的映射查询 |
此外,在实时音视频通话、在线游戏、物联网传感器数据采集等对延迟敏感的场景中,开发者也常基于UDP自定义应用层协议,并在应用层实现必要的可靠性保障(如自定义确认、重传、前向纠错等机制)。