三次握手
三次握手是指在建立TCP連接時,需要client端和server端共進行三次信息確認。
第一次握手:建立連接。client發送連接請求報文段(SYN位置為1,Sequence Number為x),然后,client端進入SYN_SEND狀態,等待server端的確認;
第二次握手:server端收到client端的SYN報文段,需要對這個SYN報文段進行確認,若同意連接,將ACK位置為1,Acknowledgment Number為x+1(Sequence Number+1);同時,自己自己還要發送SYN請求信息,將SYN位置為1,Sequence Number為y;服務器端將上述所有信息放到一個報文段(即SYN+ACK報文段)中,一并發送給client端,此時server端進入SYN_RCVD狀態;
第三次握手:client端收到server端的SYN+ACK報文段,向服務器發送ACK報文段(ACK位置為1,Acknowledgment Number設置為y+1,Sequence Number為x+1),這個報文段發送完畢以后,client端和server端都進入ESTABLISHED狀態,完成TCP三次握手。
四次揮手
四次揮手是指在釋放TCP連接時,需要client端和server端共進行四次信息確認。
第一次揮手:client端數據傳輸完畢需要斷開連接,client端通過TCP向server端發出連接釋放報文段(FIN位置為1,Sequence Number為u),并停止再發送數據,主動關閉TCP連接,進入FIN-WAIT-1狀態,等待server端的確認;
第二次揮手:server端收到連接釋放報文段后即發出確認報文段(ACK位置為1,Acknowledgment Number為u+1,Sequence Number為v),server端進入CLOSE-WAIT關閉等待狀態,此時的TCP處于半關閉狀態,client端到server端的連接釋放。而client端收到server端的確認后,進入FIN-WAIT-2狀態,等待server端發出的連接釋放報文段;
第三次揮手:當server端數據傳輸完畢后,server端發出連接釋放報文段(FIN位置為1,ACK位置為1,Sequence Number為w,Acknowledgment Number為u+1),server端進入LAST-ACK(最后確認)狀態,等待client端的最后確認;
第四次揮手:client端收到server端的連接釋放報文段后,對此發出確認報文段(ACK位置為1,Sequence Number為u+1,Acknowledgment Number為w+1),client端進入TIME-WAIT(時間等待)狀態。此時TCP未釋放掉,需要經過時間等待計時器設置的時間2MSL后證明server端進入CLOSED狀態,client才進入CLOSED狀態。