首页/网络/抓包与流量分析速查/握手延迟的分解方法
TCP 流分析82 条

握手延迟的分解方法

建连总耗时 = SYN 发出 → 到达服务端 + 服务端处理 + 响应返程:两端抓包对照即可把"连接为什么慢"拆成网络与服务器两部分。

握手延迟的分解方法

建连总耗时可以拆成三段:请求从客户端发出到抵达服务端、服务端处理并返回响应、响应返回到客户端。在两端同时抓包把这三段分别量出来,就能判断「连接为什么慢」究竟是网络问题还是服务端问题。

基本信息

适用平台两端均可抓包的链路,Wireshark 或 tcpdump 都可以
拆解方法客户端量总时长,服务端量内侧处理时长
关键观测点服务端发出响应的时刻,用来切分网络与服务端
注意事项两侧时钟未同步时需先做基准平移

典型使用场景

  • 归因建连延迟:把总耗时拆成网络与服务端两部分
  • 排查队列问题:服务端内侧耗时长时查看监听队列与负载
  • 跨区域对比:比较不同区域的网络往返差异
  • 验证网络变更:调整路由或链路后对比往返变化
  • 排查中间设备:负载均衡自身的处理时间也会被算进去

分解示例

分解示例
# 客户端:SYN 到 SYN-ACK 用时 320 毫秒
# 服务端:收到 SYN 到发出 SYN-ACK 用时 3 毫秒
# 结论:网络往返约 317 毫秒
# 若服务端内侧也是 300 毫秒,则应查队列与负载

结果判读

客户端耗时服务端内侧耗时结论
大小网络往返慢
大大服务端处理慢
小大服务端本地异常
小小两侧都不慢,应看后续阶段
服务端发出响应的时刻是区分「网络慢」与「服务端慢」的关键观测点。只有客户端侧数据时,无法把这两种情况分开。
两侧时钟未同步时,用一次已知的往返时延做基准平移,再对比其余时间点,比直接相减可靠得多。
链路中间有负载均衡时,要先约定「服务端」指的是负载均衡还是真实后端。口径不一致会让两侧的对比失去意义,也容易把负载均衡的排队时间算到后端头上。

易错点

  • 两侧时钟未同步时用单次往返时延做基准平移后再对比
  • 负载均衡在中间时"服务端"要算到哪一层,口径先约定
  • 只抓客户端就断定服务端慢:网络往返同样会拉长总耗时
  • 用平均值代替分布观察:偶发的慢建连会被平均值掩盖

数据来源与参考

  • Wireshark User's Guide(多抓包点)
  • RFC 9293
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌