HTTP協議和TCP的三次握手和四次揮手

HTTP協議和TCP的三次握手和四次揮手

HTTP協議

概念

HTTP:Hyper Text Transform Protocol,超文本傳輸協議,是應用層協議,是用於瀏覽器從WWW服務器(萬維網)傳輸超文本到本地瀏覽器的傳送協議,HTTP是基於TCP/IP通信協議進行數據傳輸的
默認端口號爲80,當我們輸入url訪問頁面時,如果沒有添加端口號,瀏覽器會添加默認端口號80
HTTP協議是無狀態、無連接的

三次握手

在這裏插入圖片描述

第一次握手:客戶端發送請求同步數據包,攜帶syn=1同步標識,及隨機生成的序列號sequence number,客戶端進入SYN_SEND狀態

第二次握手:服務端接收到客戶端的請求包後,對數據包確認,發送確認包,包括請求標識syn=1,確認標識ACK=1,將確認號ack設置爲客戶端發送的請求包裏的sequence number+1,及自己隨機生成序列號sequence number一起發送給客戶端。此時服務端進入SYN_RCVD狀態

第三次握手:客戶端收到服務端的確認包後,還要向服務端返回一個確認包,將ack置爲服務端發送的sequence number+1,及確認標識ACK=1。雙方都進入ESTABLISHED狀態

當第二次握手後,客戶端和服務端都處於可連接狀態,爲什麼還要進行第三次握手呢?
這是爲了防止已經失效的連接請求傳送到服務端,因而產生錯誤,例如會導致服務端以爲客戶端建立了連接,並一直等待客戶端的請求,實際客戶端已經關閉,而導致浪費服務端的資源

四次揮手

在這裏插入圖片描述

第一次揮手:主動方會向被動方發送一個FIN報文給被動方,並攜帶一個隨機序列號,一般會攜帶一個數據長度爲0的數據包。表示這邊要結束連接了,進入FIN_WAIT_1狀態

第二次揮手:被動方收到報文後,返回一個ACK確認包,表示同意關閉,被動方進入CLOSE_WAIT狀態,主動方進入FIN_WAIT_2狀態

第三次揮手:這個階段被動方可能還會有數據沒有發送完,所以等被動方將數據發送完成,就會發送一個FIN包給主動方,表示沒有數據可發送,可以關閉了

第四次揮手:主動方向被動方發送ACK確認包,後進入TIME_WAIT狀態,被動方收到卻動包後就關閉連接,主動方等待一段時間後沒有收到被動方的回覆,也就關閉連接了

爲什麼要4次揮手,第三次揮手的作用?
爲了保證數據完整傳輸,當主動方沒有數據發送要關閉連接時,被動方可能數據還沒發送完,所以被動方先發送ACK表示同意關閉,然後等數據發送完畢,再發送FIN包表示沒有數據發送了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章