TCP 重传三次握手的syn+ack以及最后一个ack包

我们的一个数据库出现了连接上去之后info请求不返回的问题,为了找到问题原因,我做了一个tcpdump,结果发现,他有大量重传tcp的第二个,第三个握手包,并且在重传几次之后reset:


嗯,第一个syn包重传我遇到过了,见我之前的文章,但是第二个和第三个同时重传的,我还真没遇到过。而且在我的环境下,这个问题很神奇,因为:

  1. 第一个包能到达,因为返回了第二个syn包。说明网络是好的。
  2. 第二个包也回来了,说明linux认为连接能被建立。
  3. 已经建立的连接,通讯完全正常。
  4. 当时cpu负载并不高,至少操作系统没有很忙。
  5. 连接数不多,大概就两百个左右。
  6. 检查了防火墙, 没有任何过滤条件

我查了一下netstat,发现该端口有大量的close_wait的连接,于是怀疑是不是服务器的哪里阻塞住了,导致了这个问题。并且所有close wait的连接,recv queue都是有15byte数据等待读取的,让我更加怀疑这个是服务器没有正确处理socket读取请求导致的问题。

直觉让我认为,有可能是服务器的应用在忙着做什么东西,导致一直没有accept连接。但是已经accept的,可能在其他线程正常工作。

Listen Queue Length

如果写过linux socket的人可能知道,一般创建一个端口并监听,连接,需要以下动作:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值