小编Nit*_*ked的帖子

FIN/ACK 之后的 TCP RST

我遇到了最奇怪的问题:有时,只有在非常特定的请求上,Web 服务器才会在发送 FIN 数据报后向客户端发送 RST。首先,对设置的描述:

  • 服务器:Win7 x64 主机中的 VM 来宾 Ubuntu 12.04.1 LTS,桥接模式,主机上禁用了 ufw
  • 客户端:Win7 x64 主机上的 Mountain Lion (hackintosh) VM 来宾中的 iOS 模拟器,桥接模式。
  • 两者都在同一个局域网上。一个通过以太网连接到路由器,另一个通过 WiFi 连接到路由器。

服务器上的 HTTP 日志表明客户端有时会发出多个后续相同的请求。客户端只是在收到来自服务器的 RST 数据包后重新尝试。

我附上了几个 tcpdumps:

  • Good1 是良好会话的服务器端 tcpdump(“良好”意味着没有生成 RST)。
  • Good3 是一个良好会话的另一个服务器端 tcpdump。

Good1 和 Good3 之间的区别在于从服务器发送 ACK 的顺序,ACK'ing 客户端的请求。该请求分为 2 个部分。一个用于 HTTP 标头,第二个用于包含空 JSON 对象的正文:"{}".

在 Good1 中,服务器在第二个请求到达后确认这两个请求。在 Good3 中,服务器在请求到达时立即确认每个请求。并不是说它应该有所作为。

  • Bad1 是客户端和服务器端错误会话的转储。
  • Bad2 是另一个坏会话,这次只是服务器端。

请注意,在所有“坏”会话中,服务器在收到每个请求后立即对其进行确认。其他几个糟糕的会话中的情况是一样的,但不包括在内。奇怪的是,在“Good3”中也表现出相同的行为,使得这种观察有点毫无意义。我不明白这有什么关系。

最重要的是,我无法确定好的和坏的会话之间的显着差异。

我的问题是:为什么要生成这些 RST?
或者至少:我如何进一步调试这个,或者在这里提供更多有用的信息?

编辑我学到的两个新事实:

  • RFC (1122) 的第 4.2.2.13 节(和维基百科,在文章“TCP”,在“Connection Termination”下)说,一台主机上的 TCP …

tcp rst

6
推荐指数
0
解决办法
5212
查看次数

标签 统计

rst ×1

tcp ×1