我正在實現一個TCP堆棧,並遇到半關閉連接的問題。TCP:半關閉連接上的數據
我的實現充當服務器端。客戶端建立連接,然後發送一些數據,然後發送「FIN」消息。然後服務器確認來自客戶端的數據,發送一些自己的數據,然後關閉它的一半連接(發送「FIN」)。
問題是,客戶端不會確認服務器在半關閉連接上發送的數據,也不會收到其最終的「FIN」消息。根據netstat,客戶端處於狀態FIN_WAIT2。在服務器不發送任何數據的相同情況下,事情會順利進行。 有問題的客戶端是netcat,所以我認爲問題在我的端:)
我的問題是,一般情況下,我應該期望在半關閉連接上發送數據的ACKS;特別是,我在上面的例子中做了什麼錯誤。
任何幫助將不勝感激!
從對等角度來看,你不知道它是半關閉連接。客戶端可能已經完全關閉了連接,在這種情況下,端口位於您身邊的CLOSE_WAIT位置,同時端口位於FIN_WAIT_2位置,但對等方會向您的發送發送RST而不是ACK。您的鏈接下載.exes,就我而言,這可能是病毒。有沒有其他方法可以使它們可用? – EJP
感謝您的評論。 我更新了鏈接 - 希望他們現在能正確顯示。 –
截圖中的最後一行是第一個PSH的ACK。還有更多嗎? – EJP