TCP 三次握手图解:为什么不是两次、四次?面试与排障都该懂

举报
yd_255989600 发表于 2026/11/07 06:16:21 2026/11/07
【摘要】 TCP 三次握手是网络面试的必考题,但很多人只会背「SYN、SYN+ACK、ACK」,不理解为什么必须是三次。这篇用抓包视角讲清楚握手过程,以及为什么两次、四次都不行。握手过程:客户端发 SYN(seq=x)请求建立连接;服务端回 SYN+ACK(seq=y, ack=x+1),表示收到并同意;客户端再回 ACK(ack=y+1),连接建立。抓包工具(如 tcpdump、Wireshark)...

TCP 三次握手是网络面试的必考题,但很多人只会背「SYN、SYN+ACK、ACK」,不理解为什么必须是三次。这篇用抓包视角讲清楚握手过程,以及为什么两次、四次都不行。

握手过程:客户端发 SYN(seq=x)请求建立连接;服务端回 SYN+ACK(seq=y, ack=x+1),表示收到并同意;客户端再回 ACK(ack=y+1),连接建立。抓包工具(如 tcpdump、Wireshark)里能看到这三步,缺一步连接都建立不起来。

为什么不能是两次?如果只有两次握手,服务端发出 SYN+ACK 后就认为连接建立。但这个 ACK 可能在网络中丢失或延迟——客户端早已放弃,服务端却一直维护连接等待数据,大量这样的「半连接」会耗尽服务端资源(历史上的 SYN Flood 攻击正是利用这一点)。

为什么不需要四次?服务端的 SYN 和 ACK 可以合并成一个 SYN+ACK 包发送(TCP 的设计允许),三次已经是最少的可靠握手次数。第四次「确认收到确认」在 TCP 里是隐式的,发出去也是冗余信息。

实际排障应用:连接超时多为网络不通或安全组未放行(客户端收不到 SYN+ACK);connection reset 多为服务端拒绝(收到 RST);握手成功但传输卡顿则是带宽/拥塞问题。抓包定位问题比猜要高效得多。

配置建议:华为云 ECS 上排查看安全组规则(入方向 22/80/443 端口)、内核参数 somaxconn(半连接队列上限)、ss -s 命令查看连接统计。理解了三次握手,这些配置项背后的含义就都清楚了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。