基础标识

序号(seq:sequence nubmer)

Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

确认号(ack:acknowledgement number)

ack序号,占32位,只有标志位ACK为1时,确认序号字段才有效,ack=seq+1。

标志位(flags)

  • URG---Urgent:紧急位,URG=1,表示紧急数据
  • ACK---Acknowledgement:确定位,ACK=1,确定序号有效
  • PSH---Push:推送位,PSH=1,表示尽快把数据交付给应用层
  • RST---Rest:重置位,RST=1,表示重新建立起连接
  • SYN---Synchronization:同步位,SYN=1,表示发起新连接
  • FIN---Finish:终止位,FIN=1 表示释放连接

    TCP三次握手

    三次握手过程

    第一次

    客户端想要和服务端创建一个连接,所以发送了一段报文

  • SYN=1 表示请求连接
  • seq=x(client_isn)客户端序号

    第二次

    服务端收到来自客户端的报文之后,会返回给客户端一段TCP报文

  • SYN=1 表示是连接请求
  • ACK=1 表示确定字段有效
  • ack=x+1 确认号
  • seq=y(设备序号)

    第三次

    客户端接收到来自服务端的报文之后,会如下操作

  • 检查ACK确认为是否为1
  • 检查ack确认号是否y+1
  • 如果满足以上两个条件,则将ack=y+1,ACK=1,seq=x+1发出,正式建立连接
    参考链接:https://juejin.cn/post/6862842512952786952

TCP四次挥手

四次挥手过程

第一次

发送端第一次发送报文
报文内容
  1. FIN=1 表示完成了传输需要释放链接
  2. seq=u 将自己的序列号发给服务端

    此时的发送端就处于一个第一个等待状态

    第二次

    接收端收到发送端的终止请求之后,他会发一个报文去确定一下
    报文内容
  3. ACK=1表示确定这个报文已经接收到了
  4. seq=v 发送自身的型号
  5. ack=u+1确认号

    接收方发送了确定报告之后进入了关闭等待状态
    发送方接收到以上信息,就进入连接结束的第二个等待状态
    第三次
    接收端接收完数据之后会发送一个新的报文
  6. FIN=1表示已经可以释放连接了
  7. ACK=1确认号表示报文已经收到
  8. seq=w 发送自己的序列号
  9. ack=u+1确认一下是接收的序号
    第四次

    发送端接收到接收方的确定报文之后,会发送一个确认报文,告之已收到
    报文内容
  10. ACK=1表示确认
  11. seq=u+1
  12. ack=w+1

    接收方在发送报文之后,会停留在一个最后确认状态
    发送方接收到之后进入等待计时器状态
    等一会儿确认没有出现任何问题之后,此时进入关闭状态
    参考链接:https://juejin.cn/post/6865067087401287688

思维导图地址:https://share.mubu.com/doc/1gcvCMjB0Cv

Last modification:March 10, 2021
If you think my article is useful to you, please feel free to appreciate