# 三次握手和四次挥手

# 三次握手

  • 第一次:客户端发送带有 SYN 标志的数据包,并生成一个序号 x,即:SYN = 1, seq = x, 进入 SYN_SEND
  • 第二次:[确定客户端具有发送能力、服务端具有接收能力] 服务端接收到客户端发送的数据包,并生成一个对应的数据包返回给客户端,内容包括:SYN = 1, ACK = 1, seq = y, ack = x + 1,并变为SYN_RCVD状态
  • 第三次:[确定服务端具有发送能力、客户端具有接收能力] 客户端接收到服务端的响应数据包,进入 ESTABLISHED 状态,生成数据包:ACK = 1, ack = y + 1, 服务端收到确认信息后即进入 ESTABLISHED 状态

# 四次挥手

  • 第一次:客户端发起断开连接请求:FIN = 1, seq = x,进入 FIN_WAIT_1 状态,客户端不再发送请求,但可以接收数据
  • 第二次:服务端接收到请求数据包,返回:ACK = 1, ack = x + 1, 并进入 CLOSE_WAIT 状态,客户端收到后进入 FIN_WAIT_2 状态
  • 第三次:服务端等待最后的响应数据包发送,使用最后的序号,返回:FIN = 1, seq = y, 并进入 LAST_ACK 状态,服务端不再发送数据
  • 第四次:客户端接收到服务器的关闭请求,返回:ACK = 1, ack = y + 1, 等待2个最大报文时间后进入 CLOSED 状态,客户端无法发送数据,服务端收到关闭响应后直接进入 CLOSED 状态,服务端无法接收数据