TCP/IP的三次握手与四次挥手

概述

整理记录一些TCP/IP的三次握手与四次挥手的知识.

三次握手的描述

三次握手

  1. 为了方便描述我们将主动发起请求的172.16.50.72:65076 主机称为客户端,将返回数据的主机172.16.17.94:8080称为服务器.
  2. 第一次握手: 建立连接.客户端发送连接请求,发送SYN报文,将seq设置为0.然后客户端进入SYN_SEND状态,等待服务器的确认.
  3. 第二次握手: 服务器收到客户端的SYN报文段.需要对这个SYN报文段进行确认,发送ACK报文,将ack设置为1.同时,自己还要
    发送SYN请求信息,将seq为0.服务器端将上述所有信息一并发送给客户端,此时服务器进入SYN_RECV状态.
  4. 第三次握手: 客户端收到服务器的ACK和SYN报文后,进行确认,然后将ack设置为1,seq设置为1,向服务器发送ACK报文段,这个
    报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手.

四次挥手的描述

四次挥手

  1. 第一次挥手: 客户端向服务器发送一个FIN报文段,将设置seq为160和ack为112,此时客户端进入FIN_WAIT_1状态,这表示客户端
    没有数据要发送服务器了,请求关闭连接.
  2. 第二次挥手: 服务器收到了客户端发送的FIN报文段,向客户端回一个ACK报文段,ack设置为1,seq设置为112;服务器
    进入了CLOSE_WAIT状态,客户端收到服务器返回的ACK报文后,进入FIN_WAIT_2状态.
  3. 第三次挥手: 服务器会观察自己是否还有数据没有发送给客户端,如果有,先把数据发送给客户端,再发送FIN报文.如果没有,
    那么服务器直接发送FIN报文给客户端.请求关闭连接,同时服务器进入LAST_ACK状态.
  4. 第四次挥手:客户端收到服务器发送的FIN报文段,向服务器发送ACK报文段,将seq设置为161,将ack设置为113,然后客户端
    进入TIME_WAIT状态;服务器收到客户端的ACK报文段以后,就关闭连接;此时,客户端等待2MSL后依然没有收到回复,则证明Server端
    已正常关闭,客户端也可以关闭连接了.