信息技术大学
TCP 连接管理
计算机基础面试八股 · 第 1 章 计算机网络
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
信息技术大学
TCP 连接管理
计算机基础面试八股 · 第 1 章 计算机网络
三次握手流程与必要性
建立 TCP 连接要三次报文往返:让双方各确认一次「我能发、你能收」,并同步初始序列号。
同步序号
SYN 携带初始序号 ISN,后续数据按此编号
双向确认
每个方向都要有一次 SYN 与一次 ACK 才算打通
防历史连接
两次握手会让迟到的旧 SYN 重建连接,三次可拒绝
三次握手时序
客户端主动发起,三段报文完成双向通道确认。
1
客户端 SYN
发同步位与初始序号 x,进入 SYN_SENT
2
服务端 SYN+ACK
回初始序号 y 并确认 x+1,进入 SYN_RCVD
3
客户端 ACK
确认 y+1,双方进入 ESTABLISHED
四次挥手与 TIME_WAIT
断开要四个报文:TCP 全双工,两个方向各关一次;主动关闭方最后等 2MSL 才真正释放。
半关闭
一方发 FIN 只关自己方向,另一方向仍可继续发
四次原因
被动方的 ACK 与 FIN 分开发:先应答,数据发完再关
TIME_WAIT
主动方等 2MSL:等最后的 ACK 到达,也让旧报文消亡
过多排查
TIME_WAIT 过多多为短连接高频建连,考虑连接池与复用
SYN 泛洪攻击与防御
攻击者狂发 SYN 却不回 ACK,把半连接队列占满,正常握手进不来——典型资源耗尽攻击。
攻击原理
半连接占用内存与队列,服务端 SYN_RCVD 堆积
SYN Cookie
不存半连接状态,把信息编码进序号,收到 ACK 再验证
其他防线
调大 backlog、源限速、防火墙清洗联动
keepalive 与应用层心跳
连接断了要能及时发现:内核 keepalive 与应用层心跳是两条互补的探活路线。
内核探活
由 tcp_keepalive 系列参数控制,默认周期长达两小时
应用心跳
自定义间隔与超时,常见十几秒一拍,语义可控
选型
要穿透 NAT 与负载均衡的场景,应用层心跳更可靠
本节要点
- ✓三次握手定序号、开双向
- ✓四次挥手各关各的方向,主动方等 2MSL
- ✓SYN 泛洪打半连接队列,Cookie 不存状态
- ✓探活靠内核 keepalive 或应用层心跳
延伸主题:抓包观察握手挥手全流程对比 RST 异常断开与正常挥手
课后思考
先自己回答,再展开参考答案——能讲出来才算真懂。
1为什么握手是三次,两次行不行?
参考答案不行:两次无法防止历史延迟 SYN 重建无效连接,服务端也无法确认自己发的对方收得到;第三次 ACK 正是给双方的最终确认。
2TIME_WAIT 为什么偏偏等 2MSL?
参考答案一倍 MSL 保证最后的 ACK 丢失后对方还能重传 FIN 并收到应答,另一倍让旧报文在网络中自然消亡,避免污染同四元组的新连接。
3心跳为什么不能只靠内核 keepalive?
参考答案默认探测周期太长,且中间的 NAT、负载均衡可能静默丢弃映射表项;只有端到端的应用层心跳能及时发现链路已断。