1. 程式人生 > >http知識填坑

http知識填坑

經典 用戶 urg 響應 listen 第一次 ip地址 reset 經典的

當我們輸入網址回車或者刷新頁面時,瀏覽器和計算機做了什麽事呢?

首先就是域名解析,1.瀏覽器先搜索自身的DNS緩存

2.若瀏覽器沒有找到緩存或者緩存已經失效,那麽計算機搜索自身的DNS緩存

3.讀取本地的HOST文件

4.瀏覽器發起一個DNS的一個系統調用

寬帶運營商服務器查看本身緩存

運營商服務器發起一個叠代DNS解析的請求

運營商服務器把結果返回操作系統內核同時緩存起來

操作系統內核把結果返回瀏覽器

瀏覽器就拿到了www.xxxxxx.com的ip地址了

5.瀏覽器獲得域名對應的ip地址後,發起HTTP經典的“三次握手”

6.TCP/IP鏈接建立起來後,瀏覽器就可以向服務器發生HTTP請求了

7.服務器端接受到了這個請求,根據路徑參數,經過後端的一些處理之後,把處理後的結果數據返回給瀏覽器,比如頁面完整的html代碼返回給瀏覽器

8.瀏覽器拿到了完整的html代碼後,在解析和渲染這個頁面時,裏面js,css,圖片靜態資源,他們同樣也是一個個http請求,都要經過上面七個步驟

9.瀏覽器根據拿到的資源對頁面進行渲染,最終把一個完整的頁面呈現給用戶

而對於三次握手的解釋是這樣的:

TCP是主機對主機層的傳輸控制協議,提供可靠的連接服務,采用三次握手確認建立一個連接:

位碼即tcp標誌位,有6種標示:

SYN(synchronous建立聯機)

ACK(acknowledgement 確認)

PSH(push傳送)

FIN(finish結束)

RST(reset重置)

URG(urgent緊急)

Sequence number(順序號碼)

Acknowledge number(確認號碼)

客戶端TCP狀態遷移:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
服務器TCP狀態遷移:
CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED

各個狀態的意義如下:


LISTEN - 偵聽來自遠方TCP端口的連接請求;
SYN-SENT -在發送連接請求後等待匹配的連接請求;
SYN-RECEIVED - 在收到和發送一個連接請求後等待對連接請求的確認;
ESTABLISHED- 代表一個打開的連接,數據可以傳送給用戶;
FIN-WAIT-1 - 等待遠程TCP的連接中斷請求,或先前的連接中斷請求的確認;
FIN-WAIT-2 - 從遠程TCP等待連接中斷請求;
CLOSE-WAIT - 等待從本地用戶發來的連接中斷請求;
CLOSING -等待遠程TCP對連接中斷的確認;
LAST-ACK - 等待原來發向遠程TCP的連接中斷請求的確認;
TIME-WAIT -等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認;
CLOSED - 沒有任何連接狀態;

TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接,

(1)第一次握手:建立連接時,客戶端A發送SYN包(SYN=j)到服務器B,並進入SYN_SEND狀態,等待服務器B確認。

(2)第二次握手:服務器B收到SYN包,必須確認客戶A的SYN(ACK=j+1),同時自己也發送一個SYN包(SYN=k),即SYN+ACK包,此時服務器B進入SYN_RECV狀態。

(3)第三次握手:客戶端A收到服務器B的SYN+ACK包,向服務器B發送確認包ACK(ACK=k+1),此包發送完畢,客戶端A和服務器B進入ESTABLISHED狀態,完成三次握手。

完成三次握手,客戶端與服務器開始傳送數據。

http協議可以粗暴的分為請求和響應,請求和響應都會發送http頭和正文信息。http頭發送的是一些附加的信息:內容類型,服務器發送響應的日期,http狀態碼。正文的話就是表單的數據和返回的數據

http知識填坑