用戶訪問網(wǎng)站的具體流程

在瀏覽器輸入想要訪問的域名之后,瀏覽器會進行域名解析獲得IP地址,在經(jīng)過TCP的連接,實現(xiàn)數(shù)據(jù)的傳輸就會有兩種報文,及請求報文和響應(yīng)報文。最終才能實現(xiàn)通信。因此想要實現(xiàn)通信,就得先弄懂DNS的解析原理以及TCP連接通道的流程。

理論內(nèi)容:

1、DNS的介紹以及原理

2、TCP/IP協(xié)議的介紹和三次握手及四次揮手

3、HTTP協(xié)議的介紹及請求與響應(yīng)報文

4、用戶訪問瀏覽器的完整過程

1、DNS的介紹及解析原理

1)說說DNS是什么:

DNS(Domain Name System,域名系統(tǒng)),因特網(wǎng)上作為域名和IP地址相互映射的一個分布式數(shù)據(jù)庫,能夠使用戶更方便的訪問互聯(lián)網(wǎng),而不用去+·記住能夠被機器直接讀取的IP數(shù)串。通過主機名,最終得到該主機名對應(yīng)的IP地址的過程叫做域名解析(或主機名解析)。DNS協(xié)議運行在UDP協(xié)議之上,使用端口號53。訪問網(wǎng)站的實質(zhì)就是解析其域名得到IP地址,再轉(zhuǎn)向其網(wǎng)站。

2)DNS的解析原理:

原理步驟:

1)系統(tǒng)首先會查找本地的DNS緩存和hosts文件信息,確認其中是否有與,域名www.baidu.com所對應(yīng)的IP地址。如果有,就直接訪問這個IP地址所對應(yīng)的www.baidu.com域名服務(wù)器。

2)如果沒有找到,那么,系統(tǒng)將會把瀏覽器的解析請求發(fā)送給本地主機所指定的DNS服務(wù)器,稱為LDNS。如果LDNS服務(wù)器中有域名www.baidu.com所對應(yīng)的IP地址,則返回給客戶端的瀏覽器,如果沒有,則繼續(xù)請求其他DNS服務(wù)器。

3)LDNS服務(wù)器會從DNS系統(tǒng)的根(.)開始請求對域名www.baidu.com的解析。根DNS服務(wù)器全球只有13臺,根域名服務(wù)器是沒有域名www.baidu.com解析記錄的。但是它會有域名www.baidu.com所對應(yīng)的頂級域.com的解析記錄,因此直接把頂級域.com所對應(yīng)的DNS地址返回給LDNS服務(wù)器。

4)LDNS服務(wù)器獲取到頂級域.com對應(yīng)的DNS服務(wù)器地址后,就會去.com服務(wù)器請求對www.baidu.com域名的解析。在頂級域名服務(wù)器也不會有www.baidu.com的解析記錄的。但是它有www.baidu.com的父級域名的解析記錄,即baidu.com。因此頂級域名.com服務(wù)器又會把baidu.com所對應(yīng)的DNS服務(wù)器的IP地址返回給LDNS。

5)LDNS服務(wù)器收到baidu.com所對應(yīng)的IP地址后,就會去baidu.com域名服務(wù)器請求對www.baidu.com的域名解析。Baidu.com域名對應(yīng)的DNS服務(wù)器是該域名的授權(quán)DNS服務(wù)器。這個DNS服務(wù)器就是企業(yè)購買域名時用于管理解析的服務(wù)器。

6)baidu.com域名DNS服務(wù)器會吧www.baidu.com域名所對應(yīng)的IP地址給解析出來,然后發(fā)給LDNS。

7)LDNS把解析出來的結(jié)果,www.baudu.com所對應(yīng)的IP地址發(fā)送給客戶端的瀏覽器。并且LDNS也會將其域名和對應(yīng)的地址緩存到cache中。

8)客戶端瀏覽器收到后,也會將其域名以及對應(yīng)的IP地址緩存的到DNS緩存和hosts文件中。

2、TCP/IP協(xié)議的介紹和三次握手及四次揮手

1)說說TCP/IP協(xié)議是什么

Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又名網(wǎng)絡(luò)通訊協(xié)議,是Internet最基本的協(xié)議、Internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。TCP/IP 定義了電子設(shè)備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉藴?。協(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的協(xié)議來完成自己的需求。通俗而言:TCP負責發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號,要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?。而IP是給因特網(wǎng)的每一臺聯(lián)網(wǎng)設(shè)備規(guī)定一個地址。

2)各個狀態(tài)的意義如下:
(1)LISTEN - 偵聽來自遠方TCP端口的連接請求;
(2)SYN-SENT -在發(fā)送連接請求后等待匹配的連接請求;
(3)SYN-RECEIVED - 在收到和發(fā)送一個連接請求后等待對連接請求的確認;
(4)ESTABLISHED- 代表一個打開的連接,數(shù)據(jù)可以傳送給用戶;
(5)FIN-WAIT-1 - 等待遠程TCP的連接中斷請求,或先前的連接中斷請求的確認;
(6)FIN-WAIT-2 - 從遠程TCP等待連接中斷請求;
(7)CLOSE-WAIT - 等待從本地用戶發(fā)來的連接中斷請求;
(8)CLOSING -等待遠程TCP對連接中斷的確認;
(9)LAST-ACK - 等待原來發(fā)向遠程TCP的連接中斷請求的確認;
(10)TIME-WAIT - 等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認;
(11)CLOSED - 沒有任何連接狀態(tài);

3)TCP三次握手

所謂三次握手(Three-way Handshake),是指建立一個TCP連接時,需要客戶端和服務(wù)器總共發(fā)送3個包。

三次握手的目的是連接服務(wù)器指定端口,建立TCP連接,并同步連接雙方的序列號和確認號并交換 TCP 窗口大小信息.在socket編程中,客戶端執(zhí)行connect()時。將觸發(fā)三次握手。

image

三次握手過程:

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

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

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

4)TCP 四次揮手
TCP的連接的拆除需要發(fā)送四個包,因此稱為四次揮手(four-way handshake)??蛻舳嘶蚍?wù)器均可主動發(fā)起揮手動作,在socket編程中,任何一方執(zhí)行close()操作即可產(chǎn)生揮手操作。

image

四次揮手過程:

1)第一次揮手:客戶端A發(fā)送一個FIN,用來關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送。

2)第二次揮手:服務(wù)器B收到這個FIN,它發(fā)回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。

3)第三次揮手:服務(wù)器B關(guān)閉與客戶端A的連接,發(fā)送一個FIN給客戶端A。

4)第四次揮手:客戶端A發(fā)回ACK報文確認,并將確認序號設(shè)置為收到序號加1。

3、HTTP協(xié)議的介紹及請求與響應(yīng)報文

1)HTTP報文

HTTP報文中有很多行內(nèi)人,這些行的字段都是由一些ASCII碼串組成,但各個字段的長度是不同的。HTTP報文可以分為兩種,一種是從web客戶端發(fā)往web服務(wù)端的HTTP報文,稱為請求保衛(wèi),另一種是從web服務(wù)端發(fā)往客戶端的報文,稱為響應(yīng)報文。兩種報文的格式的基本相同。

(1)請求報文介紹

image

(2)請求報文的內(nèi)容與格式有如下:

1)請求行

作用:用來說明客戶端想要做什么。

內(nèi)容:包括方法字段GET和URL字段以及HTTP協(xié)議版本

2)請求頭

作用:通過客戶端把請求的相關(guān)信息發(fā)給服務(wù)器

內(nèi)容:包括媒體類型、語言類型、支持壓縮、客戶端類型、主機等信息。

3)空行

作用:告訴服務(wù)器空行以下內(nèi)容不屬于請求頭部信息。

4)請求報文主體

作用:用來說明客戶端具體想要做的事情。

內(nèi)容:查看信息、應(yīng)用post方法。

(3)響應(yīng)報文介紹

image

(4)請求報文的內(nèi)容與格式有如下:

1)狀態(tài)行

作用:用來說明服務(wù)端響應(yīng)客戶端的狀態(tài)。

內(nèi)容:包括洗衣及版本號、數(shù)字狀態(tài)碼、狀態(tài)情況

2)響應(yīng)頭

作用:通過服務(wù)端把響應(yīng)的相關(guān)信息給客戶端

內(nèi)容:包括Location、server、connect、vary等

3)空行

作用:告訴客戶端空行以下內(nèi)容不屬于響應(yīng)頭部信息。

4)響應(yīng)報文主體

作用:用來裝載著要返回給客戶端的數(shù)據(jù)

內(nèi)容:包括文本、html、視頻或者是圖片。

(5)GET與POST的認識

GET:當客戶端要從服務(wù)器中讀取某個資源時,使用GET 方法。GET 方法要求服務(wù)器將URL 定位的資源放在響應(yīng)報文的數(shù)據(jù)部分,回送給客戶端,即向服務(wù)器請求某個資源。使用GET 方法時,請求參數(shù)和對應(yīng)的值附加在 URL 后面,利用一個問號(“?”)代表URL 的結(jié)尾與請求參數(shù)的開始,傳遞參數(shù)長度受限制。例如,/index.jsp?id=100&op=bind、

POST:當客戶端給服務(wù)器提供信息較多時可以使用POST 方法,POST 方法向服務(wù)器提交數(shù)據(jù),比如完成表單數(shù)據(jù)的提交,將數(shù)據(jù)提交給服務(wù)器處理。GET 一般用于獲取/查詢資源信息,POST 會附帶用戶數(shù)據(jù),一般用于更新資源信息。POST 方法將請求參數(shù)封裝在HTTP 請求數(shù)據(jù)中,以名稱/值的形式出現(xiàn),可以傳輸大量數(shù)據(jù);

4、用戶訪問瀏覽器的完整過程

1、客戶端在瀏覽器中輸入要訪問的域名地址,如:www.baidu.com

2、瀏覽器請求解析DNS服務(wù)器,把域名www.baidu.com轉(zhuǎn)換成web服務(wù)器的IP地址。

1)系統(tǒng)首先會查找本地的DNS緩存和hosts文件信息,確認其中是否有與,域名www.baidu.com所對應(yīng)的IP地址。如果有,就直接訪問這個IP地址所對應(yīng)的www.baidu.com域名服務(wù)器。

2)如果沒有找到,那么,系統(tǒng)將會把瀏覽器的解析請求發(fā)送給本地主機所指定的DNS服務(wù)器,稱為LDNS。如果LDNS服務(wù)器中有域名www.baidu.com所對應(yīng)的IP地址,則返回給客戶端的瀏覽器,如果沒有,則繼續(xù)請求其他DNS服務(wù)器。

3)LDNS服務(wù)器會從DNS系統(tǒng)的根(.)開始請求對域名www.baidu.com的解析。根DNS服務(wù)器全球只有13臺,根域名服務(wù)器是沒有域名www.baidu.com解析記錄的。但是它會有域名www.baidu.com所對應(yīng)的頂級域.com的解析記錄,因此直接把頂級域.com所對應(yīng)的DNS地址返回給LDNS服務(wù)器。

4)LDNS服務(wù)器獲取到頂級域.com對應(yīng)的DNS服務(wù)器地址后,就會去.com服務(wù)器請求對www.baidu.com域名的解析。在頂級域名服務(wù)器也不會有www.baidu.com的解析記錄的。但是它有www.baidu.com的父級域名,即baidu.com。因此頂級域名.com服務(wù)器又會把baidu.com所對應(yīng)的DNS服務(wù)器的IP地址返回給LDNS。

5)LDNS服務(wù)器收到baidu.com所對應(yīng)的IP地址后,就會去baidu.com域名服務(wù)器請求對www.baidu.com的域名解析。Baidu.com域名對應(yīng)的DNS服務(wù)器是該域名的授權(quán)DNS服務(wù)器。這個DNS服務(wù)器就是企業(yè)購買域名時用于管理解析的服務(wù)器。

6)baidu.com域名DNS服務(wù)器會吧www.baidu.com域名所對應(yīng)的IP地址給解析出來,然后發(fā)給LDNS。

7)LDNS把解析出來的結(jié)果,www.baudu.com所對應(yīng)的IP地址發(fā)送給客戶端的瀏覽器。并且LDNS也會將其域名和對應(yīng)的地址緩存到cache中。

8)客戶端瀏覽器收到后,也會將其域名以及對應(yīng)的IP地址緩存的到DNS緩存和hosts文件中。

3、瀏覽器從訪問的IP地址(URL)解析出默認的斷后號:80

4、瀏覽器通過解析后得到的IP地址和端口號進行web服務(wù)器建立一條TCP連接通道。

1)第一次握手:

建立連接時,客戶端A發(fā)送SYN包(SYN=j)到服務(wù)器B,并進入SYN_SEND狀態(tài),等待服務(wù)器B確認。

2)第二次握手:

服務(wù)器B收到SYN包,必須確認客戶A的SYN(ACK=j+1),同時自己也發(fā)送一個SYN包(SYN=k),即SYN+ACK包,此時服務(wù)器B進入SYN_RECV狀態(tài)。

3)第三次握手:

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

5、建立TCP連接之后,瀏覽器向web服務(wù)器發(fā)送一條HTTP請求報文。

1)請求行

作用:用來說明客戶端想要做什么。

內(nèi)容:包括方法字段GET和URL字段以及HTTP協(xié)議版本

2)請求頭

作用:通過客戶端把請求的相關(guān)信息發(fā)給服務(wù)器

內(nèi)容:包括媒體類型、語言類型、支持壓縮、客戶端類型、主機等信息。

3)空行

作用:告訴服務(wù)器空行以下內(nèi)容不屬于請求頭部信息。

4)請求報文主體

作用:用來說明客戶端具體想要做的事情。

內(nèi)容:查看信息、應(yīng)用post方法。

6、web服務(wù)器響應(yīng)并讀取瀏覽器的請求信息,然后返回一條HTTP響應(yīng)報文。

1)狀態(tài)行

作用:用來說明服務(wù)端響應(yīng)客戶端的狀態(tài)。

內(nèi)容:包括洗衣及版本號、數(shù)字狀態(tài)碼、狀態(tài)情況

2)響應(yīng)頭

作用:通過服務(wù)端把響應(yīng)的相關(guān)信息給客戶端

內(nèi)容:包括Location、server、connect、vary等

3)空行

作用:告訴客戶端空行以下內(nèi)容不屬于響應(yīng)頭部信息。

4)響應(yīng)報文主體

作用:用來裝載著要返回給客戶端的數(shù)據(jù)

內(nèi)容:包括文本、html、視頻或者是圖片。

7、web服務(wù)器關(guān)閉HTTP連接,關(guān)閉TCP連接,web服務(wù)器顯示訪問的網(wǎng)站內(nèi)容到屏幕上。

1)第一次揮手:

客戶端A發(fā)送一個FIN,用來關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送。

2)第二次揮手:

服務(wù)器B收到這個FIN,它發(fā)回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。

3)第三次揮手:

服務(wù)器B關(guān)閉與客戶端A的連接,發(fā)送一個FIN給客戶端A。

4)第四次揮手:

客戶端A發(fā)回ACK報文確認,并將確認序號設(shè)置為收到序號加1。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容