首頁技術(shù)文章正文

HTTP三次握手和四次揮手

更新時間: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 連接是全雙工的,因此每個方向都必須單獨進行關(guān)閉。這個原則是當一方完成它的數(shù)據(jù)發(fā)送任務后就能發(fā)送一個FIN 來終止這個方向的發(fā)送通道。收到一個 FIN 只意味著這一方向上沒有數(shù)據(jù)流動,一個 TCP 連接在收到一個 FIN 后仍能發(fā)送數(shù)據(jù)。首先進行關(guān)閉的一方將執(zhí)行主動關(guān)閉,而另一方執(zhí)行被動關(guān)閉。

客戶端 A 發(fā)送一個 FIN ,用來關(guān)閉客戶 A 到服務器 B 的數(shù)據(jù)傳送。服務器 B 收到這個 FIN ,它發(fā)回一個 ACK ,確認序號為收到的序號加 1。和 SYN 一樣,一個FIN 將占用一個序號。服務器 B 關(guān)閉與客戶端 A 的連接,發(fā)送一個 FIN 給客戶端 A ??蛻舳?A 發(fā)回 ACK 報文確認,并將確認序號設置為收到序號加 1 。
HTTP 請求響應常見狀態(tài)碼100~199:表示成功接收請求,要求客戶端繼續(xù)提交下一次請求才能完成整個處理過程。200~299:表示成功接收請求并已完成整個處理過程。常用200300~399:為完成請求,客戶需進一步細化請求。例如:請求的資源已經(jīng)移動一個新地址、常用302(意味著你請求我,我讓你去找別人),307和304(我不給你這個資源,自己拿緩存)400~499:客戶端的請求有錯誤,常用404(意味著你請求的資源在web服務器中沒有)403(服務器拒絕訪問,權(quán)限不夠)500~599:服務器端出現(xiàn)錯誤,常用500    

   


作者:黑馬程序員javaEE培訓學院
首發(fā):http://java.itheima.com/


分享到:
在線咨詢 我要報名
和我們在線交談!