TCP 連線沒有遺失?我已斷開與網路的連線*感嘆號*

TCP 連線沒有遺失?我已斷開與網路的連線*感嘆號*

這個問題源自於我和朋友的爭論。在過去的幾周里,我遇到了一個奇怪的現象。當我與互聯網斷開連接時,我的所有連接都不會中斷。即使 ssh 會話在重新連線後也保持不變。這怎麼可能?

這裡的答案表明這是完全正常的。那麼問題來了:為什麼會得到TCP連接總是對於某些人來說,即使中間沒有 NAT,重新連接到互聯網後也會丟失,我的朋友就是這種情況。除了網路供應商之外,兩種設定都是相似的:Linux 透過撥號。

答案1

這個是正常的。 TCP 中沒有任何內容要求鏈路永久打開 - 如果連接空閒(沒有發送或接收資料),只要兩端的套接字仍然打開,它就可以持續存在。 (當然,如果一端嘗試發送資料但從未收到 ACK,最終會因超時而關閉連線。)

不幸的是,這經常被有狀態的 NAT/防火牆所破壞;例如,如果您重新啟動家庭路由器,它將忘記其 NAT 表中的所有內容,並且可能會默默地丟棄傳入數據,甚至關閉連接,因為它不再知道將資料包轉發到哪個本地主機。

相關內容