訪問一個網頁的全過程

前言

以前在簡書裏面記錄的算是個讀書筆記吧,如今遷移一波html

訪問一個網頁的全過程

這個過程是我學計網的時候自頂向下那本書裏面寫的全過程,應該是最全的一個解釋web

還有另外一個參考從輸入 URL 到瀏覽器接收的過程當中發生了什麼事情?數據庫

20160830234021198.png

準備:DHCP/UDP/IP和以太網

啓動主機,用一根以太網電纜鏈接到學校的以太網交換機,交換機又與學校的路由器相連.學校的這臺路由器與一個ISP連接,此ISP(Internet Service Provider)還提供了DNS服務.因此DNS服務器駐留在電信移動聯通的網絡中而不是學校網絡中.假設DHCP服務器運行在路由器中.segmentfault

當主機與網絡鏈接時,沒有IP地址就不能作任何事情,例以下載一個Web網頁.因此主機採起的一個網絡相關的動做是運行DHCP協議,以從本地的DHCP服務器得到一個IP地址以及其餘信息.瀏覽器

  1. 系統生成一個DHCP請求報文(動態主機配置協議),並將這個報文放入具備目的地端口67(DHCP服務器)和源端口68(DHCP客戶)的UDP報文段.該UDP報文段則被放置在一個具備廣播IP目的地址(255.255.255.255)和源IP地址(0.0.0.0)的IP數據報中,由於此時主機還不具備IP地址.
  2. 包含DHCP請求報文的IP數據報則被放置在以太網幀中.該以太網幀具備目的MAC地址(FF:FF:FF:FF:FF:FF),使該幀將廣播到與交換機鏈接的全部設備,若是順利的話也包括DHCP服務器(路由器),該幀的源MAC地址是00:16:D3:23:68:8A.
  3. 包含DHCP請求的廣播以太網幀是第一個由主機發到以太網交換機的幀,該交換機在全部的出端口廣播幀,包括鏈接到路由器的端口.
  4. 路由器在它的具備MAC地址00:22:6B:45:1F的接口接收到該廣播的以太網幀,該幀中包含DHCP請求,而且從該以太網幀中抽取出IP數據包.該數據報的廣播目的地址指示了這個IP數據報應當由該結點的高層協議處理,所以該數據報的載荷一個UPD報文段被分解向上達到UDP,DHCP請求報文今後UDP報文段中抽取出來,此時DHCP服務器有了DHCP請求報文.
  5. 假設運行的路由器中的DHCP服務器可以以CIDR(無類別域間路由選擇)塊68.85.2.0/24分配IP地址.因此,主機地址在電信地址塊中.假設DHCP服務器分配地址68.85.2.101給主機.DHCP服務器生成包含這個IP地以及DNS服務器的IP(68.87.71.226)/默認網關路由器的IP地址(68.85.2.1)和子網塊(68.85.2.0/24網絡掩碼)的一個DHCP ACK報文.該DHCP報文被放入一個UDP報文段中,UDP報文段被放入一個IP數據報中,IP數據報再被放入一個以太網幀中.一個以太網幀的源MAC地址是路由器鏈接到歸屬網絡時接口的MAC地址(00:22:6B:45:1F:1B),目的MAC地址是主機的MAC地址(00:16:D3:23:68:8A).
  6. 包含DHCP ACK的以太網幀由路由器發給交換機.由於交換機是自學習的,而且先前從DHCP請求的以太網幀,因此交換機知道尋址到00:16:D3:23:68:8A的幀僅經過主機的輸出端口轉發.
  7. 主機收到包含DHCP ACK的以太網幀,從該以太網幀中抽取IP數據報,從IP數據報中抽取UDP報文段,從UDP報文段中抽取DHCP ACK報文.主機則記錄下它的IP地址和它的DNS服務器的IP地址.它還在其IP轉發表中安裝默認網關地址.

仍在準備: DNS和ARP

當在瀏覽器把www.goole.com的URL輸入到Web瀏覽器中時,開啓了一串事件,這將致使谷歌主頁最終顯示在Web瀏覽器上.Web瀏覽器經過生成一個TCP套接字開始該過程,套接字用於向www.google.com發送HTTP請求.爲了生成該套接字,須要知道www.google.com的IP地址.須要使用DNS協議提供這種名字到IP地址的轉換服務.緩存

  1. 主機操做系統所以生成一個DNS查詢報文,將字符串www.google.com放入DNS報文的問題段中.該DNS報文則放置在一個具備53號(DNS服務器)目的端口的UDP報文段中.該UDP報文段則被放入具備IP目的地址68.87.71.226和源IP地址68.85.2.101的IP數據報中.
  2. 主機則將包含DNS請求報文的數據報IP放入到一個以太網幀中.該幀將發送到網絡中的網關路由器.然而,雖然主機獲取了網關路由器的IP地址(68.85.2.1),但仍不知道該網關路由器的MAC地址.爲了得到該網關路由器的MAC地址,須要使用ARP(地址解析協議)協議.
  3. 主機生成一個具備目的IP地址68.85.2.1(默認網關)的ARP查詢報文,將該ARP報文防止在一個具備廣播目的地址(FF:FF:FF:FF:FF:FF:FF)的以太網幀中,並向交換機發送該以太網幀,交換機將該幀交付給全部鏈接的設備,包括網關路由器.
  4. 網關路由器在接口上收到包含該ARP查詢報文的幀,發現ARP報文中目的地址IP地址68.85.2.1匹配接口的IP地址.網關路由器所以準備一個ARP回答,指示它的MAC地址00:22:6B:45:1F:1B對應地址.68.85.2.1,它將ARP回答放在一個以太網幀中,其目的地址爲00:16:D3:23:68:8A,並向交換機發送該幀,再由交換機將該幀交付給主機.
  5. 主機接收包含ARP回答報文的幀,並從ARP回答報文中抽取網關路由器的MAC地址(00:22:6B:45:1F:1B)
  6. 主機可以包含DNS查詢的以太網幀尋址到網關路由器的MAC地址.注意,該幀中的IP數據報具備IP目的地址68.87.71.226(DNS服務器),而該幀具備目的地址00:22:6B:45:1F:1B(網關路由器).主機像交換機發送包含DNS報文的幀,交換機將該幀交付給網關路由器.

仍在準備:域內路由選擇到DNS服務器

  1. 網關路由器接收該幀並抽取包含DNS查詢的IP數據報。路由器查找該數據報的目的地址(68.87.71.226),並根據其轉發表決定該數據報應當發送到Comcast網絡最左側的路由器。
  2. 在Comcast網絡中最左側的路由器接收到該幀,抽取IP數據報,檢查該數據報的目的地址(68.87.71.226),並根據其轉發表肯定出接口,通過該接口朝着DNS服務器轉發數據報,而轉發表已經根據域內和域間的BGP(iBGP和eBGP)協議所填寫。
  3. 最終包含DNS查詢的IP數據報到達了DNS服務器。DNS服務器抽取出DNS查詢報文,在它的DNS數據庫中查找名字www.google.com,找到包含對應www.google.com的IP地址(64.233.169.105)的DNS源記錄。(假設是當前緩存在DNS服務器中)。這種緩存數據源於google.com權威DNS服務器。該DNS服務器造成了一個包含這種主機名到IP地址映射的DNS回答報文,將該DNS回答報文放入UDP報文段中,該報文段放入尋址(68.85.2.101)的IP數據報中。該數據報將經過路由器反向轉發到學校的路由器,並從這個例子裏的以太網交換機進到主機。
  4. 主機從DNS報文中取出服務器www.google.com的IP地址。

Web客戶-服務器交互:TCP和HTTP

  1. 既然主機有了www.google.com的IP地址,它可以生成TCP套接字,該套接字將用於向www.google.com發送HTTP GET報文。當生成TCP套接字時,主機的TCP必須首先與www.google.com中的TCP執行三次握手。主機所以首先生成一個具備目的端口80(針對HTTP的)的TCP SYN報文段,將該TCP報文段放置在具備目的IP地址(64.233.169.105 www.google.com)的IP數據報中,將該數據報放置在MAC地址爲00:22:6B:45:1F:1B(網關路由器)的幀中,並向交換機發送該幀。
  2. 在學校網絡,Comcast網絡和谷歌網絡中的路由器朝着www.google.com轉發包含TCP SYN的數據報,使用每臺路由器中的轉發表。支配分組經comcast和 谷歌網絡之間域間鏈路轉發的路由器轉發表項,是由BGP(自治系統間路由選擇)協議決定的。
  3. 最終,包含TCP SYN的數據報到達www.google.com。從數據報抽取出TCP SYN報文並分解到與端口80相聯繫的歡迎套接字。而後產生一個TCP SYNACK報文段,將其放入想主機尋址的一個數據報中,最後放入鏈路層幀中,該鏈路適合將www.google.com連接到第一跳路由。
  4. 包含TCP SYNACK報文段的數據報經過谷歌,comcast和學校網絡,最終達到主機的以太網卡。數據報在操做系統中分解到TCP套接字,從而進入連接狀態。
  5. 如今準備向www.google.com發送字節了,瀏覽器生成包含獲取的URL的HTTP GET報文。HTTP GET報文則寫入套接字,其中GET報文成爲一個TCP報文段的載荷。該TCP報文段放入一個IP數據報中,並交付到www.google.com。
  6. 在www.google.com的HTTP服務器從TCP套接字中讀取HTTP GET報文,生成一個HTTP響應報文,將請求的Web網頁放入到HTTP響應體中,並報文發送進TCP套接字中。
  7. 包含HTTP回答報文的數據報經過谷歌,comcast和學校網絡進行轉發,到達主機。瀏覽器從套接字中讀取HTTP響應,從HTTP響應體中抽取Web網頁的html,並最終顯示了web網頁。
相關文章
相關標籤/搜索