首页/网络/抓包与流量分析速查/握手重试与建连延迟
丢包与时延定位60 条

握手重试与建连延迟

SYN 未响应按 RTO 退避重试:抓包中 SYN 以倍增间隔重复出现即超时重试;总失败时间应用侧可见"连接超时"而非拒绝。

握手重试与建连延迟

建连阶段的握手报文若没有得到响应,客户端会按重传超时逐次重试,抓包表现为同一序号的首包以倍增的间隔重复出现。这类故障与“连接被拒绝”的表现完全不同:被拒绝会立即收到重置报文,而无人应答只能等到重试次数耗尽,再由应用层报告连接超时,用户感知的失败时间往往是秒级甚至更长。重试次数与超时参数由系统控制,两端都要核对;排查时还要把首次握手与重试握手区分开,避免误当成多条并发连接。

基本信息

抓包判据同序号的建连首包以倍增间隔重复出现
参数来源重试次数与超时由内核参数控制
应用表现连接超时,而非连接被拒绝
相关依据RFC 6298(重传超时计算)
对照现象被拒绝时会立即收到重置报文

典型使用场景

  • 建连超时排查:确认失败是无人应答还是被明确拒绝
  • 参数核查:核对两端系统的重试次数与超时设置
  • 路径丢包定位:结合重试间隔判断丢包可能发生的位置
  • 与解析问题区分:先确认地址解析是否已经成功
  • 故障时间评估:重试耗尽的总时长决定用户实际等待时间

过滤与对照

过滤与对照
tcp.flags.syn == 1 && tcp.flags.ack == 0     # 只看建连首包
# 观察同序号首包的间隔是否成倍增加
# 对照:被拒绝的场景会立即收到重置报文
# 重试耗尽后应用侧才会报连接超时

建连失败形态对照

形态抓包表现用户感知
无人应答首包按倍增间隔重试等待数秒后超时
连接被拒绝立即收到重置报文近乎即时失败
解析失败看不到对应连接报文报错信息指向域名
首次握手与重试握手之间的间隔属于超时重传行为,不要把它们当成两条并发连接;统计并发数时要把重试部分剔除。
建连慢与解析慢同时出现时两者都表现为等待,必须按时间线的先后顺序切分,否则无法判断究竟是哪一段先出问题。

易错点

  • 把重试握手当成多条并发连接会高估并发压力,统计前先按序号与间隔做区分
  • 建连超时与解析超时都表现为等待,不按时间线切分就无法定位到底是哪一段先失败
  • 只在一侧核对重试参数会漏掉对端的配置差异,两端都要检查
  • 用应用侧的报错信息(通常只是超时)直接判定网络不可达并不严谨,需要在抓包里确认首包是否真的发出且无人应答

数据来源与参考

  • RFC 6298
  • Linux ip-sysctl(tcp_syn_retries)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌