如何搭建一個屬于自己的網(wǎng)站陜西seo主管
? http協(xié)議訪問web
? ? ? ? 你知道在我們的網(wǎng)頁瀏覽器的地址當(dāng)中輸入url,未必是如何呈現(xiàn)的嗎?
? ? ? ? web瀏覽器根據(jù)地址欄中指定的url,從web服務(wù)器獲取文件資源(resource)等信息,從而顯示出web頁面。web使用HTTP(超文本傳輸協(xié)議)的協(xié)議作為規(guī)范,完成從客戶端從服務(wù)器端等一系列的運作流程。了解HTTP,我們有必要事先了解一下TCP/IP傳輸。
? ? ? ? 發(fā)送端在層與層之間傳輸數(shù)據(jù)時,每層就會被打上一個該層所屬的首部信息,反之,接收端在層與層傳輸數(shù)據(jù)時,每經(jīng)過一層就會把對應(yīng)的首部消去。這種吧數(shù)據(jù)包裝起來的做法稱為封裝。
TCP報文的首部格式
? ? ? ? 在介紹TCP連接之前先介紹下TCP的報文,TCP報文是面向字節(jié)流的,分為首部和數(shù)據(jù)兩部分,TCP首部如下所示,固定20字節(jié):
- 源端口和目標(biāo)端口:各占2字節(jié)
- 序號seq:標(biāo)記報文段的順序,值代表該報文段所攜帶的數(shù)據(jù)的第一個字節(jié)的編號
- 確認(rèn)號ack:占4個字節(jié),表示期望收到對方下一個保溫段的第一個字節(jié)的序號
- 確認(rèn)標(biāo)志位ACK:ACK=1時,ack才有效
- 同步標(biāo)志位SYN:建立TCP連接時用的同步序號。當(dāng)SYN = 1時,ACK = 0時表示:這是一個連接請求報文段。若同意連接,則相應(yīng)報文中使得SYN = 1,ACK = 1。SYN這個表示位只有在TCP連接時才會被置為1,握手完成后SYN標(biāo)志位置為0。
- 終止標(biāo)志位FIN:表示要釋放一個連接。FIN = 1表示報文的發(fā)送方的數(shù)據(jù)已經(jīng)發(fā)送完畢,要求釋放連接。與SYN的作用剛好相反。
?
tips:ACK、SYN、FIN這些大寫的單詞都表示標(biāo)志位,要么置為1,要么置為0;而ack、seq小寫單詞表示序號。
三次握手
? ? ? ? HTTP屬于應(yīng)用層、TCP屬于傳輸層、IP屬于網(wǎng)絡(luò)層。客戶端和服務(wù)器端都需要知道各自可收發(fā),因此需要三次握手。如下圖所示:
- 第一次握手:服務(wù)器器知道客戶端具有發(fā)送能力(SYN=1)
- 第二次握手:客戶端知道服務(wù)器具有接受和發(fā)送的能力,但是服務(wù)器不知道客戶端是否具有接受能力,所以需要第三次握手(ACK=1,SYN=1)
- 第三次握手:服務(wù)器端知道客戶端具有接受能力了,之后開始通信(ACK=1)
三次握手過程可以攜帶數(shù)據(jù)嗎
- 第一次、第二次還不能攜帶數(shù)據(jù),因為還沒有建立連接,會讓服務(wù)器容易受到攻擊
- 第三次握手時候客戶端已經(jīng)處于已建立連接的狀態(tài),并且已經(jīng)知道服務(wù)器端的收發(fā)能力所以可以攜帶數(shù)據(jù)。
四次揮手
- ?客戶端要求斷開連接,發(fā)送FIN:斷開連接請求
- 服務(wù)器端接受到請求,返回給客戶端ACK,作為FIN響應(yīng)
- 這個時候服務(wù)器不能立馬傳遞給服務(wù)器FIN,服務(wù)器需要確認(rèn)之前發(fā)送的消息都已經(jīng)處理完畢得到ACK之后再斷開。因此斷開連接不能像握手一樣兩跳信息合并。所以服務(wù)器需要經(jīng)過一個等待,確定可以關(guān)閉連接了之后再發(fā)送一條FIN給客戶端
- 客戶端收到服務(wù)器的FIN,同時客戶端也可能有自己的事情處理完,比如客戶端沒有接收到服務(wù)器端的ACK請求,客戶端處理完成后再給服務(wù)器端發(fā)送ACK
為什么需要四次揮手
? ? ? ? 只有服務(wù)器端的服務(wù)器發(fā)完之后才會給客戶端發(fā)送FIN斷開請求,告訴客戶端可以斷開連接了,所以需要四次揮手。
- 收到FIN僅僅代表客戶端沒有數(shù)據(jù)發(fā)送給客戶端了,但是客戶端可能還有未處理完畢的信息
- ACK分開發(fā)送的,所以需要等待一段時間處理完畢信息,再斷開連接,發(fā)送FIN給客戶端告知客戶端可以斷開連接,客戶端收到ACK之后才會斷開
參考
圖解http
前端進(jìn)階之旅
TCP的三次握手與四次揮手_關(guān)于tcp三次握手正確的是fin是終止_crazy的藍(lán)色夢想的博客-CSDN博客