为什么有些连接超时而其他连接被拒绝?

pra*_*tri 15 networking tcp

我注意到有时在尝试在某个随机端口进行 telnet 时,我观察到两种情况:

$ telnet example.com 3432
  Trying 173.252.110.27...

$ telnet example.com 3432
  Connection Refused.
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这两者有什么区别吗?

dmo*_*ati 11

一个原因是 example.com 上防火墙的行为。如果防火墙只是丢弃流量,您将看到第一个响应。另一方面,如果防火墙拒绝流量,您将获得第二个。

为了更好地理解,请在执行测试时使用数据包过滤器(例如tcpdumpwireshark)并嗅探流量。

第一种情况看起来像 Syn,Syn,Syn...

第二种情况看起来像 Syn,Rst 以及可能的 ICMP 端口不可达。

成功的连接看起来像我们在 tcp三向握手中期望的 Syn,Syn-Ack,Ack 。

  • 一个疑问,所以万一,如果某个应用程序没有在某个端口上侦听并且没有防火墙阻止与该端口的连接,我应该会遇到第二种情况。我的意思是我应该在回复中设置一个 RST TCP 标志。我对么 ? (2认同)
  • @pradeepchhetri 是的,如果没有任何东西*监听或阻止到实时主机的流量*,您将收到连接拒绝错误(以及相关的 TCP RST 数据包)。然而,这在当今互联网上非常罕见。 (2认同)