QEQuantumEinsteinSearchCtrl/⌘K

第五章 传输层(⭐⭐⭐⭐⭐)

4 分钟阅读1,69512 个小节
返回目录

第五章 传输层(⭐⭐⭐⭐⭐)

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
URG1紧急指针有效
ACK1确认号有效(连接建立后通常=1)
PSH1接收方应尽快交付应用层
RST1复位连接
SYN1同步序号(建立连接)
FIN1释放连接
窗口16接收方的接收窗口大小(rwnd)
校验和16含伪首部(协议号改为6)
紧急指针16URG=1时有效,指出紧急数据末尾偏移
选项0~320MSS、窗口扩大、时间戳等

二、三次握手与四次挥手

三次握手

  1. 客户端 → 服务器:SYN=1,seq=x
  2. 服务器 → 客户端:SYN=1,ACK=1,seq=y,ack=x+1
  3. 客户端 → 服务器:ACK=1,seq=x+1,ack=y+1(可携带数据)

为什么是三次而不是两次?(⭐ 高频考点)

防止已失效的连接请求到达服务器。若只有两次握手,一个迟到的旧SYN到达服务器后,服务器会认为是新连接并分配资源,但客户端不会响应 → 服务器资源浪费(半开连接)。第三次握手让服务器确认客户端确实还在。

四次挥手

  1. 客户端 → 服务器:FIN=1,seq=u
  2. 服务器 → 客户端:ACK=1,ack=u+1(服务器进入 CLOSE-WAIT)
  3. 服务器 → 客户端:FIN=1,ACK=1,seq=w,ack=u+1
  4. 客户端 → 服务器:ACK=1,ack=w+1(客户端进入 TIME-WAIT=2MSL)

TIME-WAIT = 2MSL 的两个原因

  1. 确保最后一个ACK到达:若这个ACK丢失,服务器会重传FIN,客户端在2MSL内可以重发ACK
  2. 让旧分组在网络中消亡:等待2MSL后,本连接的所有旧报文段都已过期,不会干扰新连接

TCP释放连接最短时间(2022真题)

从客户端发出FIN到完全关闭的最短时间 = 发送FIN + 等待ACK + 等待对方FIN + 发送ACK + 2MSL = 约 3RTT + 2MSL(具体取决于题目条件)

⚠️ 陷阱:SYN 与 FIN 都各自消耗一个序号。ACK不消耗序号。

三、可靠传输与流量控制

  • 可靠性五要素:确认、超时重传、校验、排序、去重
  • 快速重传:3个重复ACK触发(不等超时)
  • 发送窗口: Wsend=min(rwnd, cwnd)W_{send}=\min(rwnd,\ cwnd)

超时重传时间计算(加权RTT)

SRTTnew=(1α)SRTTold+αRTTsampleSRTT_{new} = (1-\alpha)\cdot SRTT_{old} + \alpha\cdot RTT_{sample} RTO=SRTT+4DevRTTRTO = SRTT + 4\cdot DevRTT

其中 α\alpha 通常取 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/2cwnd = 1 MSS,重新慢开始 ← 最严厉
  • 3个重复ACKssthresh = cwnd/2cwnd = ssthresh + 3MSS(Reno),进入快恢复→拥塞避免
  • 慢开始→拥塞避免的切换点:cwnd = ssthresh

cwnd 演化数值算例(⭐ 必考)

:初始 cwnd=1,ssthresh=16

RTT轮次123456~16...
cwnd12481617,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/超时/重传
流控发送方能发多快?Wsend=min(rwnd,cwnd)W_{send}=\min(rwnd,cwnd)
拥塞是超时还是3重复ACK?Reno两条分支