我遇到了最奇怪的问题:有时,只有在非常特定的请求上,Web 服务器才会在发送 FIN 数据报后向客户端发送 RST。首先,对设置的描述:
服务器上的 HTTP 日志表明客户端有时会发出多个后续相同的请求。客户端只是在收到来自服务器的 RST 数据包后重新尝试。
我附上了几个 tcpdumps:
Good1 和 Good3 之间的区别在于从服务器发送 ACK 的顺序,ACK'ing 客户端的请求。该请求分为 2 个部分。一个用于 HTTP 标头,第二个用于包含空 JSON 对象的正文:"{}"
.
在 Good1 中,服务器在第二个请求到达后确认这两个请求。在 Good3 中,服务器在请求到达时立即确认每个请求。并不是说它应该有所作为。
请注意,在所有“坏”会话中,服务器在收到每个请求后立即对其进行确认。其他几个糟糕的会话中的情况是一样的,但不包括在内。奇怪的是,在“Good3”中也表现出相同的行为,使得这种观察有点毫无意义。我不明白这有什么关系。
最重要的是,我无法确定好的和坏的会话之间的显着差异。
我的问题是:为什么要生成这些 RST?
或者至少:我如何进一步调试这个,或者在这里提供更多有用的信息?
编辑我学到的两个新事实: