TCP状态转化。

TCP连接的状态转换如下图所示。

  1.  CLOSED:起始点,在超时或者连接关闭时进入此状态。
  2. LISTEN:Server端在等待连接时的状态,Server端为此要调用Socket、bind、listen函数,就能进入此状态。这称为应用程序被动打开(等待客户端来连接)。
  3. SYN-SENT:客户端发起连接,发送SYN给服务器端。如果服务器端不能连接,则直接进入CLOSED状态。
  4. SYN-RCVD:与3对应,服务器端接受客户端的SYN请求,服务器端由LISTEN状态进入SYN-RCVD状态。同时服务器端要回应一个ACK,发送一个SYN给客户端;另外一种情况是,客户端在发起SYN的同时接收到服务器端的SYN请求,客户端会由SYN-SENT转换到SYN-RCVD状态。同时服务器端要回应一个ACK,发送一个SYN给客户端;另外一种情况是,客户端在发起SYN的同时接收到服务器端的SYN请求,客户端会由SYN-SENT转换到SYN-RCVD状态。
  5. ESTABLISHED:服务器端和客户端在完成3次握手后进入状态,说明已经可以开始传输数据了。
  6. FIN-WAIT-1:主动关闭的一方,由状态5进入此状态。具体动作是发送FIN给对方。
  7. FIN-WAIT-2:主动关闭的一方,接收到对方的FIN ACK,进入此状态。由此不能再接收对方的的数据,但是能够向对方发送数据。
  8. CLOSE-WAIT:接收到FIN以后,被动关闭的一方进入此状态。具体动作是在接收到FIN的同时发送ACK。
  9. LAST-ACK:被动关闭的一方,发起关闭请求,由状态8进入此状态。具体动作是发送FIN给对方,同时在接收到ACK时进入CLOSED状态。
  10. CLOSING:两边同时发起关闭请求时,会由FIN-WAIT-1进入此状态。具体动作是接收到FIN请求,同时响应一个ACK。
  11. TIME-WAIT:这个状态比较复杂,也是我们最常见的一个连接状态,有3个状态可以为此状态。
  •     由FIN-WAIT-2转换到TIME-WAIT,具体情况是:在双方不同时发起FIN的情况下,主动关闭的一方在完成自身发起的关闭请求后,接收到被动关闭一方的FIN后进入的状态。
  •     由CLOSING转换到TIME-WAIT,具体情况是:在双方同时发起关闭,都做了发起FIN的请求,同时接收到了FIN并做了ACK的情况下,这时就由CLOSING状态进入TIME-WAIT状态。
  •     由FIN-WAIT-1转换到TIME-WAIT,具体情况是:同时接收到FIN(对方发起)和ACK(本身发起的FIN回应),他与CLOSING转换到TIME-WAIT的区别在于本身发起的FIN回应的ACK先于对方的FIN请求到达,而由CLOSING转换到TIME-WAIT则是FIN先到达。

       搞清楚TCP连接的几种状态转换对我们调试网络程序是非常有帮助的。例如,当我们在压测一个网络程序时可能遇到CPU、网卡、带宽等都不是瓶颈,但是性能就是压不上去的情况,你如果观察一下网络连接情况,看看当前的网络连接都处于什么状态,可能就会发现由于网络连接的并发数不够导致连接都处于TIME_WAI状态,这时就要做TCP网络参数调优了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值