TCP的三次握手和四次挥手

Posted dongshanzhishi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP的三次握手和四次挥手相关的知识,希望对你有一定的参考价值。

TCP的三次握手和四次挥手

背景知识

  • TCP报文的头部(HEAD内容)各字段的含义,TCP头部最小为20个字节,这20个字节分为5行,每行4个字节。
  • 其中第4行从第11个字节到第16个字节是6个标志位,每1位的值只有0和1,代表不同的含义。
  • ACK:确认序号有效。当值为1时,表示确认号有效。一般称携带ACK标志为1值当报文段为“确认报文段”。同时,TCP规定在连接建立后所有传送的报文段都必须把ACK设置为1。
  • SYN:发起一个新连接。当SYN的值为1时,表明这是一个请求连接报文段。一般称携带SYN标志的TCP报文段称为“同步报文段”。在TCP三次握手中的第一个报文就是同步报文段,在连接建立时用来同步序号。对方若同意建立连接,则在响应报文中使ACK值为1。
  • FIN:释放一个连接。当FIN的值为1时,表示此报文段的发送方的数据已经发送完毕,并要求释放TCP连接。
  • RST:重置连接。当RST的值为1时,表示TCP连接中出现了严重错误,需要释放并重新建立连接。一般称携带RST标志值为1的TCP报文段为“复位报文段”。
  • PSH:推送。当PSH的值为1时,表示该报文段是高优先级,接收方TCP应该尽快推送给接收应用程序,而不用等到整个TCP缓存都填满了后再交付。

三次握手

  • 第一次握手:client端首先向server端发送一个报文,其中标识SYN=1,请求与server建立一个连接。
  • 第二次握手:server端回复报文时将ACK值置为1,同时server端也向client发起一个建立连接的请求,将SYN值置为1。所以最终回复给client端的报文中,SYN和ACK值都被置为1。
  • 第三次握手:client端收到回复后,再给server端发一个确认报文,设置ACK值为1。

四次挥手

  • 第一次挥手:client端给server端发送一个FIN=1的请求报文。
  • 第二次挥手:server端给client端回复一个ACK=1的响应报文。
  • 第三次挥手:server端给client端发送一个FIN=1的请求报文。
  • 第四次挥手:client端给server端回复一个ACK=1的响应报文。

为什么是三次握手,四次挥手

  • 首先,TCP连接是全双工的,发送和接收是两个分开的通道。因此,连接的双方都需要发送一个建立连接的请求。然后,当server端收到一个SYN=1的请求报文后准备回复client端一个ACK=1的报文同时将自己的请求SYN也设置为1,这样不用单独发送一个建立连接的请求,所以只需要三次。
  • 然而,在client端希望断开连接时发送FIN=1的报文给server端,由于此时server端还有没发送完成的报文,不能马上断开连接,只能回复一个ACK=1的报文。等待server端发送完数据报文后,server发起一个FIN=1的断开连接的报文,client端回复最终的ACK=1的报文。

参考

以上是关于TCP的三次握手和四次挥手的主要内容,如果未能解决你的问题,请参考以下文章

图解TCP的三次握手和四次挥手(简单明了)

关于TCP的三次握手和四次挥手及其衍生问题

图解TCP的三次握手和四次挥手

图解TCP的三次握手和四次挥手

TCP的三次握手和四次挥手

揭秘——TCP的三次握手和四次挥手