TCP协议之三次握手四次挥手及TIMEWAIT状态

1. 简单介绍TCP协议通信连接

        传输层协议主要分为TCP和UDP两个协议。UDP是无连接、不可靠的数据报服务。而TCP是面向连接的、可靠的字节流服务。使用TCP协议通信的双方必须先建立连接,然后才能开始数据的传输。并且通信的双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,交互性的工作只需要一次连接即可满足。完成数据交换之后,通信双方都必须断开连接以释放系统资源。

2. TCP的面向连接

  • 两端通讯之前,必须先建立连接
  • 连接一旦建立,两端交互过程都在这一连接上完成,无需重新建立连接,知道连接关闭
  • 通讯完成后需要断开连接,以释放服务器资源
  • 操作系统为我们维护连接,因此内核需要为连接分配相应的资源
  • 对于服务器而言,一个连接只能为一个客户端服务,从而造成服务器性能有待优化

3. 连接过程(三次握手)

         TCP报文段1包含SYN(请求建立连接的标志)标志,即ernest-laptop客户端向服务器发送连接请求。并且该同步报文段包含一个ISN值为535734930的序号。报文段2也相当于一个连接报文段,表示服务器同意与客户端建立连接。同时它发送自己的ISN值为2159701207的序号,并对报文段1的请求进行确认ack。确认值为ack535734931,即第一个同步报文段的序号值加1。                                                                     序号值是用来标识TCP数据流中的每一字节的。TCP报文段3即是客户端对第二个报文段的确认。此时,TCP连接就基本建立完成了。这三个步骤被称为TCP三次握手。

如果是两次握手:

  • 如果没有最后一个ACK确认,则服务器会不断超时重传ACK/SYN
  • 会浪费服务器资源

4. 关闭过程(四次挥手)

        观察上图,报文段4包含了FIN标志,FIN是关闭连接的标志,因此报文段4是一个结束报文段,即客户端请求关闭连接。结束报文段和同步报文段一样也要占用一个序号值(确认机制)。然后服务器先向客户端发送了报文段5来确认该结束报文段。紧接着服务器发送自己的结束报文段6,客户端再用TCP报文段7给予确认。实际上,仅用于确认的报文段5是可以省略的,因为报文段6也包含了该确认信息。

        报文段5是否需要应取决于TCP的延迟确认特性。

        一般,TCP连接是由客户端发起,然后通过三次握手建立的。TCP连接的关闭过程则相对复杂一些。可能是客户端执行主动关闭;也可能是服务器执行主动关闭,比如服务器挂掉的情况;还有可能的情况就是同时关闭。

5. TIME_WAIT状态

        第1个FIN是主动关闭方发送给被动关闭方的结束报文段。第二个是被动关闭方发送给主动关闭方的结束报文段,当主动关闭方收到这个结束报文段后发送ACK确认,此时进入TIME_WAIT状态并一般维持2MSL(报文段最大生存时间)的时间再进入CLOSED状态。

TIME_WAIT的意义:

  • 保证迟来的数据能被识别并丢弃
  • 保证可靠的终止TCP连接

 

猜你喜欢

转载自blog.csdn.net/judgejames/article/details/86607930