810 字
4 分钟
TCP 三次握手与四次挥手
  1. 1计算机网络学习路线与文章导读
  2. 2网络分层模型与数据封装是怎么回事
  3. 3TCP/IP 四层模型与 OSI 七层模型
  4. 4IP 地址与 CIDR 子网怎么理解
  5. 5ARP 是什么?主机如何找到目标 MAC 地址
  6. 6IP 路由与默认网关是如何工作的
  7. 7TCP 和 UDP 有什么区别?如何选择
  8. 8TCP 握手、挥手和丢包重传分别解决什么问题
  9. 9TCP 三次握手与四次挥手本文
  10. 10TCP 流量控制和拥塞控制有什么区别
  11. 11TCP 为什么可靠:流量控制、拥塞控制与局限性
  12. 12TCP 丢包、粘包和拆包是什么
  13. 13HTTP/1.0、HTTP/1.1、HTTP/2 与 HTTP/3 有什么区别
  14. 14HTTP 请求包含哪些内容
  15. 15HTTP 中 GET 和 POST 有什么区别
  16. 16HTTP 方法的安全性与幂等性怎么区分
  17. 17HTTP 状态码与网络故障如何区分排查
  18. 18常见 HTTP 状态码与网站故障排查
  19. 19HTTP 和 HTTPS 有什么区别
  20. 20谈谈对 DNS 和 CDN 的理解
  21. 21从输入网址到网页显示发生了什么
  22. 22TCP 的 TIME_WAIT 状态有什么作用
  23. 23TCP 的 CLOSE_WAIT 状态是什么,过多如何排查
  24. 24TLS 1.3 握手过程是什么
  25. 25HTTPS 如何校验证书
  26. 26HTTP 强缓存和协商缓存怎么工作
  27. 27HTTP Keep-Alive 是什么,连接如何复用
  28. 28WebSocket 和 HTTP 有什么区别
  29. 29服务端如何解析 HTTP 请求的数据
  30. 30NAT 是什么?端口映射如何实现
  31. 31ICMP、ping 和 traceroute 分别做什么
  32. 32网络故障如何分层排查
  33. 33Cookie、Session、Token 与 JWT 有什么区别
  34. 34常见的登录鉴权方式有哪些
  35. 35什么是 SYN Flood 攻击

什么是 TCP 三次握手#

TCP三次握手是客户端和服务器建立TCP连接的过程,主要目的是确认双方的通信能力正常,并同步双方的初始序列号。

具体过程如下:

第一次握手,客户端向服务器发送一个 SYN 请求,并携带自己的初始序列号,表示客户端希望建立连接。

第二次握手,服务器收到请求后,回复 SYN+ACK,一方面确认收到了客户端的请求,另一方面发送自己的初始序列号。

第三次握手,客户端收到服务器的 SYN+ACK 后,返回 ACK 确认消息,表示已经收到服务器的数据。此时双方都确认对方的发送和接收能力正常,TCP连接正式建立。

TCP 三次握手示意图

第三次握手的 ACK 丢了会怎么样?#

客户端发完第三次握手的 ACK 后就进入 ESTABLISHED 状态了,它以为连接已经建好了。但服务端没收到 ACK,它还卡在 SYN_RCVD 状态,会触发超时重传 SYN+ACK。客户端收到重传的 SYN+ACK 后会再发一次 ACK。如果重传几次还没收到 ACK,服务端会放弃这个半连接。客户端如果这时候发数据,服务端会发现这个连接没建好,直接回 RST 把它终止掉。

三次握手能携带数据吗?#

第一次和第二次握手不能携带数据,因为连接还没建立,如果允许带数据会有安全风险,攻击者可以在 SYN 里塞大量数据进行攻击。第三次握手是可以携带数据的,因为这时候客户端已经知道服务端的接收能力是正常的,连接在客户端看来已经建立了。不过实际上很少这么用,因为这需要应用层配合,大多数场景下还是等连接建好再发数据。

什么是 SYN 洪泛攻击?怎么防御?#

攻击者伪造大量不存在的 IP 地址,向服务器发送 SYN 请求。服务器回复 SYN+ACK 后,这些伪造 IP 的主机不会回应,服务器只能等超时。这些半连接会占用服务器的 SYN 队列资源,队列满了正常用户就连不上了。

防御手段有几种:一是调大 SYN 队列和缩短超时时间,治标不治本;二是 SYN Cookie,服务器不维护半连接状态,把状态信息编码到 SYN+ACK 的序列号里,收到第三次握手时再验证;三是用防火墙或代理先过滤,只有完成三次握手的连接才放进来。

说说 TCP 的四次挥手?#

TCP四次挥手是释放TCP连接的过程。由于TCP是全双工通信,双方需要分别关闭自己的发送方向。首先客户端发送FIN请求关闭连接,服务器收到后返回ACK确认;等服务器数据发送完成后,再发送FIN关闭连接,客户端收到后返回ACK确认。最后客户端进入TIME_WAIT状态,等待一段时间后关闭连接。

TCP 三次握手与四次挥手
https://blog.xqcherry.top/posts/interview/network/tcp-three-way-handshake/
作者
xqcherry
发布于
2026-10-11
许可协议
CC BY-NC-SA 4.0