我可以通过发送不可达主机的ICMP来停止tcp握手

这是发生了什么事:

客户端 – 发送同步

服务器 – 发送icmp(无法访问主机[我也尝试添加代码= 10])等待100毫秒发送syn-ack

客户端 – 发送确认以响应同步。

当发送不可达主机的icmp时,客户端应该重置tcp握手? 有什么办法让客户端通过发送某种ICMP来重置连接?

testing在直接连接的2 Ubunto机器上完成。 在wireshark中,我看到icmp在syn-ack之前被恢复,连接没有被重置。 客户端运行telnet(端口80)到服务器。 在服务器上运行apache。 我使用python scapy在synack之前模拟icmp。

谢谢

是的客户应该停止尝试连接…但是:

  1. 许多大脑死亡的ISP阻止ICMP或ICMP消息的一个子集。
  2. 许多NAT不能正确传递ICMP消息。
  3. 许多操作系统在防火墙上阻止ICMP。
  4. 许多“安全”套件阻止ICMP。
  5. 并非所有IP堆栈都能正确响应ICMP。
  6. 并非所有应用程序/ API都能正确响应ICMP。

所有这一切,你描述的情况不仅比它应该是常见的,而且很常见。