
一、TCP 简介TCPTransmission Control Protocol传输控制协议是一种面向连接、可靠的传输层协议。TCP 的主要特点面向连接可靠传输字节流传输全双工通信拥塞控制TCP 通信过程主要包括建立连接三次握手数据传输断开连接四次挥手二、为什么需要三次握手TCP 是可靠通信协议通信双方在传输数据之前需要确认双方的发送能力是否正常双方的接收能力是否正常初始序列号是否同步因此 TCP 在正式传输数据前需要通过三次握手建立连接。三、TCP 三次握手过程TCP 三次握手过程如下第一次握手客户端发送 SYN客户端向服务器发送 SYN 报文SYN 1 Seq x表示客户端请求建立连接并告诉服务器自己的初始序列号。状态变化客户端CLOSED - SYN_SENT服务器LISTEN第二次握手服务器回复 SYN ACK服务器收到客户端 SYN 后回复确认 ACK同时发送自己的 SYN报文SYN 1 ACK 1 Seq y Ack x 1含义Ack x 1表示已经收到客户端 SYNSeq y表示服务器自己的初始序列号状态变化服务器LISTEN - SYN_RCVD第三次握手客户端发送 ACK客户端收到服务器 SYNACK 后发送确认报文ACK 1 Seq x 1 Ack y 1表示已经收到服务器的 SYN可以开始通信。状态变化客户端SYN_SENT - ESTABLISHED服务器收到 ACK 后SYN_RCVD - ESTABLISHED此时 TCP 连接建立完成。四、为什么是三次握手两次可以吗两次握手的问题假设只有两次服务器收到 SYN 后认为连接建立。但是如果客户端发送的 SYN 因网络延迟没有到达而之后重新发送旧 SYN服务器可能误认为客户端又发起了一次新的连接。导致资源浪费。三次握手可以让双方确认防止历史连接客户端发送能力正常服务端发送能力正常服务端接收能力正常客户端接收能力正常保证双方状态同步。五、三次握手过程中可能出现的问题SYN 洪泛攻击SYN Flood攻击者发送大量 SYN 请求客户端 ---- SYN ---- 服务器服务器回复 SYNACK 后等待 ACK。但是攻击者不发送 ACK。导致半连接队列占满正常用户无法连接解决方法增大TCP半连接队列开启SYN Cookie限制连接数量调大netdev_max_backlog六、TCP 三次握手状态变化客户端CLOSED - SYN_SENT - ESTABLISHED服务器LISTEN - SYN_RCVD - ESTABLISHED七、面试常见问题1. 为什么需要三次握手答案TCP 三次握手主要用于确认双方的发送和接收能力同时同步双方的初始序列号保证后续数据可靠传输。2. 第三次握手可以携带数据吗可以。客户端发送 ACK 时可以携带数据。但是通常不会立即发送业务数据而是连接建立后再传输。3. 服务端收到 SYN 后处于什么状态收到第一次握手LISTEN - SYN_RCVD4. SYN 和 ACK 分别表示什么标志位含义SYN请求建立连接ACK确认收到数据总结TCP 三次握手是 TCP 建立可靠连接的重要机制。整个过程第一次 客户端发送 SYN 第二次 服务器发送 SYNACK 第三次 客户端发送 ACK通过三次握手TCP 完成连接建立序列号同步双方状态确认这是计算机网络中非常重要的基础知识也是 C/C 后端、网络编程岗位面试中的高频考点。