TCP 三次握手
流程
TCP 三次握手流程总结
TCP(三次握手)是建立可靠连接的过程,确保双方准备就绪并同步序列号。以下是根据提供的描述总结的三次握手流程:
-
服务器进入监听状态(LISTEN)
- 操作:TCP服务器进程创建传输控制块(TCB),包含连接相关的信息(如连接表、缓存指针、序列号等)。
- 状态:服务器进入 监听(LISTEN) 状态,等待客户端的连接请求。
- 特点:服务器被动等待连接请求,称为 被动打开连接。
-
客户端发送 SYN 报文(SYN-SENT)
- 操作:TCP客户端进程创建传输控制块,发送带有 SYN 标志的连接请求报文段,序列号设置为 X。
- 状态:客户端进入 同步已发送(SYN-SENT) 状态。
- 特点:
- SYN 报文不携带数据,但消耗一个序列号。
- 下一个数据字节的序列号为 X+1。
- 客户端主动发起连接,称为 主动打开连接。
-
服务器回复 SYN-ACK 报文(SYN-RCVD)
- 操作:服务器接收到 SYN 报文后,若同意连接,发送带有 SYN 和 ACK 标志的确认报文段,序列号设置为 Y,确认号为 X+1。
- 状态:服务器进入 同步已接收(SYN-RCVD) 状态。
- 特点:
- SYN-ACK 报文同样不携带数据,但消耗一个序列号。
- 确认号 X+1 表示确认接收到了客户端的 SYN 报文。
-
客户端发送 ACK 报文(ESTABLISHED)
- 操作:客户端接收到 SYN-ACK 报文后,发送带有 ACK 标志的确认报文段,序列号为 X+1,确认号为 Y+1。
- 状态:客户端进入 连接已建立(ESTABLISHED) 状态。
- 特点:
- ACK 报文可携带数据(若有),若不携带数据,不消耗序列号。
- 确认号 Y+1 表示确认接收到了服务器的 SYN 报文。
-
服务器确认 ACK 报文(ESTABLISHED)
- 操作:服务器接收到客户端的 ACK 报文后,进入 连接已建立(ESTABLISHED) 状态。
- 特点:双方均进入已建立状态,可以进行可靠的数据传输。
三次握手关键点
- 初始化序列号:客户端和服务器各自选择初始序列号 X 和 Y,用于后续的数据传输和确认。
- 状态转换:
- 客户端:无连接 → SYN-SENT → ESTABLISHED
- 服务器:LISTEN → SYN-RCVD → ESTABLISHED
- 控制位:
- SYN:同步序列号,标志连接请求或确认。
- ACK:确认收到对方的报文,确保双方同步。
通过以上三次报文的交换,TCP确保了双方都已准备就绪,并且序列号已经同步,建立一个可靠的通信通道。