HTTP 三次握手 建立连接 和 四次握手断开连接
生活随笔
收集整理的這篇文章主要介紹了
HTTP 三次握手 建立连接 和 四次握手断开连接
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
三次握手建立連接? 第一次握手:主機(jī)A發(fā)送位碼為syn=1,隨機(jī)產(chǎn)生seq number=1234567的數(shù)據(jù)包到服務(wù)器,主機(jī)B由SYN=1知道,A要求建立聯(lián)機(jī); 第二次握手:主機(jī)B收到請(qǐng)求后要確認(rèn)聯(lián)機(jī)信息,向A發(fā)送ack number=(主機(jī)A的seq+1),syn=1,ack=1,隨機(jī)產(chǎn)生seq=7654321的包 第三次握手:主機(jī)A收到后檢查ack number是否正確,即第一次發(fā)送的seq number+1,以及位碼ack是否為1,若正確,主機(jī)A會(huì)再發(fā)送ack number=(主機(jī)B的seq+1),ack=1,主機(jī)B收到后確認(rèn)seq值與ack=1則連接建立成功。 四次握手?jǐn)嚅_(kāi): 由于?TCP?連接是全雙工的,因此每個(gè)方向都必須單獨(dú)進(jìn)行關(guān)閉。這個(gè)原則是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè)FIN?來(lái)終止這個(gè)方向的發(fā)送通道。收到一個(gè)?FIN?只意味著這一方向上沒(méi)有數(shù)據(jù)流動(dòng),一個(gè)?TCP?連接在收到一個(gè)?FIN?后仍能發(fā)送數(shù)據(jù)。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動(dòng)關(guān)閉,而另一方執(zhí)行被動(dòng)關(guān)閉。??
(?1?)客戶端?A?發(fā)送一個(gè)?FIN?,用來(lái)關(guān)閉客戶?A?到服務(wù)器?B?的數(shù)據(jù)傳送(報(bào)文段?4?)。??
(?2?)服務(wù)器?B?收到這個(gè)?FIN?,它發(fā)回一個(gè)?ACK?,確認(rèn)序號(hào)為收到的序號(hào)加?1?(報(bào)文段?5?)。和?SYN?一樣,一個(gè)FIN?將占用一個(gè)序號(hào)。??
(?3?)服務(wù)器?B?關(guān)閉與客戶端?A?的連接,發(fā)送一個(gè)?FIN?給客戶端?A?(報(bào)文段?6?)。?? (?4?)客戶端?A?發(fā)回?ACK?報(bào)文確認(rèn),并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加?1?(報(bào)文段?7?)。 問(wèn)題1: 為什么建立連接協(xié)議是三次握手,而關(guān)閉連接卻是四次握手呢??? 這是因?yàn)榉?wù)端的?LISTEN?狀態(tài)下的?SOCKET?當(dāng)收 到?SYN?報(bào)文的建立連接請(qǐng)求后,它可以把?ACK?和?SYN?(?ACK?起應(yīng)答作用,而?SYN?起同步作用)放在一個(gè)報(bào)文里來(lái)發(fā)送。但關(guān)閉連接時(shí), 當(dāng)收到對(duì)方的?FIN?報(bào)文通知時(shí),它僅僅表示對(duì)方?jīng)]有數(shù)據(jù)發(fā)送給你了;但未必你所有的數(shù)據(jù)都全部發(fā)送給對(duì)方了,所以你可以未必會(huì)馬上會(huì)關(guān)閉?SOCKET,?也即你可能還需要發(fā)送一些數(shù)據(jù)給對(duì)方之后,再發(fā)送?FIN?報(bào)文給對(duì)方來(lái)表示你同意現(xiàn)在可以關(guān)閉連接了,所以它這里的?ACK?報(bào)文 和?FIN報(bào)文多數(shù)情況下都是分開(kāi)發(fā)送的。 HTTP 請(qǐng)求響應(yīng)常見(jiàn)狀態(tài)碼 100~199:表示成功接收請(qǐng)求,要求客戶端繼續(xù)提交下一次請(qǐng)求才能完成整個(gè)處理過(guò)程。
?200~299:表示成功接收請(qǐng)求并已完成整個(gè)處理過(guò)程。常用200
?300~399:為完成請(qǐng)求,客戶需進(jìn)一步細(xì)化請(qǐng)求。例如:請(qǐng)求的資源已經(jīng)移動(dòng)一個(gè)新地址、常用302(意味著你請(qǐng)求我,我讓你去找別人),307和304(我不給你這個(gè)資源,自己拿緩存)
?400~499:客戶端的請(qǐng)求有錯(cuò)誤,常用404(意味著你請(qǐng)求的資源在web服務(wù)器中沒(méi)有)403(服務(wù)器拒絕訪問(wèn),權(quán)限不夠) 500~599:服務(wù)器端出現(xiàn)錯(cuò)誤,常用500
(?1?)客戶端?A?發(fā)送一個(gè)?FIN?,用來(lái)關(guān)閉客戶?A?到服務(wù)器?B?的數(shù)據(jù)傳送(報(bào)文段?4?)。??
(?2?)服務(wù)器?B?收到這個(gè)?FIN?,它發(fā)回一個(gè)?ACK?,確認(rèn)序號(hào)為收到的序號(hào)加?1?(報(bào)文段?5?)。和?SYN?一樣,一個(gè)FIN?將占用一個(gè)序號(hào)。??
(?3?)服務(wù)器?B?關(guān)閉與客戶端?A?的連接,發(fā)送一個(gè)?FIN?給客戶端?A?(報(bào)文段?6?)。?? (?4?)客戶端?A?發(fā)回?ACK?報(bào)文確認(rèn),并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加?1?(報(bào)文段?7?)。 問(wèn)題1: 為什么建立連接協(xié)議是三次握手,而關(guān)閉連接卻是四次握手呢??? 這是因?yàn)榉?wù)端的?LISTEN?狀態(tài)下的?SOCKET?當(dāng)收 到?SYN?報(bào)文的建立連接請(qǐng)求后,它可以把?ACK?和?SYN?(?ACK?起應(yīng)答作用,而?SYN?起同步作用)放在一個(gè)報(bào)文里來(lái)發(fā)送。但關(guān)閉連接時(shí), 當(dāng)收到對(duì)方的?FIN?報(bào)文通知時(shí),它僅僅表示對(duì)方?jīng)]有數(shù)據(jù)發(fā)送給你了;但未必你所有的數(shù)據(jù)都全部發(fā)送給對(duì)方了,所以你可以未必會(huì)馬上會(huì)關(guān)閉?SOCKET,?也即你可能還需要發(fā)送一些數(shù)據(jù)給對(duì)方之后,再發(fā)送?FIN?報(bào)文給對(duì)方來(lái)表示你同意現(xiàn)在可以關(guān)閉連接了,所以它這里的?ACK?報(bào)文 和?FIN報(bào)文多數(shù)情況下都是分開(kāi)發(fā)送的。 HTTP 請(qǐng)求響應(yīng)常見(jiàn)狀態(tài)碼 100~199:表示成功接收請(qǐng)求,要求客戶端繼續(xù)提交下一次請(qǐng)求才能完成整個(gè)處理過(guò)程。
?200~299:表示成功接收請(qǐng)求并已完成整個(gè)處理過(guò)程。常用200
?300~399:為完成請(qǐng)求,客戶需進(jìn)一步細(xì)化請(qǐng)求。例如:請(qǐng)求的資源已經(jīng)移動(dòng)一個(gè)新地址、常用302(意味著你請(qǐng)求我,我讓你去找別人),307和304(我不給你這個(gè)資源,自己拿緩存)
?400~499:客戶端的請(qǐng)求有錯(cuò)誤,常用404(意味著你請(qǐng)求的資源在web服務(wù)器中沒(méi)有)403(服務(wù)器拒絕訪問(wèn),權(quán)限不夠) 500~599:服務(wù)器端出現(xiàn)錯(cuò)誤,常用500
轉(zhuǎn)載于:https://www.cnblogs.com/ljlkfx/p/4825499.html
總結(jié)
以上是生活随笔為你收集整理的HTTP 三次握手 建立连接 和 四次握手断开连接的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 从刷票了解如何获得客户端IP
- 下一篇: 河北省分布式光伏发电项目管理暂行办法对光