小编Dan*_*per的帖子

如何调试 TCP 数据包中的校验和/翻转位失败?

我们最近维护的一个 Web 应用程序遇到了一个非常奇怪的问题:两台物理主机上四分之三的虚拟机无法通过 HTTPS 连接到我们的支付提供商的服务器。调试这个问题让我对 OSI 堆栈进行了一次有趣的浏览:

  1. 在应用程序级别,似乎 HTTPS 请求超时。
  2. 使用openssl s_client,发现SSL握手失败
  3. 使用 tcpdump 转储流量并使用 Wireshark 检查,我注意到对于失败的握手,初始 SYN/ACK 之后来自服务器的所有数据包都有无效的 TCP 校验和。将数据包内容与成功的握手进行比较,我发现至少有一位发生了翻转。然后服务器尝试重新传输数据包(再次使用无效的校验和)并在 60 秒后关闭连接。

无论是我们的支付提供商还是我们的托管公司都对诊断此问题没有很大帮助。幸运的是,问题在几个小时后消失了。

然而,这个“解决方案”让我很不高兴。我想知道:

  1. 这种行为的可能原因是什么?
  2. 如果将来再次出现此问题,如何进一步诊断?

虚拟机在 KVM 上运行 Debian 7。

networking linux ssl tcp

5
推荐指数
1
解决办法
627
查看次数

标签 统计

linux ×1

networking ×1

ssl ×1

tcp ×1