1. 程式人生 > >網絡技術——當在瀏覽器中輸入一個網址並按下回車後發生的事情

網絡技術——當在瀏覽器中輸入一個網址並按下回車後發生的事情

一次 seq asc 找到 直接 隨機 傳輸層 搜索 主機

1、回車鍵按下後,瀏覽器會對輸入的地址數據進行解析:
  1.1、檢查輸入的URL是http協議,請求資源是對應主機名網站主頁。
  1.2、然後檢查瀏覽器的嚴格安全傳輸列表( HSTS列表 ),如果網站在列表中,則瀏覽器直接使用https協議進行傳輸,否則直接使用http協議傳輸,或者先使用http協議向網站服務器發送一個請求,服務器返回瀏覽器只能以https協議進行,則接下來仍然只以https協議來進行傳輸。
  1.3、然後檢查輸入地址中是否有非ASCII碼的unicode字符,如果有的話進行字符轉換。
  1.4、當協議或主機名不合法時,瀏覽器會將地址欄中輸入的內容傳遞給默認的搜索引擎。

2、然後進行DNS遞歸查詢
  2.1、DNS查詢過程中,首先在緩存中進行查詢,找到直接返回結果否則
  2.2、再使用gethostbynme庫函數進行查詢,庫函數查詢過程中,首先到hosts中進行檢查,查看域名是否在本地hosts文件中,找到直接返回結果,如果沒有記錄且庫函數查詢也沒有記錄則
  2.3、以上查詢均未果,則會向DNS服務器發送一條DNS查詢請求。查詢DNS服務器通常是在本地路由器或者ISP的緩存DNS服務器上進行,如果對應記錄存在,則返回該映射地址,並且該地址會被標記為非權威服務器應答標簽,如果對應記錄不存在,則會遞歸向高層 DNS 服務器做查詢,直到返回最終結果。
  2.4、如果DNS查詢失敗,則返回無法解析DNS地址,停止,否則瀏覽器根據查詢到的對應ip地址進行下一步操作,即使用套接字進行數據訪問。

3、使用套接字進行數據訪問
  3.1、瀏覽器獲得目標IP地址,以及URL中給出的端口號(http 協議默認端口號是 80, https 默認端口號是 443),調用系統庫函數socket,請求一個TCP流套接字。
  3.2、該請求首先被交給傳輸層,封裝成TCP segment,然後被送往網絡層,添加目標服務器IP地址以及本機的IP地址,封裝成TCP packet,再接下來會進入鏈路層,在封包中加入frame頭部,包含本機網卡的MAC地址和網關MAC地址等,形成最終的TCP封包。
  3.3、TCP封包完成之後,會通過以太網等網絡進行傳輸到目標地址。

4、建立TCP連接
  建立TCP連接會進行三次握手的過程,然後進行發送HTTP請求過程和接收過程。
  4.1、進行三次握手,首先向服務器發送一個syn報文,其中syn=1,seq number=1022(隨機);
  4.2、服務器接收到syn報文,根據syn=1判斷客戶端請求建立連接,並返回一個syn報文,為第一次握手,其中ack number=1023(客戶端seq number+1),seq number=2032(隨機),syn=1,ack=1;
  4.3、客戶端根據服務器的syn報文,確認其ack number是否與上一次發送的seq number+1相等,且ack=1,確認正確,則回應一個ack報文,為第二次握手,即ack number=2033(服務器seq number+1),ack=1,
  4.4、服務器根據接收到的ack報文,確認ack number是否與上一次發送的seq number+1相等,並且ack=1,確認正確,則建立連接,進入Established狀態,為第三次握手。
  4.5、建立TCP連接後,會使用HTTP協議發送HTTP的GET請求,服務器處理請求返回資源數據。

5、瀏覽器處理數據
  5.1、再接收到所請求的資源之後,瀏覽器會對接收到的html、css、js等數據根據標準格式進行解析。
  5.2、然後會通過構建和遍歷DOM節點樹,進行各個節點的渲染計算,最後進行GPU的渲染布局和繪制步驟等。

網絡技術——當在瀏覽器中輸入一個網址並按下回車後發生的事情