TCP是一種有鏈接的,安全的,準確的網(wǎng)絡通信協(xié)議,兩個網(wǎng)絡終端使用TCP通信時需要先進行建立連接碟绑。這也就是為什么即時通信類的服務不能使用TCP協(xié)議作為網(wǎng)絡傳輸協(xié)議俺猿,時間成本過大。
首先通過一張草圖描繪三次握手時格仲,客戶端和服務端之間的通信的情況押袍,
由上圖我們可以看到三次握手主要流程就是:
? 1、客戶端發(fā)送請求凯肋,等待服務度相應谊惭;
? 2、服務端收到請求侮东,發(fā)送請求確認信息圈盔;
? 3、收到服務端的請求確認信息后悄雅,在發(fā)送一個確認驱敲,確保鏈接成功可以開始發(fā)送數(shù)據(jù)。
為什么要使用三次握手宽闲,明明第二次握手時癌佩,鏈路雙方都已經(jīng)確認并做好了準備:
這是因為如果僅僅使用兩次握手,在第二步服務端發(fā)送完確認信息后便锨,就認為客戶端已經(jīng)做好了準備围辙,隨機準備發(fā)送數(shù)據(jù),如果在此過程中放案,確認數(shù)據(jù)包丟失姚建,客戶端沒有收到確認信息,這服務端的數(shù)據(jù)包將會被拒絕丟棄吱殉,服務端收不到數(shù)據(jù)包接受確認信息掸冤,將會一直超時重發(fā),白白占用鏈路帶寬友雳,嚴重時導致鏈路擁塞稿湿。
TCP鏈接結束時四次揮手主要的流程是:
四次揮手的主要流程是:
1、客戶端沒有數(shù)據(jù)再發(fā)送給服務端后押赊,然后FIN終止鏈接請求饺藤;
2、服務端收到客戶端的FIN終止鏈接請求之后流礁,發(fā)送ACK確認報文涕俗,并繼續(xù)發(fā)送數(shù)據(jù);
3神帅、服務端數(shù)據(jù)發(fā)送完畢之后再姑,關閉鏈接,發(fā)送FIN和ACK確認報文找御;
4元镀、客戶端收到服務端的FIN請求之后绍填,發(fā)送ack確認報文,等待兩個時鐘周期栖疑,如果沒有數(shù)據(jù)傳輸就關閉鏈接讨永。
為什么握手需要三次,而揮手卻需要四次:
這是因為數(shù)據(jù)傳輸?shù)膯栴}蔽挠,在建立連接時住闯,服務端收到SYN同步信息之后瓜浸,隨即就可以發(fā)送SYN和ACK同步應答澳淑,建立連接,但是在關閉鏈接時插佛,有時候收到客戶端的FIN報文時只能說明客戶端不會再發(fā)送數(shù)據(jù)給服務端杠巡,而不能確定服務端還有沒有數(shù)據(jù)發(fā)送給客戶端,所以此時只能發(fā)送給客戶端一個ACK應答報文告知客戶端雇寇,我已收到你關閉鏈接的請求氢拥,等待我數(shù)據(jù)傳輸結束,再發(fā)送關閉請求報文锨侯,所以揮手比握手多出一次報文傳輸過程