基础标识

序号(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三次握手

三次握手过程

第一次

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

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

第二次

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

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

第三次

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

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

TCP四次挥手

四次挥手过程

第一次

发送端第一次发送报文

报文内容

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

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

第二次

接收端收到发送端的终止请求之后,他会发一个报文去确定一下
报文内容

  1. ACK=1表示确定这个报文已经接收到了
  2. seq=v 发送自身的型号
  3. ack=u+1确认号

接收方发送了确定报告之后进入了关闭等待状态
发送方接收到以上信息,就进入连接结束的第二个等待状态

第三次

接收端接收完数据之后会发送一个新的报文

  1. FIN=1表示已经可以释放连接了
  2. ACK=1确认号表示报文已经收到
  3. seq=w 发送自己的序列号
  4. ack=u+1确认一下是接收的序号
    第四次

发送端接收到接收方的确定报文之后,会发送一个确认报文,告之已收到

报文内容

  1. ACK=1表示确认
  2. seq=u+1
  3. ack=w+1

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

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

Last modification:March 10th, 2021 at 12:53 am
If you think my article is useful to you, please feel free to appreciate