HTTP三次握手和四次揮手

每當創建一個TCP/IP鏈接的時候都要經歷3次握手,這是爲了保證創建一個可靠的鏈接。

三次握手web

客戶端向服務器發請求,服務器接收請求,服務器接收請求以後發送一個鏈接標誌,客戶端接收鏈接標誌以後也向服務器發送一個鏈接標誌,至此鏈接完成。

生活中的栗子: 小明和小麗的故事。話說有一天小麗給小明說我喜歡你(syn,一次握手) 小明聽到小麗的的表白後說知道了,我也喜歡你,也說了聲(ack, syn, 二次握手) ,小麗聽到小名說喜歡本身之後,說我知道了 (ack, 三次握手)緩存

  • 第一次握手:主機A發送位碼爲syn=1,隨機產生seq number=1234567的數據包到服務器,主機B由SYN=1知道,A要求創建聯機;
  • 第二次握手:主機B收到請求後要確認聯機信息,向A發送ack number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=7654321的包
  • 第三次握手:主機A收到後檢查ack number是否正確,即第一次發送的seq number+1,以及位碼ack是否爲1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後確認seq值與ack=1則鏈接創建成功。

四次揮手服務器

爲何有4次揮手呢,4次揮手的做用就是斷開鏈接,之因此要斷開鏈接是由於TCP/IP協議是要佔用端口的,而計算機的端口是有限的,因此一次傳輸完成以後是要斷開鏈接的,斷開鏈接的方式就是4次揮手。

仍是小明和小麗的故事:話說小名和小麗在一塊兒後小明發現本身零花錢不夠花了,也沒有時間玩遊戲了,而後就給小麗說咱們分手把(FIN, 第一次揮手),這個時候小麗可能很難過說知道了(ack, 第二次揮手),,好久好久都沒有說話,過了好久小麗說我贊成分手了(FIN, 第三次揮手),這個時候小明說,管你了,我早就和你分手了(ack,第四次揮手)遊戲

因爲 TCP 鏈接是全雙工的,所以每一個方向都必須單獨進行關閉。這個原則是當一方完成它的數據發送任務後就能發送一個FIN 來終止這個方向的發送通道。收到一個 FIN 只意味着這一方向上沒有數據流動,一個 TCP 鏈接在收到一個 FIN 後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另外一方執行被動關閉。資源

  • 客戶端 A 發送一個 FIN ,用來關閉客戶 A 到服務器 B 的數據傳送。
  • 服務器 B 收到這個 FIN ,它發回一個 ACK ,確認序號爲收到的序號加 1。和 SYN 同樣,一個FIN 將佔用一個序號。
  • 服務器 B 關閉與客戶端 A 的鏈接,發送一個 FIN 給客戶端 A 。
  • 客戶端 A 發回 ACK 報文確認,並將確認序號設置爲收到序號加 1 。

HTTP 請求響應常見狀態碼web服務器

  • 100~199:表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程。
  • 200~299:表示成功接收請求並已完成整個處理過程。經常使用200
  • 300~399:爲完成請求,客戶需進一步細化請求。例如:請求的資源已經移動一個新地址、經常使用302(意味着你請求我,我讓你去找別人),307和304(我不給你這個資源,本身拿緩存)
  • 400~499:客戶端的請求有錯誤,經常使用404(意味着你請求的資源在web服務器中沒有)403(服務器拒絕訪問,權限不夠)
  • 500~599:服務器端出現錯誤,經常使用500
相關文章
相關標籤/搜索