第五章 传输层(⭐⭐⭐⭐⭐)
4 分钟阅读1,695 字12 个小节
第五章 传输层(⭐⭐⭐⭐⭐)
5.1 传输层服务与端口
- 端到端逻辑通信:传输层为应用进程提供逻辑通信
- 复用与分用:多个进程共享同一网络层连接
- 端口分类:
- 熟知端口:0~1023(HTTP 80、FTP 21、DNS 53 等)
- 登记端口:1024~49151
- 动态端口:49152~65535(临时分配)
套接字 = IP地址 + 端口号,唯一标识网络中的一个通信端点。
5.2 UDP
- 无连接、尽最大努力交付、首部仅8B
- 支持多播/广播,实时性好
- 面向报文:应用层交下来多大的报文就发多大,不合并不拆分
UDP首部4字段
| 字段 | 长度 | 说明 |
|---|---|---|
| 源端口 | 16位 | 可选(全0表示不需回复) |
| 目的端口 | 16位 | 必填 |
| 长度 | 16位 | 首部+数据的总长度(最小8B) |
| 校验和 | 16位 | 可选(全0表示不校验) |
UDP校验(伪首部)
- 12字节伪首部:源IP(4B) + 目的IP(4B) + 全零(1B) + 协议号17(1B) + UDP长度(2B)
- 伪首部仅参与校验和计算,不实际发送
- 校验范围:伪首部 + UDP首部 + 数据(若数据为奇数字节则补0)
5.3 TCP(核心 ⭐⭐⭐⭐⭐)
一、TCP报文段首部(完整16字段)
| 字段 | 位数 | 说明 |
|---|---|---|
| 源端口 | 16 | — |
| 目的端口 | 16 | — |
| 序号 | 32 | 本报文段数据的第一个字节编号 |
| 确认号 | 32 | 期望收到的下一个字节编号 |
| 数据偏移 | 4 | 首部长度,单位4B(最小5=20B,最大15=60B) |
| 保留 | 6 | 置0 |
| URG | 1 | 紧急指针有效 |
| ACK | 1 | 确认号有效(连接建立后通常=1) |
| PSH | 1 | 接收方应尽快交付应用层 |
| RST | 1 | 复位连接 |
| SYN | 1 | 同步序号(建立连接) |
| FIN | 1 | 释放连接 |
| 窗口 | 16 | 接收方的接收窗口大小(rwnd) |
| 校验和 | 16 | 含伪首部(协议号改为6) |
| 紧急指针 | 16 | URG=1时有效,指出紧急数据末尾偏移 |
| 选项 | 0~320 | MSS、窗口扩大、时间戳等 |
二、三次握手与四次挥手
三次握手:
- 客户端 → 服务器:SYN=1,seq=x
- 服务器 → 客户端:SYN=1,ACK=1,seq=y,ack=x+1
- 客户端 → 服务器:ACK=1,seq=x+1,ack=y+1(可携带数据)
为什么是三次而不是两次?(⭐ 高频考点)
防止已失效的连接请求到达服务器。若只有两次握手,一个迟到的旧SYN到达服务器后,服务器会认为是新连接并分配资源,但客户端不会响应 → 服务器资源浪费(半开连接)。第三次握手让服务器确认客户端确实还在。
四次挥手:
- 客户端 → 服务器:FIN=1,seq=u
- 服务器 → 客户端:ACK=1,ack=u+1(服务器进入 CLOSE-WAIT)
- 服务器 → 客户端:FIN=1,ACK=1,seq=w,ack=u+1
- 客户端 → 服务器:ACK=1,ack=w+1(客户端进入 TIME-WAIT=2MSL)
TIME-WAIT = 2MSL 的两个原因
- 确保最后一个ACK到达:若这个ACK丢失,服务器会重传FIN,客户端在2MSL内可以重发ACK
- 让旧分组在网络中消亡:等待2MSL后,本连接的所有旧报文段都已过期,不会干扰新连接
TCP释放连接最短时间(2022真题)
从客户端发出FIN到完全关闭的最短时间 = 发送FIN + 等待ACK + 等待对方FIN + 发送ACK + 2MSL = 约 3RTT + 2MSL(具体取决于题目条件)
⚠️ 陷阱:SYN 与 FIN 都各自消耗一个序号。ACK不消耗序号。
三、可靠传输与流量控制
- 可靠性五要素:确认、超时重传、校验、排序、去重
- 快速重传:3个重复ACK触发(不等超时)
- 发送窗口:
超时重传时间计算(加权RTT)
其中 通常取 1/8,DevRTT 为偏差的加权平均。
TCP 持续计时器与零窗口探测(⭐)
- 当接收方通告窗口为0时,发送方启动持续计时器
- 计时器到期后发送零窗口探测报文(1字节数据)
- 接收方回复当前窗口值 → 若仍为0则重置计时器,否则恢复发送
- 目的:防止窗口更新报文丢失导致死锁
MSS(最大报文段长度)
- MSS = MTU - IP首部(20B) - TCP首部(20B),以太网 MSS 典型值 = 1460B
- 在三次握手时通过选项字段协商
四、拥塞控制四算法(⭐⭐⭐⭐⭐)
| 算法 | 触发条件 | cwnd变化 |
|---|---|---|
| 慢开始 | 初始/超时后 | 每收到1个ACK,cwnd+1 MSS(指数增长) |
| 拥塞避免 | cwnd ≥ ssthresh | 每个RTT,cwnd+1 MSS(线性增长) |
| 快重传 | 3个重复ACK | 立即重传丢失报文段 |
| 快恢复 | 快重传后 | ssthresh=cwnd/2,cwnd=ssthresh+3MSS |
关键规则:
- 超时:
ssthresh = cwnd/2,cwnd = 1 MSS,重新慢开始 ← 最严厉 - 3个重复ACK:
ssthresh = cwnd/2,cwnd = ssthresh + 3MSS(Reno),进入快恢复→拥塞避免 - 慢开始→拥塞避免的切换点:cwnd = ssthresh
cwnd 演化数值算例(⭐ 必考)
例:初始 cwnd=1,ssthresh=16
RTT轮次 1 2 3 4 5 6~16 ... cwnd 1 2 4 8 16 17,18,... ... 阶段 慢开始 慢开始 慢开始 慢开始 →拥塞避免 拥塞避免 ... 若在 cwnd=24 时发生超时:ssthresh=12,cwnd=1,重新慢开始 若在 cwnd=24 时收到3个重复ACK:ssthresh=12,cwnd=12+3=15,进入快恢复/拥塞避免
拓展阅读(非408必背,但提升理解上限)
- TCP CUBIC:以时间为自变量调整窗口,现代Linux默认拥塞控制,长肥管道下吞吐更稳
- BBR:基于带宽与RTT建模,目标是接近瓶颈带宽并控制排队时延
- 对408答题建议:主线仍按 Reno 口径作答,若题干明确“现代TCP/生产网络”,可在结论后补一句 CUBIC/BBR 认知
📌 第五章总结
- TCP是408计网最高频主题
- TCP首部16字段、三次握手/四次挥手的序号变化必须熟练
- "为什么是三次握手"和"TIME-WAIT=2MSL原因"是高频论述题
- 拥塞控制:超时 vs 3重复ACK 的处理差异必须区分
- cwnd演化图是每年必考的计算/画图题核心
- 持续计时器、MSS、加权RTT是高频选择题点
- 关联陷阱编号:#8 #9 #14 #15 #16
🎯 第五章 Top-Down 案例模板(端到端可靠与高效)
| 步骤 | 提问模板 | 本章落点 |
|---|---|---|
| 连接 | 题目是否涉及建连/拆连? | 三次握手、四次挥手、TIME-WAIT |
| 可靠 | 丢包靠什么发现? | ACK/超时/重传 |
| 流控 | 发送方能发多快? | |
| 拥塞 | 是超时还是3重复ACK? | Reno两条分支 |