一次网络连接残留的分析

💡 原文中文,约39800字,阅读约需95分钟。
📝

内容提要

本文分析了LVS TCP探活连接残留问题,发现RST包与第三次握手的ACK乱序到达,导致RST包被丢弃。通过Scapy重现多个场景,验证了不递增的带时间戳RST包会被丢弃,从而造成连接残留。最后总结了监控方法和内核相关知识。

🎯

关键要点

  • LVS TCP 探活连接残留问题分析,发现 RST 包与 ACK 乱序到达导致 RST 被丢弃。
  • 通过 Scapy 重现多个场景,验证不递增的带时间戳 RST 包会被丢弃,造成连接残留。
  • 正常三次握手后发送 RST 包,作为对比项,发现 RST 包的处理与时间戳有关。
  • 构造场景时,客户端使用 Scapy 构造网络包,服务端通过 Python 启动 WEB 服务。
  • 在测试中,RST 包的时间戳不递增会导致连接残留,且内核会丢弃这些 RST 包。
  • 监控方法包括使用 netstat 和 tcpdump 来确认包的接收情况和顺序。
  • 总结了内核相关知识,强调了 timestamp 的重要性,特别是在三次握手阶段。
  • 监控指标 PAWSEstab 可以用来观察因时间戳不递增而被拒绝的连接数量。
➡️

继续阅读