TCP通信主動斷開的一方最后發送一個ACK后會進入TIME_WAIT狀態等待2MSL,如果對方沒收到就重發。
對這點描述不是很理解,FIN是通過接收到對方的ACK來判斷是否需要重發,那這個最后的ACK又是怎么知道對方有沒有收到呢。
uj5u.com熱心網友回復:
csdn論壇越來越冷清了uj5u.com熱心網友回復:
這個要配合TCP狀態轉換圖看就更清晰了。(1). 以四次握手為例,主動關閉的一方只有在收到來自對端的FIN之后才會從FIN_WAIT_2狀態切換到TIME_WAIT狀態。
(2). 收到合法的FIN之后,會發送ACK。單純的ACK包是不會被重傳的。
(3).如果對端沒有收到ACK,會重傳FIN包,在收到FIN包之后,主動關閉的一方會再次ACK。
(4).如果被動一方始終沒能收到ACK,最侄訓超過最大重傳次數,連接被關閉。
uj5u.com熱心網友回復:
FIN和ACK之間的重傳機制我沒有疑惑,包括失敗嘗試最多次數,上述4點我同意,不過不是我疑惑的最后一步,從網上拷了張圖示注了下,最后發一個ACK后進入TIME_WAIT等對方確認收到,否則重復,我看了狀態轉換圖,對方已經沒有任何可能的回應了。
uj5u.com熱心網友回復:
主動關閉的一方是沒辦法知道對方是否收到了ACK的。所以才普遍采用了這種重傳若干次然后放棄的策略,因為通信雙方沒法在不可靠的信道的就某一個事件達成一致。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/121894.html
標籤:網絡協議與配置
上一篇:埠映射的問題。求助
