1. 程式人生 > >對TCP狀態的新理解

對TCP狀態的新理解

以前一直不明白TCP的四次斷連線的意義在哪,通過一段時間實踐的領悟大約明白了
1. 首先發起斷連線的一方,傳送一個FIN訊號給被斷連線的從方,在C++的程式碼裡表示為close(fd),那麼這個連線就進入FIN_WAIT1狀態。
2. 被動的一方,在收到斷連線之後傳送ack給主動斷連線的一方,這時候被動方就進入CLOSE_WAIT狀態,主動方就進入FIN_WAIT2狀態。值得注意的是,這個是協議自動完成的,當被動方不呼叫自己的close(fd) 操作則會一直保持這狀態,通過netstat去觀察一直會有這個CLOSE_WAIT狀態,這樣如果被動方不呼叫close(fd)操作的話,會一直導致fd洩漏。
3. 被動一方呼叫close(fd) 方法關閉連線之後,傳送一個FIN給主動端,則主動方就進入time_wait狀態,被動方進入LAST_ACK狀態
4. 主動一方傳送最後的ack給被動方,被動方接收到之後關閉連線,主動方則經過2 MSL時間也關閉連線

最後盜個圖這裡寫圖片描述