TCP請求連接時進行三次握手:
第一次握手:客戶端給服務端發送SYN(同步信號)信號,請求連接。
第二次握手:服務端接收到客戶端的SYN信號後,給客戶端發送SYN和ACK應答信號,確認連接。
第三次握手:客戶端收到服務端的應答信號後,給服務端發送ACK信號,確認連接,這樣客戶端與服務端建立連接。
- 爲什麼不是兩次或者四次握手?
如果兩次握手,即客戶端發送SYN請求連接信號,服務器接收信號後發送SYN+ACK應答信號,客戶端與服務端建立連接。如果遇到客戶端的請求信號發生延遲現象,或者已經失效的連接請求突然又發送收到了客戶端,產生錯誤。
如果四次握手,即三次握手之後,服務端再次給客戶端發送ACK信號,則服務端資源會被浪費。所以三次握手是能夠建立安全連接的最少次數。
TCP終止連接時是四次握手:
第一次握手:客戶端已經發送完數據,並且知道服務端已經接收完數據,想要終止連接,給服務端發送FIN終止信號。
第二次握手:服務端接收到終止信號後,會發送一個ACK確認收到的應答信號,但是由於服務端的數據還在發送中,所以無法在接收到終止連接請求時立即終止連接。
第三次握手:服務端等到數據發送完畢後,會發送FIN終止連接信號給客戶端。
第四次握手:客戶端接收到FIN信號後,知道服務端數據發送完畢,發送ACK確認收到信號。客戶端等待2MSL後,如果沒有收到服務端傳來的任何消息,就表明服務端已經收到確認消息,客戶端關閉連接,服務端也關閉連接。
- 客戶端爲什麼要等待2MSL?