传输层在「尽力而为」的 IP(见第 5 章)之上,靠端口号提供进程到进程通信,只给两种方式:不可靠的 UDP、可靠的 TCP。
IP 地址定位主机,端口号定位主机上的进程。二者合起来(IP:端口)叫 socket(见第 9 章)。
| 端口范围 | 类别 | 说明 |
|---|---|---|
| 0–1023 | 知名端口 | 由 IANA 分配,HTTP 80、HTTPS 443、DNS 53、SSH 22 |
| 1024–49151 | 注册端口 | 企业/应用可注册 |
| 49152–65535 | 动态/私有端口 | 客户端临时使用 |
端口号 16 位,共 65536 个;一个 IP:端口 对唯一标识连接的一端。
UDP 极简:无连接、无握手、无确认、无重传、无拥塞控制,发了就完。首部只 8 字节:
0 15 16 31
┌────────────────────┬────────────────────┐
│ 源端口 │ 目的端口 │ 4 字节
├────────────────────┼────────────────────┤
│ 长度 │ 校验和 │ 4 字节
└────────────────────┴────────────────────┘
适用:DNS 查询(见第 2 章)、音视频直播、游戏实时状态、DHCP。
TCP 面向连接、可靠、字节流,首部至少 20 字节:
0 15 16 31
┌───────────────┬───────────────┬───────────────────┐
│ 源端口 │ 目的端口 │ 序号 seq │
├───────────────┴───────────────┼───────────────────┤
│ 确认号 ack │ 数据偏移|保留|标志 │
├───────────────────────────────┼───────────────────┤
│ 窗口大小 │ 校验和 | 紧急指针 │
├───────────────────────────────┴───────────────────┤
│ 选项(可变长)+ 填充 │
└───────────────────────────────────────────────────┘
| 维度 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接(三次握手) | 无连接 |
| 可靠性 | 确认 + 重传,保证到达 | 不保证,可能丢、乱序、重复 |
| 顺序 | 保证有序 | 不保证 |
| 传输模式 | 字节流(无边界) | 报文(保留边界) |
| 首部开销 | ≥20 字节 | 8 字节 |
| 流量/拥塞控制 | 有 | 无 |
| 延迟 | 较高(握手、重传、拥塞控制) | 低 |
| 典型应用 | HTTP、FTP、SSH、邮件 | DNS、直播、游戏、DHCP |
对比:TCP 用握手、超时重传、滑动窗口、拥塞控制换可靠与公平,代价是延迟与开销;UDP 全扔掉换极低开销,可靠性交给应用层。