【網絡】訪問網站的完整流程

一:總體流程


  1. 在客戶端輸入需要訪問的域名,如:www.baidu.com;
  2. 瀏覽器請求解析DNS服務器,把域名解析成相應的IP地址;
  3. 得到IP地址和端口號之後,客戶端和服務器建立TCP連接(三次握手);
  4. 建立連接後,瀏覽器向服務器發送http請求報文;
  5. 服務器讀取請求報文並響應,返回http響應報文;
  6. 結束後關閉http連接,關閉TCP連接(四次揮手),瀏覽器渲染並呈現響應的內容。

二:要點


  1. 域名解析
  2. 建立TCP連接(三次握手)
  3. HTTP請求和響應報文
  4. 關閉TCP連接(四次揮手)

三:域名解析


  1. 在瀏覽器中輸入域名並回車後,瀏覽器就會解析域名。首先,瀏覽器會先查看本地的hosts文件,尋找與域名對應的規則,如果有,就直接使用hosts文件中對應的IP地址;
  2. 如果沒有在hosts文件中找到對應的規則,瀏覽器會發送一個DNS請求到本地的DNS服務器。該請求到達本地DNS服務器中後,服務器就會在緩存記錄中查找對應的IP。如果找到了對應的IP,就直接返回結果;
  3. 如果本地DNS服務器沒有在緩存中找到對應的IP,本地DNS服務器有兩種選擇:
    ①會向DNS根服務器進行查詢,根服務器沒找到記錄會向域服務器進行查詢,直到查詢到記錄(遞歸)。
    ②向DNS根服務器進行查詢,沒有查詢到記錄則通知本地服務器到域服務器上查詢,直到查詢到記錄(迭代)。
  4. 查詢到域名和IP的對應關係後,本地DNS服務器將結果返回給用戶,並把該對應關係保存在緩存中,以便下次查詢。

四:建立TCP連接(三次握手)


在拿到服務器IP之後,客戶端就會與服務器建立TCP連接,這就涉及到了三次握手。

第一次握手:建立連接時,客戶端發送SYN包到服務器,並進入SYN_SENT狀態,等待服務器確認;

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

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

五:HTTP請求和響應報文


建立TCP連接之後,即可發送HTTP請求。

HTTP請求報文包含請求行、請求頭部、空行和請求包體4個部分

--請求行包含了請求方法字段、URL字段和HTTP協議版本;

--請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號“:”分隔。請求頭部通知服務器有關於客戶端請求的信息;

--空行的作用是通過一個空行,告訴服務器請求頭部到此爲止;

--請求數據部分,若方法字段是GET,則此項爲空,沒有數據;若方法字段是POST,則通常來說此處放置的就是要提交的數據。

HTTP響應報文包含狀態行、響應頭部、空行和響應包體4個部分

--狀態行一般由協議版本、狀態碼及其描述組成;

--響應頭部用於描述服務器的基本信息,以及數據的描述,服務器通過這些數據的描述信息,可以通知客戶端如何處理等一會兒它回送的數據;

--空行的作用是通過一個空行,告訴客戶端響應頭部到此爲止;

--響應包體就是響應的消息體,如果是純數據就是返回純數據,如果請求的是HTML頁面,那麼返回的就是HTML代碼,如果是JS就是JS代碼,如此之類。

六:關閉TCP連接(四次揮手)


1)客戶端進程發出連接釋放報文,並且停止發送數據。此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。

2)服務器收到連接釋放報文,發出確認報文,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處於半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。

3)客戶端收到服務器的確認請求後,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最後的數據)。

4)服務器將最後的數據發送完畢後,就向客戶端發送連接釋放報文,由於在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號爲seq=w,此時,服務器就進入了LAST-ACK(最後確認)狀態,等待客戶端的確認。

5)客戶端收到服務器的連接釋放報文後,必鬚髮出確認,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP連接還沒有釋放,必須經過2∗MSL(最長報文段壽命)的時間後,當客戶端撤銷相應的TCB後,才進入CLOSED狀態。

6)服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB後,就結束了這次的TCP連接。可以看到,服務器結束TCP連接的時間要比客戶端早一些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章