关于TCP握手与挥手

TCP的三次握手

  TCP在建立连接时会进行三次握手,其过程如下:

  1.首先client会向server发送SYN=1,ACK=0,请求建立链接,同时自身进入SYN_SENT状态.

  2.当server收到client的请求后,如果client请求的端口为开启状态则,server会向client发送SYN=1,ACK=1,给client以连接确认,及向client发出建立连接的请求,同时自身进入SYN_RECV状态.

  如果client请求端口没有开启,则会置RST,终止连接请求.

  3.当client,收到server的ACK时,会进入ESTALISH状态,此时客户端与服务器连接建立成功!然后client会向server发送ACK=1,以回应对服务器向客户端建立连接请求的确认.

  当server收到client的ACK之后,也进入ESTABLISH状态,三次握手成功!

为什么TCP握手需要三次?

  那么有人可能会问了,为什么TCP是三次握手,而不是两次?

  我个人觉得有两方面原因:

  1.TCP提供可靠性、全双工通信,因此要确保双方都要能接受到对方应答.如果只是两次握手,只能说明client的请求server可以接受到,但server的请求client能否接受到,无法提供可靠性!

  2.如果两次握手,server建立了连接,占用了server资源,但此时client是否已经建立连接是无法保证的,因此两次握手对server来说太占用资源了.

TCP四次挥手 

  TCP在释放连接时,会进行4次挥手:

  1.首先client向server发送FIN=1的请求(或相反)

  2.server收到之后,会向client发送ACK=1,此时client与server单向断开链接(server与client还没有)

  3.server会向client发送FIN=1的请求.

  4.client会想server进行ACK=1的确认,此时双方都以断开连接,但主动断开的一方会进入TIME_WAIT状态.

 为什么要进行四次挥手?

  四次挥手理解起来就更为简单,因为TCP提供全双工通信.

  一方发出断开连接请求,另一方要确认.这只是单向的断开

  另一方发出断开连接请求,这一方进行确认.双方彻底断开.

  因此,在断开链接时需要进行四次挥手.

为什么主动断开链接一方会进入TIME_WAIT状态?

  因为断开链接之后,还有可能有部分数据(可能是游离报文)没有到达,因此需要主动断开一方进行等待,时间大概是2、3分钟左右.

posted @ 2017-07-14 10:43  Linux专题站  阅读(235)  评论(0编辑  收藏  举报