TCP三次握手四次挥手

88 阅读2分钟

TCP三次握手四次挥手

三次握手

  1. 客户端想要建立连接,发起一个syn=1 seq=x的tcp包,表示想要建立连接
  2. 服务端收到包,表示可以建立连接,回复一个 ack=1 syn=1 seq=y ACKnum=x+1的包同意连接
  3. 客户端收到确认包之后,了解到可以建立连接;再次发送包 ack=1 syn=0 ACKnum=y+1确认建立连接;客户端进入连接状态,服务器收到包之后也进入连接状态 tcp连接建立

数据传输

  • 传输过程中,tcp连接会一次性发送若干个包测试连接速度,根据连接速度调整tcp包的发送频率

四次挥手

  1. 客户端需要断开连接,发起一个fin=1 seq=x的包,请求断开连接
  2. 服务端收到请求断开的包,发送一个ack=1 ACKnum=x+1的包表示请求已确认,但是这期间可能有剩余数据需要发送,将剩余的数据发送完毕
  3. 服务端检查所有数据都已发送完毕,发送一个find=1 seq=y的包表示同意断开请求
  4. 客户端收到同意断开请求的包,发送ack=1 ACKnum=y+1的表示确认断开连接
  5. 最后阶段,服务端收到最后一个包之后,断开连接,客户端在发送最后一个包之后,等待两个最大生命周期,然后也断开连接 tpc连接断开

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

确认号(acknowledgement number):Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1

标志位的含义

  1. URG:紧急指针(urgent pointer)有效。
  2. ACK:确认序号有效。
  3. PSH:接收方应该尽快将这个报文交给应用层。
  4. RST:重置连接。
  5. SYN:发起一个新连接。
  6. FIN:释放一个连接。

link: 参考资料