TCP 三次握手是 TCP 协议建立连接的标准流程:客户端与服务器通过 SYN、SYN-ACK、ACK 三个报文互相确认收发能力并同步序列号,确保后续数据传输可靠有序,是理解网络通信与排查连接问题的基础知识。

| 类型 | 网络协议机制 |
| 所属协议 | TCP(传输控制协议) |
| 协议层级 | 传输层 |
| 定义文档 | RFC 793 及后续更新 |
| 相关概念 | 四次挥手、SYN Flood、序列号 |
TCP 三次握手(Three-way Handshake)是 TCP 协议在客户端与服务器之间建立可靠连接时所采用的三步确认流程,双方通过交换三个报文来同步初始序列号并确认彼此的收发能力。
TCP 是面向连接的传输层协议,在正式传输数据之前必须先建立连接。三次握手的过程是:第一步,客户端向服务器发送 SYN(同步)报文,携带自己的初始序列号;第二步,服务器收到后回复 SYN-ACK 报文,既确认客户端的请求,又带上服务器自己的初始序列号;第三步,客户端再发送 ACK(确认)报文,连接正式建立,双方进入可传输数据的状态。
之所以需要三次而不是两次,是为了让双方都能确认「自己发得出去、对方收得到」:两次握手只能让服务器确认客户端可达,客户端却无法确认服务器的回应能力,还可能因网络中滞留的旧连接请求导致服务器误开连接、浪费资源。三次是保证双方状态一致的最小次数。
三次握手也是攻击者常利用的环节。典型的 SYN Flood 攻击会伪造大量 SYN 报文却不完成第三步,使服务器堆积大量半开连接、耗尽资源。常见的防护手段包括 SYN Cookie、缩短半连接超时时间以及借助防火墙或 CDN 清洗流量。与之对应,TCP 断开连接则采用「四次挥手」流程。
问:为什么不是两次或四次握手?答:两次无法让客户端确认服务器的接收与发送能力,且旧的重复请求可能被误认为新连接;而三次已足够同步双方状态,四次则是不必要的开销。
问:三次握手和四次挥手有什么区别?答:三次握手用于建立连接,四次挥手用于断开连接;断开时因双方需分别关闭各自方向的数据流,故多一步。
问:如何观察三次握手过程?答:可以使用 Wireshark、tcpdump 等抓包工具查看 SYN、SYN-ACK、ACK 报文,或用 netstat、ss 命令观察连接状态变化。

| 类型 | 网络协议机制 |
| 所属协议 | TCP(传输控制协议) |
| 协议层级 | 传输层 |
| 定义文档 | RFC 793 及后续更新 |
| 相关概念 | 四次挥手、SYN Flood、序列号 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧