第 3 章 · 传输层:UDP 与 TCP

传输层在「尽力而为」的 IP(见第 5 章)之上,靠端口号提供进程到进程通信,只给两种方式:不可靠的 UDP、可靠的 TCP。

3.1 端口号:进程的「门牌」

IP 地址定位主机,端口号定位主机上的进程。二者合起来(IP:端口)叫 socket(见第 9 章)。

端口范围类别说明
0–1023知名端口由 IANA 分配,HTTP 80、HTTPS 443、DNS 53、SSH 22
1024–49151注册端口企业/应用可注册
49152–65535动态/私有端口客户端临时使用

端口号 16 位,共 65536 个;一个 IP:端口 对唯一标识连接的一端。

3.2 UDP:无连接、尽最大努力交付

UDP 极简:无连接、无握手、无确认、无重传、无拥塞控制,发了就完。首部只 8 字节

 0                   15 16                  31
┌────────────────────┬────────────────────┐
│      源端口         │      目的端口       │  4 字节
├────────────────────┼────────────────────┤
│      长度           │      校验和         │  4 字节
└────────────────────┴────────────────────┘
  • 长度:UDP 首部 + 数据的总字节数;校验和:可选,用于校验错误。
  • 特点:快、开销小、不可靠、不保序;应用层可自己在 UDP 之上实现可靠(如 QUIC)。

适用:DNS 查询(见第 2 章)、音视频直播、游戏实时状态、DHCP。

3.3 TCP 首部字段

TCP 面向连接、可靠、字节流,首部至少 20 字节

 0                   15 16                  31
┌───────────────┬───────────────┬───────────────────┐
│     源端口      │     目的端口    │      序号 seq      │
├───────────────┴───────────────┼───────────────────┤
│        确认号 ack              │ 数据偏移|保留|标志   │
├───────────────────────────────┼───────────────────┤
│       窗口大小                 │ 校验和 | 紧急指针    │
├───────────────────────────────┴───────────────────┤
│            选项(可变长)+ 填充                      │
└───────────────────────────────────────────────────┘
  • 序号 seq / 确认号 ack:按字节编号,保证有序与确认(见第 4 章)。
  • 标志位:SYN(建连)、FIN(断连)、ACK(确认)、RST(复位)、PSH(推送)、URG(紧急)。
  • 窗口大小:流量控制依据,告诉对方「我还能收多少」(见第 4 章)。

3.4 TCP vs UDP:全维度对比

维度TCPUDP
连接面向连接(三次握手)无连接
可靠性确认 + 重传,保证到达不保证,可能丢、乱序、重复
顺序保证有序不保证
传输模式字节流(无边界)报文(保留边界)
首部开销≥20 字节8 字节
流量/拥塞控制
延迟较高(握手、重传、拥塞控制)
典型应用HTTP、FTP、SSH、邮件DNS、直播、游戏、DHCP

对比:TCP 用握手、超时重传、滑动窗口、拥塞控制换可靠与公平,代价是延迟与开销;UDP 全扔掉换极低开销,可靠性交给应用层。