我有一个 HTTP 服务器,它为许多客户端提供许多短时间连接,服务器记录了一些无效的 HTTP 请求,因此我决定捕获网络流量。这是我得到的结果:
![图片][1]
由于 HTTP keep-alive,流看起来有 3 个请求,第一个(结束于APN: m-wap.0001
)正常,但第二个和第三个不正常。我不认为用户发送了这样的请求,我认为这是网络问题(所有无效请求看起来都来自 3G 网络用户,位于 NAT 网络后面)。我们之前使用tcp_tw_reuse
和tcp_tw_recycle
,但我现在将它们关闭,以避免可能与 NAT 网络有关的问题。但仍然有一些无效请求,您有什么建议吗?
更新:最后我找到了答案,网络提供商通过添加最后 4 个标头来更改请求,并且他们需要更新 SEQ/ACK 编号,但似乎在重新传输的情况下他们没有正确执行此操作。
答案1
您在数据包捕获中是否遗漏了部分 TCP 对话?
客户端正在发送确认,并且ACK
值在增加,这意味着已从另一端接收到数据,但您的捕获中没有这样的数据。
如果远程端发送了FIN
但其发送缓冲区中仍有一些数据,或者已发送的数据延迟且无序到达,则这些可能解释了为什么客户端在最后一帧中重置。
答案2
我在问题更新中提供了答案。