Tcp狀態機
1、爲什麼建立連接需要三次握手,斷開連接需要四次握手?
舉例來說,C與S要可靠的溝通,溝通之前要又準備工作,溝通完了,要有清理工作。
溝通之前的準備工作
C:我要跟你說話,你注意聽(SYN)
S:好的(ACK),我也要跟你說話,你注意聽(SYN)
C:好的(ACK)
........
交流過程中
.......
溝通完了的清理工作
C:我說完了(FIN)
S:我知道了(ACK)
S 再說一些......
S:我說完了(FIN)
C:我知道了(ACK)
tcp是全雙工的, 建立連接,ACK的同時可以SYN,而斷開連接,往往不滿足條件,C說完了,S可能還要再說一會。
2、爲什麼,TIME_WAIT要經過2個MSL(Maximum Segment Lifetime),才進入CLOSED?
考慮下面的情況,C回了ACK立即進入CLOSED,假如S沒有收到ACK,站在S的角度,S認爲:C還不知道我已經說完了,我要再說一遍。但是這個時候C已經CLOSED,怎麼解決這個問題?
站在C的角度考慮,如果我回了ACK,S沒有收到,那麼S會重發FIN,從C回ACK,到C再次收到S的FIN,最多需要兩個報文段週期。如果在兩個報文段週期沒有收到FIN,則說明,S肯定收到了我了ACK,進入CLOSED