概念

  • 标志位
    • ACK - 确认序号的标志,ACK=1表示确认号有效,ACK=0表示报文不含确认序号信息
    • SYN - 连接请求序号标志,用于建立连接,SYN=1表示请求连接
    • FIN - 结束标志,用于释放连接,为1表示关闭本方数据流
  • 序号 - 表示发送的数据字节流,确保TCP传输有序,对每个字节编号
    • seq - x (123123123)
    • ack - x+1 (123123124)

三次握手

TCP三次握手四次挥手总结

  • 第一次
    • 发送请求建立连接报文, SYN = 1,seq = x,等待服务端确认, 客户端进入 SYN_SENT状态
    • 白话版 - 我要和你建立连接
  • 第二次
    • 服务端收到请求,向客户端发送验证 ack = x + 1, 同时自己发送一个验证包 seq = y, 服务端进入SYN_RECV状态
    • 白话版 - 我收到了,确定要连接吗(还在吗)
  • 第三次
    • 客户端收到请求,向服务器发送确认 ack = y + 1, 服务端和客户端同时进入ESTABLISHED状态,完成连接
    • 白话版 - 我还在,咱们建立连接吧

四次挥手

TCP三次握手四次挥手总结

  • 第一次
    • 客户端发送断开连接请求, FIN = 1, seq = u, 客户端进入FIN-WAIT-1状态
    • 白话版 - 我的数据传完了,咱们断开吧
  • 第二次
    • 服务端收到断开请求, 发送确认 ACK=1,ack=u+1, 同时发送一个验证包 seq = v,进入 CLOSE-WAIT状态
    • 客户端收到请求确认, 进入 FIN-WAIT-2 状态,等待服务器发送断开请求
    • 白话版 - 好的,我知道了,我还有数据没传完,请稍等
  • 第三次
    • 服务器传输完成,发送断开请求 FIN = 1, ACK = 1, seq = w, ack = u + 1, 服务端进入 LAST-ACK 状态
    • 白话版 - 我的数据已经传输完了,咱们可以断开了
  • 第四次
    • 客户端收到断开请求,向服务端发出确认 ACK = 1, seq = u + 1, ack = w + 1, 客户端进入TIME-WAIT状态, 服务端立即进入CLOSED状态, 客户端在 TIME-WAIT 状态结束后(2MSL),进入 CLOSED 状态
    • 白话版 - 我收到了,可以断开了

参考:

https://www.cnblogs.com/jainszhang/p/10641728.html
https://blog.csdn.net/qq_38950316/article/details/81087809

相关文章: