更新時間:2018-08-09 來源:黑馬程序員 瀏覽量:
每當建立一個TCP/IP連接的時候都要經(jīng)歷3次握手,這是為了保證建立一個可靠的連接。
三次握手客戶端向服務器發(fā)請求,服務器接收請求,服務器接收請求之后發(fā)送一個連接標志,客戶端接收連接標志之后也向服務器發(fā)送一個連接標志,至此連接完成。
生活中的栗子: 小明和小麗的故事。話說有一天小麗給小明說我喜歡你(syn,一次握手) 小明聽到小麗的的表白后說知道了,我也喜歡你,也說了聲(ack, syn, 二次握手) ,小麗聽到小名說喜歡自己以后,說我知道了 (ack, 三次握手)
第一次握手:主機A發(fā)送位碼為syn=1,隨機產(chǎn)生seq number=1234567的數(shù)據(jù)包到服務器,主機B由SYN=1知道,A要求建立聯(lián)機;
第二次握手:主機B收到請求后要確認聯(lián)機信息,向A發(fā)送ack number=(主機A的seq+1),syn=1,ack=1,隨機產(chǎn)生seq=7654321的包
第三次握手:主機A收到后檢查ack number是否正確,即第一次發(fā)送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發(fā)送ack number=(主機B的seq+1),ack=1,主機B收到后確認seq值與ack=1則連接建立成功。為什么有4次揮手呢,4次揮手的作用就是斷開連接,之所以要斷開連接是因為TCP/IP協(xié)議是要占用端口的,而計算機的端口是有限的,所以一次傳輸完成之后是要斷開連接的,斷開連接的方式就是4次揮手。
還是小明和小麗的故事:話說小名和小麗在一起后小明發(fā)現(xiàn)自己零花錢不夠花了,也沒有時間玩游戲了,然后就給小麗說我們分手把(FIN, 第一次揮手),這個時候小麗可能很難過說知道了(ack, 第二次揮手),,很久很久都沒有說話,過了很久小麗說我同意分手了(FIN, 第三次揮手),這個時候小明說,管你了,我早就和你分手了(ack,第四次揮手)
由于 TCP 連接是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的數(shù)據(jù)發(fā)送任務后就能發(fā)送一個FIN 來終止這個方向的發(fā)送通道。收到一個 FIN 只意味著這一方向上沒有數(shù)據(jù)流動,一個 TCP 連接在收到一個 FIN 后仍能發(fā)送數(shù)據(jù)。首先進行關閉的一方將執(zhí)行主動關閉,而另一方執(zhí)行被動關閉。
客戶端 A 發(fā)送一個 FIN ,用來關閉客戶 A 到服務器 B 的數(shù)據(jù)傳送。服務器 B 收到這個 FIN ,它發(fā)回一個 ACK ,確認序號為收到的序號加 1。和 SYN 一樣,一個FIN 將占用一個序號。服務器 B 關閉與客戶端 A 的連接,發(fā)送一個 FIN 給客戶端 A ??蛻舳?A 發(fā)回 ACK 報文確認,并將確認序號設置為收到序號加 1 。