TCP 长连接 CWND reset 的问题分析

💡 原文中文,约6400字,阅读约需16分钟。
📝

内容提要

本文讲述了作者在维护service mesh平台时遇到的延迟问题,通过分析日志和抓包发现是TCP行为导致的,最终定位到系统TCP配置中的一个参数导致的,通过改变参数值解决了问题。文章还涉及拥塞控制算法和TCP实现细节。

🎯

关键要点

  • 作者维护的service mesh平台遇到延迟问题,用户反馈延迟超过200ms。
  • 通过分析日志和抓包,发现问题与TCP行为有关,最终定位到TCP配置中的一个参数。
  • 用户工单中提到P99延迟升高,作者通过日志确认存在慢请求。
  • 与开发团队沟通后,得到的结论是网络问题,作者决定自己排查。
  • 抓包分析显示TCP拥塞控制窗口在每个请求后重置,作者对此感到困惑。
  • 经过测试,发现SDN环境中的TCP行为与物理网络不同,怀疑是SDN的问题。
  • 最终确认是TCP配置中的net.ipv4.tcp_slow_start_after_idle参数导致的问题。
  • 修改该参数后,延迟问题得到解决,cwnd稳定在1000左右。
  • RFC 2414和RFC 5681解释了TCP在idle状态下为何需要慢启动的原因。
  • 作者总结了TCP拥塞控制对数据延迟的影响,强调长连接的使用并不能完全解决慢启动延迟问题。
➡️

继续阅读