訪問一個網(wǎng)頁的全過程
這個過程是我學(xué)計網(wǎng)的時候自頂向下那本書里面寫的全過程常柄,應(yīng)該是最全的一個解釋
還有另一個參考從輸入 URL 到瀏覽器接收的過程中發(fā)生了什么事情?
20160830234021198.png
準(zhǔn)備:DHCP/UDP/IP和以太網(wǎng)
啟動主機(jī),用一根以太網(wǎng)電纜連接到學(xué)校的以太網(wǎng)交換機(jī),交換機(jī)又與學(xué)校的路由器相連.學(xué)校的這臺路由器與一個ISP鏈接,此ISP(Internet Service Provider)還提供了DNS服務(wù).所以DNS服務(wù)器駐留在電信移動聯(lián)通的網(wǎng)絡(luò)中而不是學(xué)校網(wǎng)絡(luò)中.假設(shè)DHCP服務(wù)器運行在路由器中.
當(dāng)主機(jī)與網(wǎng)絡(luò)連接時,沒有IP地址就不能做任何事情,例如下載一個Web網(wǎng)頁.所以主機(jī)采取的一個網(wǎng)絡(luò)相關(guān)的動作是運行DHCP協(xié)議,以從本地的DHCP服務(wù)器獲得一個IP地址以及其他信息.
- 系統(tǒng)生成一個DHCP請求報文(動態(tài)主機(jī)配置協(xié)議),并將這個報文放入具有目的地端口67(DHCP服務(wù)器)和源端口68(DHCP客戶)的UDP報文段.該UDP報文段則被放置在一個具有廣播IP目的地址(255.255.255.255)和源IP地址(0.0.0.0)的IP數(shù)據(jù)報中,因為此時主機(jī)還不具有IP地址.
- 包含DHCP請求報文的IP數(shù)據(jù)報則被放置在以太網(wǎng)幀中.該以太網(wǎng)幀具有目的MAC地址(FF:FF:FF:FF:FF:FF),使該幀將廣播到與交換機(jī)連接的所有設(shè)備,如果順利的話也包括DHCP服務(wù)器(路由器),該幀的源MAC地址是00:16:D3:23:68:8A.
- 包含DHCP請求的廣播以太網(wǎng)幀是第一個由主機(jī)發(fā)到以太網(wǎng)交換機(jī)的幀,該交換機(jī)在所有的出端口廣播幀,包括連接到路由器的端口.
- 路由器在它的具有MAC地址00:22:6B:45:1F的接口接收到該廣播的以太網(wǎng)幀,該幀中包含DHCP請求,并且從該以太網(wǎng)幀中抽取出IP數(shù)據(jù)包.該數(shù)據(jù)報的廣播目的地址指示了這個IP數(shù)據(jù)報應(yīng)當(dāng)由該結(jié)點的高層協(xié)議處理,因此該數(shù)據(jù)報的載荷一個UPD報文段被分解向上達(dá)到UDP,DHCP請求報文從此UDP報文段中抽取出來,此時DHCP服務(wù)器有了DHCP請求報文.
- 假設(shè)運行的路由器中的DHCP服務(wù)器能夠以CIDR(無類別域間路由選擇)塊68.85.2.0/24分配IP地址.所以,主機(jī)地址在電信地址塊中.假設(shè)DHCP服務(wù)器分配地址68.85.2.101給主機(jī).DHCP服務(wù)器生成包含這個IP地以及DNS服務(wù)器的IP(68.87.71.226)/默認(rèn)網(wǎng)關(guān)路由器的IP地址(68.85.2.1)和子網(wǎng)塊(68.85.2.0/24網(wǎng)絡(luò)掩碼)的一個DHCP ACK報文.該DHCP報文被放入一個UDP報文段中,UDP報文段被放入一個IP數(shù)據(jù)報中,IP數(shù)據(jù)報再被放入一個以太網(wǎng)幀中.一個以太網(wǎng)幀的源MAC地址是路由器連接到歸屬網(wǎng)絡(luò)時接口的MAC地址(00:22:6B:45:1F:1B),目的MAC地址是主機(jī)的MAC地址(00:16:D3:23:68:8A).
- 包含DHCP ACK的以太網(wǎng)幀由路由器發(fā)給交換機(jī).因為交換機(jī)是自學(xué)習(xí)的,并且先前從DHCP請求的以太網(wǎng)幀,所以交換機(jī)知道尋址到00:16:D3:23:68:8A的幀僅通過主機(jī)的輸出端口轉(zhuǎn)發(fā).
- 主機(jī)收到包含DHCP ACK的以太網(wǎng)幀,從該以太網(wǎng)幀中抽取IP數(shù)據(jù)報,從IP數(shù)據(jù)報中抽取UDP報文段,從UDP報文段中抽取DHCP ACK報文.主機(jī)則記錄下它的IP地址和它的DNS服務(wù)器的IP地址.它還在其IP轉(zhuǎn)發(fā)表中安裝默認(rèn)網(wǎng)關(guān)地址.
仍在準(zhǔn)備: DNS和ARP
當(dāng)在瀏覽器把www.goole.com的URL輸入到Web瀏覽器中時,開啟了一串事件,這將導(dǎo)致谷歌主頁最終顯示在Web瀏覽器上.Web瀏覽器通過生成一個TCP套接字開始該過程,套接字用于向www.google.com發(fā)送HTTP請求.為了生成該套接字,需要知道www.google.com的IP地址.需要使用DNS協(xié)議提供這種名字到IP地址的轉(zhuǎn)換服務(wù).
- 主機(jī)操作系統(tǒng)因此生成一個DNS查詢報文,將字符串www.google.com放入DNS報文的問題段中.該DNS報文則放置在一個具有53號(DNS服務(wù)器)目的端口的UDP報文段中.該UDP報文段則被放入具有IP目的地址68.87.71.226和源IP地址68.85.2.101的IP數(shù)據(jù)報中.
- 主機(jī)則將包含DNS請求報文的數(shù)據(jù)報IP放入到一個以太網(wǎng)幀中.該幀將發(fā)送到網(wǎng)絡(luò)中的網(wǎng)關(guān)路由器.然而,雖然主機(jī)獲取了網(wǎng)關(guān)路由器的IP地址(68.85.2.1),但仍不知道該網(wǎng)關(guān)路由器的MAC地址.為了獲得該網(wǎng)關(guān)路由器的MAC地址,需要使用ARP(地址解析協(xié)議)協(xié)議.
- 主機(jī)生成一個具有目的IP地址68.85.2.1(默認(rèn)網(wǎng)關(guān))的ARP查詢報文,將該ARP報文防止在一個具有廣播目的地址(FF:FF:FF:FF:FF:FF:FF)的以太網(wǎng)幀中,并向交換機(jī)發(fā)送該以太網(wǎng)幀,交換機(jī)將該幀交付給所有連接的設(shè)備,包括網(wǎng)關(guān)路由器.
- 網(wǎng)關(guān)路由器在接口上收到包含該ARP查詢報文的幀,發(fā)現(xiàn)ARP報文中目的地址IP地址68.85.2.1匹配接口的IP地址.網(wǎng)關(guān)路由器因此準(zhǔn)備一個ARP回答,指示它的MAC地址00:22:6B:45:1F:1B對應(yīng)地址.68.85.2.1,它將ARP回答放在一個以太網(wǎng)幀中,其目的地址為00:16:D3:23:68:8A,并向交換機(jī)發(fā)送該幀,再由交換機(jī)將該幀交付給主機(jī).
- 主機(jī)接收包含ARP回答報文的幀,并從ARP回答報文中抽取網(wǎng)關(guān)路由器的MAC地址(00:22:6B:45:1F:1B)
- 主機(jī)能夠包含DNS查詢的以太網(wǎng)幀尋址到網(wǎng)關(guān)路由器的MAC地址.注意,該幀中的IP數(shù)據(jù)報具有IP目的地址68.87.71.226(DNS服務(wù)器),而該幀具有目的地址00:22:6B:45:1F:1B(網(wǎng)關(guān)路由器).主機(jī)像交換機(jī)發(fā)送包含DNS報文的幀,交換機(jī)將該幀交付給網(wǎng)關(guān)路由器.
仍在準(zhǔn)備:域內(nèi)路由選擇到DNS服務(wù)器
- 網(wǎng)關(guān)路由器接收該幀并抽取包含DNS查詢的IP數(shù)據(jù)報飘痛。路由器查找該數(shù)據(jù)報的目的地址(68.87.71.226),并根據(jù)其轉(zhuǎn)發(fā)表決定該數(shù)據(jù)報應(yīng)當(dāng)發(fā)送到Comcast網(wǎng)絡(luò)最左側(cè)的路由器容握。
- 在Comcast網(wǎng)絡(luò)中最左側(cè)的路由器接收到該幀宣脉,抽取IP數(shù)據(jù)報,檢查該數(shù)據(jù)報的目的地址(68.87.71.226)剔氏,并根據(jù)其轉(zhuǎn)發(fā)表確定出接口塑猖,經(jīng)過該接口朝著DNS服務(wù)器轉(zhuǎn)發(fā)數(shù)據(jù)報,而轉(zhuǎn)發(fā)表已經(jīng)根據(jù)域內(nèi)和域間的BGP(iBGP和eBGP)協(xié)議所填寫谈跛。
- 最終包含DNS查詢的IP數(shù)據(jù)報到達(dá)了DNS服務(wù)器羊苟。DNS服務(wù)器抽取出DNS查詢報文,在它的DNS數(shù)據(jù)庫中查找名字www.google.com感憾,找到包含對應(yīng)www.google.com的IP地址(64.233.169.105)的DNS源記錄蜡励。(假設(shè)是當(dāng)前緩存在DNS服務(wù)器中)。這種緩存數(shù)據(jù)源于google.com權(quán)威DNS服務(wù)器阻桅。該DNS服務(wù)器形成了一個包含這種主機(jī)名到IP地址映射的DNS回答報文凉倚,將該DNS回答報文放入UDP報文段中,該報文段放入尋址(68.85.2.101)的IP數(shù)據(jù)報中嫂沉。該數(shù)據(jù)報將通過路由器反向轉(zhuǎn)發(fā)到學(xué)校的路由器稽寒,并從這個例子里的以太網(wǎng)交換機(jī)進(jìn)到主機(jī)。
- 主機(jī)從DNS報文中取出服務(wù)器www.google.com的IP地址趟章。
Web客戶-服務(wù)器交互:TCP和HTTP
- 既然主機(jī)有了www.google.com的IP地址杏糙,它能夠生成TCP套接字,該套接字將用于向www.google.com發(fā)送HTTP GET報文尤揣。當(dāng)生成TCP套接字時搔啊,主機(jī)的TCP必須首先與www.google.com中的TCP執(zhí)行三次握手柬祠。主機(jī)因此首先生成一個具有目的端口80(針對HTTP的)的TCP SYN報文段北戏,將該TCP報文段放置在具有目的IP地址(64.233.169.105 www.google.com)的IP數(shù)據(jù)報中,將該數(shù)據(jù)報放置在MAC地址為00:22:6B:45:1F:1B(網(wǎng)關(guān)路由器)的幀中漫蛔,并向交換機(jī)發(fā)送該幀嗜愈。
- 在學(xué)校網(wǎng)絡(luò)旧蛾,Comcast網(wǎng)絡(luò)和谷歌網(wǎng)絡(luò)中的路由器朝著www.google.com轉(zhuǎn)發(fā)包含TCP SYN的數(shù)據(jù)報,使用每臺路由器中的轉(zhuǎn)發(fā)表蠕嫁。支配分組經(jīng)comcast和 谷歌網(wǎng)絡(luò)之間域間鏈路轉(zhuǎn)發(fā)的路由器轉(zhuǎn)發(fā)表項锨天,是由BGP(自治系統(tǒng)間路由選擇)協(xié)議決定的。
- 最終剃毒,包含TCP SYN的數(shù)據(jù)報到達(dá)www.google.com病袄。從數(shù)據(jù)報抽取出TCP SYN報文并分解到與端口80相聯(lián)系的歡迎套接字。然后產(chǎn)生一個TCP SYNACK報文段赘阀,將其放入想主機(jī)尋址的一個數(shù)據(jù)報中益缠,最后放入鏈路層幀中,該鏈路適合將www.google.com鏈接到第一跳路由基公。
- 包含TCP SYNACK報文段的數(shù)據(jù)報通過谷歌幅慌,comcast和學(xué)校網(wǎng)絡(luò),最終達(dá)到主機(jī)的以太網(wǎng)卡轰豆。數(shù)據(jù)報在操作系統(tǒng)中分解到TCP套接字胰伍,從而進(jìn)入鏈接狀態(tài)。
- 現(xiàn)在準(zhǔn)備向www.google.com發(fā)送字節(jié)了酸休,瀏覽器生成包含獲取的URL的HTTP GET報文骂租。HTTP GET報文則寫入套接字,其中GET報文成為一個TCP報文段的載荷斑司。該TCP報文段放入一個IP數(shù)據(jù)報中菩咨,并交付到www.google.com。
- 在www.google.com的HTTP服務(wù)器從TCP套接字中讀取HTTP GET報文陡厘,生成一個HTTP響應(yīng)報文抽米,將請求的Web網(wǎng)頁放入到HTTP響應(yīng)體中,并報文發(fā)送進(jìn)TCP套接字中糙置。
- 包含HTTP回答報文的數(shù)據(jù)報通過谷歌云茸,comcast和學(xué)校網(wǎng)絡(luò)進(jìn)行轉(zhuǎn)發(fā),到達(dá)主機(jī)谤饭。瀏覽器從套接字中讀取HTTP響應(yīng)标捺,從HTTP響應(yīng)體中抽取Web網(wǎng)頁的html,并最終顯示了web網(wǎng)頁揉抵。