【网络编程笔记五】tcp状态分析之FIN_WAIT2和CLOSE_WAIT

本文记录以下几个问题:

1、tcp连接是三次握手,而为什么关闭连接需要四次握手?
2、当发现发起关闭的一方,有大量FIN_WAIT2状态的时候(即被关闭的一方有大量的CLOSE_WAIT),这时候的问题排查方向。

1、为什么tcp关闭连接是四次挥手:

除了客户端和服务端同时发起连接关闭的情况,大部分情况下都是由一方先发起连接的关闭,由于关闭是双向,这时候另一方发起FIN的操作是在应用层发起的,因此这里回ACK和发FIN这两个步骤不是一起的,所以加起来有四次数据FIN-ACK-FIN-ACK。(客户端和服务端同时发起连接关闭的情况也是产生四次数据)。
连接时的三次握手的区别在于:三次握手一旦发起后,剩下的流程都是在传输层进行。

2、半关闭连接的问题排查方向:

这时候的状态是,客户端调用了close,发送了FIN,服务端也回应了ACK,这时,客户端处于FIN_WAIT2、服务端处于CLOSE_WAIT。接下来服务端一直没有调用close来发起另一个方向的连接关闭。所以此时要考虑的时候,服务端在清理客户端的业务数据的时候,是否存在阻塞现象。
举例:比如在即时通信系统中,在客户端关闭连接的时候,服务端要对客户端的一个状态进行数据的存储,比如把该个客户端的最后状态存入数据库,这时候必然操作一些处理的耗时,解决方法是:把数据存入到队列中,然后调用close关闭连接,然后再去处理(或者让其他线程去处理)这些关闭前的缓存数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值