一、传输层核心功能
传输层的核心作用是确保数据能够从发送端的应用程序,准确传输到接收端的对应应用程序,核心解决 "数据交付到主机后,如何匹配到具体进程" 的问题。
二、端口号(Port)
2.1 端口号的定义与作用
- 端口号是 16 位整数(取值范围 0-65535),用于标识主机上进行网络通信的不同应用程序,实现 "IP 定位主机 + 端口号定位进程" 的二级定位。

- 通信唯一标识:在 TCP/IP 协议中,通过 "源 IP、源端口号、目的 IP、目的端口号、协议号"五元组 唯一标识一次网络通信,可通过
netstat -n命令查看当前系统的通信连接。
2.2 端口号范围划分
| 端口号范围 | 类型 | 特点与用途 |
|---|---|---|
| 0-1023 | 知名端口号 | 由 IANA(互联网数字分配机构)统一分配,对应固定应用层协议,供服务器端程序使用。 |
| 1024-65535 | 动态分配端口号 | 由操作系统在客户端程序发起连接时随机分配,使用后释放,避免占用知名端口。 |
2.3 常见知名端口号
| 应用层协议 / 服务 | 对应的知名端口号 | 用途 |
|---|---|---|
| SSH(安全外壳协议) | 22 | 远程登录服务器,实现安全的命令行操作 |
| FTP(文件传输协议) | 21 | 用于文件的上传与下载 |
| Telnet(远程终端协议) | 23 | 早期远程登录协议(安全性较低,现已较少使用) |
| HTTP(超文本传输协议) | 80 | 普通网页访问(未加密) |
| HTTPS(安全超文本传输协议) | 443 | 加密的网页访问(如电商、支付场景) |
2.4 端口号相关查询与注意事项
- 查看所有知名端口号映射:执行
cat /etc/services命令,可查看系统中预定义的端口号与服务对应关系。 - 自定义程序端口号:需避开 0-1023 的知名端口号,避免端口冲突导致程序启动失败。
2.5 端口号与进程的绑定问题
- 一个进程是否可以 bind 多个端口号? 可以。一个进程可通过多次
bind系统调用,绑定多个不同的端口号(如一个服务器进程同时监听 80 和 443 端口,分别处理 HTTP 和 HTTPS 请求)。 - 一个端口号是否可以被多个进程 bind? 不可以。端口号具有唯一性,一个端口号只能被一个进程绑定;若已绑定的端口号被其他进程再次尝试绑定,会返回 "端口已占用" 错误(如
Address already in use)。
三、UDP 协议(用户数据报协议)
3.1 UDP 协议首部格式

UDP 首部共 8 字节,包含 4 个字段,结构简单:
- 16 位源端口号:标识数据发送端的应用程序端口。
- 16 位目的端口号:标识数据接收端的应用程序端口。
- 16 位 UDP 长度:表示整个 UDP 数据报(首部 + 数据)的字节数,最大值为 65535(即 64K)。
- 16 位校验和:用于校验 UDP 数据报的完整性(若校验出错,数据报会被直接丢弃,不返回错误信息)。
3.2 UDP 的核心特点
(1)无连接
- 通信前无需建立连接,只需知道对方的 IP 和端口号,即可直接发送数据(类似 "寄信",无需提前确认对方是否在线)。
- 优势:减少连接建立 / 释放的开销,通信效率高;劣势:无法保证对方是否能接收数据。
(2)不可靠
- 无确认机制:发送端发送数据后,不要求接收端返回确认信息,无法确认数据是否送达。
- 无重传机制:若数据因网络故障丢失(如网络拥堵、链路中断),UDP 协议层不会重传,也不会向应用层返回错误信息。
- 无顺序保证:若多个 UDP 数据报因网络延迟差异到达接收端,可能出现 "后发先至" 的情况,UDP 不处理顺序问题。
(3)面向数据报
- 应用层交给 UDP 的数据会被当作一个 "完整的数据报",UDP 原样发送,不拆分、不合并。
- 收发数据规则:发送端调用 1 次
sendto发送 N 字节数据,接收端必须调用 1 次recvfrom接收全部 N 字节数据,不能分多次接收(如发送 100 字节,接收端不能循环 10 次每次接收 10 字节)。
3.3 UDP 的缓冲区特性
| 缓冲区类型 | 特点 |
|---|---|
| 发送缓冲区 | 无真正意义上的发送缓冲区:调用sendto后,数据直接交给内核,由内核传递给网络层,不暂存数据。 |
| 接收缓冲区 | 有接收缓冲区:用于暂存从网络层接收的 UDP 数据报,但不保证数据顺序(与发送顺序可能不一致);若缓冲区满,后续到达的 UDP 数据报会被直接丢弃。 |
3.4 UDP 的全双工特性
UDP 的 Socket(套接字)支持全双工通信,即同一个 Socket 既可以读取数据(接收),也可以写入数据(发送),无需额外创建新的 Socket。
3.5 UDP 使用注意事项
- 数据长度限制:UDP 数据报最大长度为 64K(含首部),若应用层需传输超过 64K 的数据,需在应用层手动 "分包"(拆分数据为多个 64K 以内的片段),并在接收端手动 "拼装"(按顺序合并片段)。
3.6 基于 UDP 的应用层协议
| 协议名称 | 用途 |
|---|---|
| NFS(网络文件系统) | 实现不同主机间的文件共享(如 Linux 服务器间的文件访问) |
| TFTP(简单文件传输协议) | 轻量级文件传输协议,适用于小型设备(如嵌入式设备)的文件传输 |
| DHCP(动态主机配置协议) | 为局域网内的设备自动分配 IP 地址、子网掩码、网关等网络配置 |
| BOOTP(启动协议) | 用于无盘设备(如无硬盘的服务器)从网络启动,获取启动镜像 |
| DNS(域名解析协议) | 将域名(如www.baidu.com)解析为对应的 IP 地址,便于用户访问 |
| 自定义应用层协议 | 开发 UDP 程序时,可根据需求自定义数据格式与交互规则(如即时通信、游戏数据传输) |