HTTP 请求的 TCP 段顺序错误

HTTP 请求的 TCP 段顺序错误

我的 Web 服务服务器有时无法接收正确的 HTTP 请求并返回“500 - 内部服务器错误”。tcpdump在服务器上使用 Wireshark 后,我发现 HTTP 请求被拆分为 2 个 TCP 数据包,并且有时服务器会在第二个数据包到达之前尝试处理该请求。

此 wireshark 捕获已在服务器端采取。

所以我看到的是:

  • HTTP 请求的第一个片段在54.659
  • 再次收到71.168
  • 请求的第二个(也是最后一个)片段在99.869(即第一个片段之后 45 秒)收到
  • 四毫秒前,在 时99.865,服务器出现超时并尝试处理不完整的请求(出现 500 错误)

我不知道现在该去哪里找。我想说这是网络问题,但我有几个 TCP 流,服务器在完全接收请求之前几毫秒尝试处理请求。另一方面,需要 45 秒以上才能到达的 TCP 数据包意味着网络确实很糟糕。

您对如何进行进一步调查有什么指点吗?

答案1

我不知道现在该看哪里

没有地方,真的。

发生。

第一个发生后 45 秒

那真是太严重了。说真的。欧洲到美国的互联网延迟约为 150 毫秒。您的延迟是这个数字的 30 倍 - 如果不重新发送,就会掉线。遗憾的是,除非您控制双方(!),否则您无法控制客户端的行为。这样的事情时有发生。

如果那是您的 LAN - 那真是太糟糕了。如果那是互联网,那就是这样。主要问题是它有多糟糕 - 如果是“数千个连接”,则可能是另一端存在严重的网络问题。如果几乎每个人都遇到这种情况,则它更接近您这边(连接、数据中心等)。例如,昨天我们这里就遇到了这样的情况 - 一些愚蠢的 *** DDOS 攻击了我的一个链接。严重的拥塞可能导致数据包几乎无法通过。但如果那不是您 - 您无能为力。

这就像有人开会迟到了,然后告诉你他遇到了严重的交通堵塞。除非堵车发生在你所在的街道上,否则你不可能知道。有时,有些地方的互联网质量会很差。

答案2

重传可能是线索。客户端没有收到服务器为该数据包发送的 ACK。服务器还在转储开始时从同一源端口收到两个 SYN。

这两个 IP 地址都是本地的,所以我猜这不会通过互联网进行。您可以访问客户端吗?

尝试同时在客户端和服务器上执行相同的数据包跟踪。我预计您会看到发送的内容和接收的内容之间存在很大差异。

然后跟踪电缆。延迟和数据包丢失非常大,我会寻找当电压上升到足够高时电子会跳过的气隙,或者寻找一根剥落的 Cat-5 电缆,其连接处生锈并且上面有水滴。

更换网络部件(设备、端口和电缆),直到问题消失。

答案3

您是否尝试过指定响应的可缓存性以禁止中间设备缓存?

缓存控制:无缓存

或者

缓存控制:私有

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9

相关内容