94
0
295
版主
前言 只要你上网,浏览器访问网页、视频通话、接口请求,底层都会经历 TCP 三次握手。很多人背过这个名词,但很少想明白一个问题:建立网络连接,为什么偏偏是三次数据包交互,不用两次,也不用四次? 三次握手并不是协议设计者拍脑袋定出来的规则,而是在复杂、不稳定的互联网环境下,用最小网络开销,完成双向通信校验、同步序列号,同时规避老旧滞留报文带来资源浪费的一套精巧设计。本文用通俗比喻结合协议状态机,把三次握手完整讲透,同时延伸讲解 SYN 泛洪攻击的原理。
前言
SYN:Synchronize,同步;ACK:Acknowledgement,确认应答。SYN 报文会占用一个序列号,普通 ACK 报文不占用序列号。
通俗理解:客户端喊话:“你好,我想要建立连接,我的数据编号从 x 开始。”状态变化:客户端从 CLOSED → SYN_SENT,等待服务器回复。
通俗理解:服务器回复:“收到你的请求,我这边准备好了,我的编号从 y 开始,请确认收到我的消息。”状态变化:服务器从LISTEN → SYN_RCVD(半连接状态,存入半连接队列,等待客户端最后一次 ACK)。
通俗理解:客户端回复:“你的消息我收到了,编号 y 我已记录。”状态变化:客户端变为ESTABLISHED;服务器收到这条 ACK 后,也切换到ESTABLISHED状态。✅至此握手完成,可以正式传输业务数据。
关键点:服务器的同步请求(SYN)和确认应答(ACK)可以合并到同一个报文,因此不需要四次交互腾讯云。
那为什么不用四次握手?理论上可以,但是服务器的 SYN 和 ACK 可以合并为一个包,拆成四次只会多一次网络往返,增加延迟,不会带来额外可靠性收益,三次是兼顾性能与可靠性的最小方案。
如果服务器监控看到大量SYN_RCVD状态,就要警惕是否遭遇到 SYN 泛洪攻击。
举报
本版积分规则 发表回复 回帖后跳转到最后一页
相关侵权、举报、投诉及建议等,请发 E-mail:2026@typc.net
Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|晋ICP备2026008270号-1|晋公网安备14010602111293号