Skip to content

Latest commit

 

History

History
20 lines (10 loc) · 1.87 KB

http三次握手四次挥手.md

File metadata and controls

20 lines (10 loc) · 1.87 KB

Http 三次握手与四次挥手

Http 三次握手

  1. 客户端向服务器发送一个 SYN (Synchronize 同步)报文, 并指明客户端的初始化序列号ISN (Initial Sequence Number) 此时 客户端处于 SYN_SEND 状态, 首部的同步位 SYN=1, 初始序号 seq=x, SYN=1 的报文不能携带数据 但是要消耗一个序号
  2. 服务器接收到客户端的SYN报文之后,会以自己的SYN报文作为应答, 并且定制了自己的初始化序列号 ISN , 同时会把客户端的ISN + 1 作为 ACK (Acknowledge character)的值,表示自己已经收到了客户端的SYN , 此时服务器处于 SYN_RECV 的状态
  3. 客户端收到SYN的报文之后,会发送一个ACK报文, 同样也是由 服务端的 ISN + 1 作为ACk 的值, 此时 客户端处于 ESTABLISHED 状态, 服务器收到 ACK 报文之后 也处于 ESTABLISHED , 此时 链接建立

Http 四次挥手

  1. 客户端发出 连接释放报文段(FIN = 1, 序号 seq=u), 并停止再发送数据, 主动关闭TCP 连接 , 进入 FIN_WAIT1 状态, 等待 服务端的确认
  2. 服务端收到连接释放报文段后 即发出 确认报文段(ACK=1, 确认号 ack=U+1, 序号seq=v)服务端进入 CLOSE_WAIT状态, 此时 TCP 处于半关闭状态,而客户端收到服务端的连接释放。客户端收到服务端的确认后,进入 FIN_WAIT2状态, 等待服务端发出的链接释放报文段
  3. 服务端 发出连接释放报文段(FIN=1, ACK=1, 序号seq=w, 确认号 ack=u+1)服务端进入 LAST_ACK 状态, 等待客户端确认
  4. 客户端收到服务端的连接释放报文段后, 对此发出 确认报文段(ACK=1, seq=u+1, ack=w+1) 客户端进入 TIME_WAIT 状态 , 此时 TCP未释放掉, 需要经过时间等待计时器设置的时间 2MSL后 , 客户端才进入 CLOSED 状态