1. 程式人生 > 其它 >使用者訪問網站的完整流程

使用者訪問網站的完整流程

使用者訪問網站的完整流程

在瀏覽器輸入想要訪問的域名之後,瀏覽器會進行域名解析獲得IP地址,在經過TCP的連線,實現資料的傳輸就會有兩種報文,及請求報文和響應報文。最終才能實現通訊。因此想要實現通訊,就得先弄懂DNS的解析原理以及TCP連線通道的流程。

 

理論內容:

1、DNS的介紹以及原理

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

3、HTTP協議的介紹及請求與響應報文

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

 

1、DNS的介紹及解析原理

1)說說DNS是什麼:

DNS(Domain Name System,域名系統),因特網上作為域名和IP地址相互對映的一個分散式資料庫,能夠使使用者更方便的訪問網際網路,而不用去+·記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協議執行在UDP協議之上,使用埠號53。訪問網站的實質就是解析其域名得到IP地址,再轉向其網站。

 

2)DNS的解析原理:

 

原理步驟:

1)系統首先會查詢本地的DNS快取和hosts檔案資訊,確認其中是否有與,域名www.baidu.com所對應的IP地址。如果有,就直接訪問這個IP地址所對應的www.baidu.com域名伺服器。

2)如果沒有找到,那麼,系統將會把瀏覽器的解析請求傳送給本地主機所指定的DNS伺服器,稱為LDNS。如果LDNS伺服器中有域名www.baidu.com所對應的IP地址,則返回給客戶端的瀏覽器,如果沒有,則繼續請求其他DNS伺服器。

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

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

5)LDNS伺服器收到baidu.com所對應的IP地址後,就會去baidu.com域名伺服器請求對www.baidu.com的域名解析。Baidu.com域名對應的DNS伺服器是該域名的授權DNS伺服器。這個DNS伺服器就是企業購買域名時用於管理解析的伺服器。

6)baidu.com域名DNS伺服器會吧www.baidu.com域名所對應的IP地址給解析出來,然後發給LDNS。

7)LDNS把解析出來的結果,www.baudu.com所對應的IP地址傳送給客戶端的瀏覽器。並且LDNS也會將其域名和對應的地址快取到cache中。

8)客戶端瀏覽器收到後,也會將其域名以及對應的IP地址快取的到DNS快取和hosts檔案中。

 

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

1)說說TCP/IP協議是什麼

Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協議/因特網互聯協議,又名網路通訊協議,是Internet最基本的協議、Internet國際網際網路絡的基礎,由網路層的IP協議和傳輸層的TCP協議組成。TCP/IP 定義了電子裝置如何連入因特網,以及資料如何在它們之間傳輸的標準。協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求。通俗而言:TCP負責發現傳輸的問題,一有問題就發出訊號,要求重新傳輸,直到所有資料安全正確地傳輸到目的地。而IP是給因特網的每一臺聯網裝置規定一個地址。

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

3)TCP三次握手

所謂三次握手(Three-way Handshake),是指建立一個TCP連線時,需要客戶端和伺服器總共傳送3個包。

三次握手的目的是連線伺服器指定埠,建立TCP連線,並同步連線雙方的序列號和確認號並交換 TCP 視窗大小資訊.在socket程式設計中,客戶端執行connect()時。將觸發三次握手。

 

三次握手過程:

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狀態,完成三次握手。

4)TCP 四次揮手
TCP的連線的拆除需要傳送四個包,因此稱為四次揮手(four-way handshake)。客戶端或伺服器均可主動發起揮手動作,在socket程式設計中,任何一方執行close()操作即可產生揮手操作。

 

 

四次揮手過程:

1)第一次揮手:客戶端A傳送一個FIN,用來關閉客戶A到伺服器B的資料傳送。 

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

3)第三次揮手:伺服器B關閉與客戶端A的連線,傳送一個FIN給客戶端A。 

4)第四次揮手:客戶端A發回ACK報文確認,並將確認序號設定為收到序號加1。

 

3、HTTP協議的介紹及請求與響應報文

1)HTTP報文

HTTP報文中有很多行內人,這些行的欄位都是由一些ASCII碼串組成,但各個欄位的長度是不同的。HTTP報文可以分為兩種,一種是從web客戶端發往web服務端的HTTP報文,稱為請求保衛,另一種是從web服務端發往客戶端的報文,稱為響應報文。兩種報文的格式的基本相同。

(1)請求報文介紹

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

1)請求行

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

內容:包括方法欄位GET和URL欄位以及HTTP協議版本

2)請求頭

作用:通過客戶端把請求的相關資訊發給伺服器

內容:包括媒體型別、語言型別、支援壓縮、客戶端型別、主機等資訊。

3)空行

作用:告訴伺服器空行以下內容不屬於請求頭部資訊。

4)請求報文主體

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

內容:檢視資訊、應用post方法。

(3)響應報文介紹

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

1)狀態行

作用:用來說明服務端響應客戶端的狀態。

內容:包括洗衣及版本號、數字狀態碼、狀態情況

2)響應頭

作用:通過服務端把響應的相關資訊給客戶端

內容:包括Location、server、connect、vary等

3)空行

作用:告訴客戶端空行以下內容不屬於響應頭部資訊。

4)響應報文主體

作用:用來裝載著要返回給客戶端的資料

內容:包括文字、html、視訊或者是圖片。

 

(5)GET與POST的認識

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

POST:當客戶端給伺服器提供資訊較多時可以使用POST 方法,POST 方法向伺服器提交資料,比如完成表單資料的提交,將資料提交給伺服器處理。GET 一般用於獲取/查詢資源資訊,POST 會附帶使用者資料,一般用於更新資源資訊。POST 方法將請求引數封裝在HTTP 請求資料中,以名稱/值的形式出現,可以傳輸大量資料;

 

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

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

2、瀏覽器請求解析DNS伺服器,把域名www.baidu.com轉換成web伺服器的IP地址。

1)系統首先會查詢本地的DNS快取和hosts檔案資訊,確認其中是否有與,域名www.baidu.com所對應的IP地址。如果有,就直接訪問這個IP地址所對應的www.baidu.com域名伺服器。

2)如果沒有找到,那麼,系統將會把瀏覽器的解析請求傳送給本地主機所指定的DNS伺服器,稱為LDNS。如果LDNS伺服器中有域名www.baidu.com所對應的IP地址,則返回給客戶端的瀏覽器,如果沒有,則繼續請求其他DNS伺服器。

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

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

5)LDNS伺服器收到baidu.com所對應的IP地址後,就會去baidu.com域名伺服器請求對www.baidu.com的域名解析。Baidu.com域名對應的DNS伺服器是該域名的授權DNS伺服器。這個DNS伺服器就是企業購買域名時用於管理解析的伺服器。

6)baidu.com域名DNS伺服器會吧www.baidu.com域名所對應的IP地址給解析出來,然後發給LDNS。

7)LDNS把解析出來的結果,www.baudu.com所對應的IP地址傳送給客戶端的瀏覽器。並且LDNS也會將其域名和對應的地址快取到cache中。

8)客戶端瀏覽器收到後,也會將其域名以及對應的IP地址快取的到DNS快取和hosts檔案中。

 

3、瀏覽器從訪問的IP地址(URL)解析出預設的斷後號:80

4、瀏覽器通過解析後得到的IP地址和埠號進行web伺服器建立一條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狀態,完成三次握手。

 

5、建立TCP連線之後,瀏覽器向web伺服器傳送一條HTTP請求報文。

1)請求行

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

內容:包括方法欄位GET和URL欄位以及HTTP協議版本

2)請求頭

作用:通過客戶端把請求的相關資訊發給伺服器

內容:包括媒體型別、語言型別、支援壓縮、客戶端型別、主機等資訊。

3)空行

作用:告訴伺服器空行以下內容不屬於請求頭部資訊。

4)請求報文主體

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

內容:檢視資訊、應用post方法。

6、web伺服器響應並讀取瀏覽器的請求資訊,然後返回一條HTTP響應報文。

1)狀態行

作用:用來說明服務端響應客戶端的狀態。

內容:包括洗衣及版本號、數字狀態碼、狀態情況

2)響應頭

作用:通過服務端把響應的相關資訊給客戶端

內容:包括Location、server、connect、vary等

3)空行

作用:告訴客戶端空行以下內容不屬於響應頭部資訊。

4)響應報文主體

作用:用來裝載著要返回給客戶端的資料

內容:包括文字、html、視訊或者是圖片。

7、web伺服器關閉HTTP連線,關閉TCP連線,web伺服器顯示訪問的網站內容到螢幕上。

1)第一次揮手:

客戶端A傳送一個FIN,用來關閉客戶A到伺服器B的資料傳送。 

2)第二次揮手:

伺服器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將佔用一個序號。 

3)第三次揮手:

伺服器B關閉與客戶端A的連線,傳送一個FIN給客戶端A。 

4)第四次揮手:

客戶端A發回ACK報文確認,並將確認序號設定為收到序號加1。