第5章 运输层
章节概述
运输层为应用进程提供端到端的通信服务,屏蔽网络层的细节。两个核心协议:TCP(可靠、有序、面向连接)和 UDP(不可靠、无序、无连接)。本章难点在于 TCP 的流量控制、拥塞控制和连接管理。
核心概念
- [[05-运输层|端口号]] 与 [[06-应用层|Socket]]
- [[UDP协议]]
- [[05-运输层|TCP]]
- [[05-运输层|停止等待]] 与 [[05-运输层|ARQ]]
- [[05-运输层|滑动窗口]]
- [[05-运输层|TCP流量控制]]
- [[TCP拥塞控制]]
- [[TCP三次握手]] 与 [[05-运输层|TCP四次挥手]]
5.1 运输层基本概念
端口(Port)
- 标识进程(不是主机):IP地址+端口号 = 套接字(Socket)
- 熟知端口:0–1023(HTTP:80, HTTPS:443, FTP:21, SSH:22, DNS:53, SMTP:25)
- 注册端口:1024–49151
- 临时端口:49152–65535
复用与分用
- 复用:多个进程使用同一网络层(向下)
- 分用:根据端口号将报文分发给不同进程(向上)
5.2 UDP
特点: - 无连接,不保证可靠交付 - 尽最大努力,开销小(8字节首部) - 保留报文边界(不像TCP是字节流) - 适合:实时应用(视频、DNS、DHCP)
5.3 TCP
标志位:URG, ACK, PSH, RST, SYN, FIN
TCP特点:全双工、面向连接、面向字节流、有序、可靠。
5.4 可靠传输机制
停止等待协议(SW)
- 发送一帧 → 等待确认 → 再发下一帧
- 信道利用率极低:\(U = rac{T_D}{T_D + RTT + T_A}\)
连续ARQ(滑动窗口)
- 发送窗口 \(W_T\):可连续发送但未确认的帧数
- 累积确认:确认 \(n\) 表示 \(n\) 及之前全部正确收到
- Go-Back-N:出错后重传出错帧及之后所有帧
- SACK(选择确认):TCP可选项,精确告知哪些段已收到
5.5 TCP流量控制
接收端通过窗口字段(rwnd, receiver window)控制发送速率:
- 接收缓冲区满时,rwnd = 0,发送方停止
- 窗口打开后,接收方发送窗口更新报文
- 持续计时器(Persist Timer):防止窗口更新丢失导致死锁
5.6 TCP拥塞控制(重点)
四个算法
1. 慢开始(Slow Start) - 初始 cwnd = 1 MSS - 每收到一个ACK:cwnd += 1 MSS(指数增长)
2. 拥塞避免(Congestion Avoidance) - 每个 RTT:cwnd += 1 MSS(线性增长) - cwnd 超过慢开始门限 ssthresh 后进入此阶段
3. 快重传(Fast Retransmit) - 收到 3个重复ACK → 立即重传,不等超时
4. 快恢复(Fast Recovery) - 快重传后:ssthresh = cwnd/2,cwnd = ssthresh(不归1) - 直接进入拥塞避免阶段
超时事件:ssthresh = cwnd/2,cwnd = 1,重新慢开始。
5.7 TCP连接管理
三次握手(建立连接)
客户端 服务器
──── SYN(seq=x) ────────────────→
←─── SYN+ACK(seq=y,ack=x+1) ────
──── ACK(ack=y+1) ──────────────→
(连接建立)
四次挥手(释放连接)
主动方 被动方
──── FIN(seq=u) ────────────────→
←─── ACK(ack=u+1) ──────────────
←─── FIN(seq=v) ────────────────
──── ACK(ack=v+1) ──────────────→
等待 2MSL 后关闭
参见
- [[04-网络层]] — IP提供的服务
- [[06-应用层]] — HTTP/DNS等使用TCP/UDP
- [[TCP拥塞控制]] — CUBIC、BBR等现代算法
- [[06-应用层|Socket编程]] — Socket API使用