Networking

我可以通過發送無法訪問的主機的 icmp 來停止 tcp 握手嗎

  • August 6, 2012

這就是發生的事情:

客戶端 - 發送同步

伺服器 - 發送 icmp(無法訪問的主機

$$ i also try to add code =10 $$) 等待 100 毫秒發送 syn-ack 客戶端 - 發送 ack 以響應 syn-ack。

當發送了無法訪問的主機的 icmp 時,客戶端是否應該重置 tcp 握手?有沒有辦法讓客戶端通過發送某種 ICMP 來重置連接?

測試是在直接連接的 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。

儘管如此,你所描述的情況不僅比它應該的更普遍,而且非常普遍。

引用自:https://serverfault.com/questions/414704