三次握手與四次揮手
傳輸層有兩個協議:TCP協議和UDP協議,兩者主要的區別是TCP是提供可靠服務,而UDP是提供不可靠服務。UDP沒有TCP為了保證傳輸而進行的三次握手和四次揮手,所以UDP在效率上高於TCP,目前還應用在一些語音、視頻等對丟失信息不敏感的信息傳輸中。
本文主要介紹一下TCP中的三次握手和四次揮手,詳細介紹其流程、原理以及缺點。
1、三次握手
三次握手需要用到下面的標誌位和數據:
SYN表示請求打開連接;
流程就是上圖所示
第一次握手:客戶端發送SYN=1標誌符給服務器,請求與服務器建立連接,同時發送seq=x給服務器;其中x是客戶端產生的,位於TCP首部中。
第二次握手:服務器收到客戶端的消息後,如果確認請求便向客戶端回復
第三次握手:客戶端收到了服務器發來的消息,ACK=1說明服務器確認了客服端向其發送的建立連接請求被確認,接著驗證ack=x+1,確認回復的是自己發送的連接請求;收到了服務器向客戶端發送的建立連接請求SYN=1,seq=y,同意建立連接,回復ACK=1,ack=y+1。
當服務器收到客戶端發送的ack=y+1和ACK=1,即整個三次握手完成,可以進行TCP通信。
為什麽需要三次握手?
根本原因是為了防止客戶端的消息由於擁塞等原因,又重復發送一次SYN請求。由於請求實質上沒有丟失,服務器之後會收到兩次
2、四次揮手
四次握手可以由客戶端發起,也可以由服務器端發起,所以只區分主動方和被動方。當一方發送完全部數據,即發起Fin斷開請求。
第一次揮手:主動方發送請求FIN=1,表示主動方已經發送完所有的數據,這時發送最後的數據ack=Z,發送序列號seq=X;
第二次揮手:被動方收到了主動方的請求和序號,確認後斷開從主動方到被動方的連接,並回復消息:
第三次揮手:當被動方將所有的數據發送完成後,向主動方格發送斷開連接請求FIN=1,ack是對上一次傳輸數據的確認,發送序號seq=Y;
第四次揮手:確認請求,斷開從被動端到主動端的連接。
需要四次握手的原因:
因為在被動方收到主動方的斷開請求FIN時可能還有數據需要發送,所以被動方回復主動方的確認後繼續發送數據,完成數據發送後再向主動方發送請求,發送斷開請求。而三次握手時由於中間不需要發送數據,所以確認和發送請求一並發送,即三次。
三次握手與四次揮手