详解TCP 协议的【三次握手】建立连接和【四次挥手】释放连接

对于具体的TCP 报文段首部格式请参考:计算机网络(四)>>> 运输层

另外为了方便,在此将三次握手和四次握手主要使用的报文段首部字段说明如下:

字段 说明
序号 本报文段所发送的数据的第一个字节的序号
确认号 期望收到对方下一个报文段的第一个数据字节的序号
确认ACK 仅当ACK = 1时确认号字段才有效。当ACK = 0时,确认号无效。TCP 规定,在连接建立后所有传送的报文段都必须把ACK 置1
同步SYN 在连接建立时用来同步序号。当SYN = 1而ACK = 0时表明这是一个连接请求报文段。对方若同意建立连接,则应在相应的报文段中使SYN = 1和ACK = 1。因此SYN = 1就表示这是一个连接请求或连接接收请求报文
终止FIN 当FIN = 1表示此报文段的发送方的数据已发送完毕,并要求释放运输连接

三次握手

计算机网络(四)>>> 运输层这篇文章中,我们可以知道,若想要建立一条TCP 连接:

  1. 第一次握手:首先主机一需要发送SYN = 1,ACK = 0 的报文段以请求建立连接;
  2. 第二次握手:主机二同意建立连接则应该发送SYN = 1,ACK = 1 的报文段以表示同意建立连接;
  3. 第三次握手:主机一再发送ACK = 1 的报文段以表示确认建立连接(若某一发送方已经有数据需要传输,则在第三次握手即可传输数据)。
    详解TCP 协议的【三次握手】建立连接和【四次挥手】释放连接

四次挥手

若要释放一条TCP 连接,需要:

  1. 第一次挥手:主机一发送FIN = 1 的报文段以请求释放主机一到主机二的TCP 连接;
  2. 第二次挥手:主机二发送ACK = 1 的报文段以同意释放主机一到主机二的TCP 连接;
  3. 第三次挥手:主机二发送FIN = 1 的报文段以请求释放主机二到主机一的TCP 连接;
  4. 第四次挥手:主机一发送ACK = 1 的报文段以同意释放主机二到主机一的TCP 连接;
    详解TCP 协议的【三次握手】建立连接和【四次挥手】释放连接