美文网首页Linux/网络
TCP Retransmission 连接超时

TCP Retransmission 连接超时

作者: 凯撒公猿 | 来源:发表于2019-08-24 21:53 被阅读0次

记一次TCP 连接超时

背景

用户反馈 >> 有出现支付超时、页面问题 (部分情况会出现)

分析

  1. 检查最近是否有上线导致 (并没有上线) 排除

  2. 对接第三方平台 API接口是否有上线 (没有) 排除

  3. 是否网络延迟导致 (从前端 到后端 内网检测没问题ICMP包),检查从外网到第三方接口(ICMP没有问题) 排除网络问题导致

  4. 没有办法只能上tcpdump 抓包 (抓取双方服务器 网络通讯数据包)
    发现 ICMP,http协议均无问题,只有TCP 出现问题,如图所示:


    image

难道是TCP连接跑满了?

检查本机机房并没有,检查对方服务器也没有。

我擦 一头雾水 怎么搞。。。。。。

冷静分析一波。。。。。。。抽个烟想想。。。

image

从TCP 抓包上看吧 问题描述:TCP Retransmission

SYN重传,第三次握手被重传了,没有收到服务器放的ACK确认
在服务器上抓包能捕获SYN的请求,那就说明服务器端接收到了请求但是没有回应ACK包,于是想起了以前nat环境下tw_recyle``的坑,当多个客户端使用同一个外网IP通过NAT访问内网服务器的时候,服务器如果在内核参数中打开了net.ipv4.tcp_tw_recycle = 1`

就有可能导致服务器收到SYN但是不会向客户端发送SYN+ACK包。因为打开recyle参数后会识别这些包的时间戳(net.ipv4.tcp_timestamps = 1),但是nat过来的数据包又因为时间戳有可能不是顺序的,导致服务器认为包不可信而丢弃。

故当我们在使用阿里云的VPC虚拟专网的时候,使用弹性IP接入,一定要注意NAT的问题,在服务器参数上关闭net.ipv4.tcp_tw_recycle。 否则从一个ip来的不同客户端请求很有可能导致大量请求失败

原文链接

测试验证是否是这问题。

修改 linux /etc/sysctl.conf   
sysctl -p

验证一波,然并卵的感觉

image
image

Timestamp value 成功的值都比较小

改/etc/sysctl.conf文件里面得
net.ipv4.tcp_timestamps=0

再次 抓包测试 TCP 连接没有再出现 超时

搞定收工

timestamp扩展:

同时开启timestamp(时间戳)和tw_recycle(快速回收),会导致在一个MSL时间内只响应timestamp递增的请求,对于时间戳较小的请求都抛弃了(不响应ack)

MSL扩展: RFC793中规定MSL为2分钟,也就是说2分钟内同一个ip的请求的时间戳要求递增,不是递增的话服务器不予响应。

我的博客地址

相关文章

  • TCP Retransmission 连接超时

    记一次TCP 连接超时 背景 用户反馈 >> 有出现支付超时、页面问题 (部分情况会出现) 分析 检查最近是否...

  • TCP中RTT的测量和RTO的计算

    RTO(Retransmission TimeOut)即重传超时时间 TCP超时与重传中一个最重要的部分是对一个给...

  • TCP 超时管理 "TCP/IP详解" 第十四章 读书笔记

    连接建立时发生失败或传输数据超时 连接发起方会以指数级等待, 并尝试重新建立连接 R1: TCP认为超时过多, 应...

  • TCP

    TCP连接,对端宕机,本端可能无法感知到。 TCP连接,对端宕机,发送数据包没有受到ACK,超时后重传,其他数据包...

  • TCP拥塞控制

    TCP超时与重传机制 TCP协议是一种面向连接的可靠的传输层协议,它保证了数据的可靠传输,对于一些出错,超时丢包等...

  • TCP协议的超时详解

    众所周知,TCP协议是一个可靠的的协议。TCP的可靠性依赖于大量的 Timer 和 Retransmission ...

  • boost tcp连接设置超时

    本文参考了用asio的定时器实现带超时的connect,备忘,做了一些改进。把代码贴在这里吧: 使用代码为:

  • postgresql tcp 连接超时问题

    错误现象 应用中遇到一个错误 问题分析 Connection timed out 数据库侧记录 的日志之一 数据库...

  • 3分钟理解mysql所有timeout的值

    1.客户端和服务端建立tcp连接超时:connect_timeout2.客户端的连接长期处于空闲连接(sleep)...

  • TCP-IP协议详解(11) TCP重传

    TCP协议是一个可靠的协议。它通过重新发送(retransmission)来实现TCP片段传输的可靠性。简单的说,...

网友评论

    本文标题:TCP Retransmission 连接超时

    本文链接:https://www.haomeiwen.com/subject/yphcectx.html