從插上網線到web頁面請求,究竟發生了哪些過程?(計算機網絡篇)


一.說在前頭

好久沒有更新博客了,汗顏,最近忙於各種實驗與報告,但是還是要抽時間總結一下學的東西。歡迎轉載,但是要注明出處哦(=^ ^=)。

最近學了計算機網絡,正好總結一下。本篇博客的大部分是跟計算機網絡協議相關的,大概是一個沿着協議棧往下的過程。我們可以看到,一個最簡單的請求,也包含了許多復雜的過程。而這些過程對用戶來說,是完全不可見的,也就是說,制作這些協議的前輩們,為了方便用戶的使用,把許多復雜的東西已經封裝好了,因此我們這些小白,只用動動鼠標,就可以輕松surfing the Internet了!

這次的總結基於這樣的場景:一名學生,就稱呼他為“小明”吧(:-P,小明再次登場,哈哈~),小明帶着他的筆記本電腦和學校寢室的網線接口(其實是一個以太網交換機)連接,加載一個web頁面(比如說www.baidu.com的主頁,額,某度給廣告費么)。正如前面所講,為了滿足這個簡單的請求,背后隱藏了許多的細節。

 

二.准備:DHCP、UDP、IP、以太網

 

我們假定小明啟動他的筆記本,然后將其用一根網線(以太網電纜)鏈接到學校的網口(以太網交換機),交換機與學校的路由器相連,如上圖所示。學校的這台路由器與一個ISP連接,本例中ISP為unicom.net。在本例中,unicom.net為學校提供了DNS服務;所以,DNS服務器駐留在unicom網絡中而不是學校的網絡中。我們還假設DHCP服務器運行在路由器中,因為我們在生活中的常見情景就是這樣。

當小明首先將筆記本與網絡連接時,沒有IP地址,他就不能做任何事情。所以,第一要務就是,運行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地址是小明筆記本的MAC地址00:16:D3:23:68:8A。

 

3.  包含DHCP請求的廣播以太網幀是第一個從小明筆記本發送到以太網交換機的幀。這個交換機在所有的出端口廣播收到的幀,也包括了連接到路由器的端口。

 

4  .路由器在它的具有MAC地址00:226B:45:1F:1B的接口收到了這個廣播的以太網幀,幀中包含了DHCP請求,並且路由器可以從幀中抽取出IP數據報。該數據報的廣播IP目的地址指示了這個IP數據報應當由在該節點的高層協議處理,因此數據報的載荷(一個UDP報文段)被分解了,向上到達了UDP,UHCP請求報文從UDP報文段中抽取出來。此時DHCP服務器有了DHCP請求報文。

 

5.  我們假設運行在路由器中的DHCP服務器能夠以CIDR塊68.85.2.0/24分配IP地址。所以在這個例子中,在學校內使用的所有IP地址都在unicom的地址塊中。我們假設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報文。報文被放入一個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數據報,又從數據報提取UDP報文段,從報文段中提取DHCP ACK報文。小明的DHCP客戶端則記錄下它的IP地址和它的DNS服務器的IP地址。它還在其IP轉發表中安裝默認網關的地址。小明筆記本將向該默認網關發送目的地址為其子網68.85.2.0/24以外的所有數據報。此時,筆記本已經初始化所有的網絡組件,並且准備開始處理web頁面的獲取。

 

三.仍在准備:DNS和ARP

 

當小明將www.baidu.com的URL鍵入其web瀏覽器時,他就開啟了一長串事件,這將導致某度主頁最終顯示在他的web瀏覽器上。小明的web瀏覽器通過生成一個TCP套接字開始了該過程,套接字用於向www.baidu.com發送HTTP請求。為了生成該套接字,小明的筆記本將需要知道www.baidu.com的IP地址。使用DNS服務提供這種域名到IP的相互轉換。

 

8.  小明的筆記本上的操作系統因此生成一個DNS查詢報文,將字符串www.baidu.com放入DNS報文的問題段中。這個DNS報文則放置在一個具有53號(DNS服務器)目的端口的UDP報文段中。該UDP報文段則被放入具有IP目的地址68.87.71.226(在第5步中DHCP ACK返回的DNS服務器地址)和源IP地址68.85.2.101的IP數據報中。

 

9.  小明筆記本將包含DNS請求報文的數據報放入一個以太網幀。幀將發送(在鏈路層尋址)到小明學校網絡的網關路由器。然而,即使小明的筆記本經過上面的第5步中的DHCP ACP報文知道了學校網關路由器的IP地址,但是仍然不知道這個網關的MAC地址。為了獲得網關的MAC地址,小明筆記本將需要使用ARP協議

 

10.  筆記本生成一個具有目的IP地址68.85.2.1(默認網關)的ARP查詢報文,將這個ARP報文放置在一個廣播目的地址(FF:FF:FF:FF:FF:FF)的以太網幀中,並向交換機發送這個幀,交換機將這個幀交付給所有和它相連接的設備,包括了網關路由器。

 

11.  網關路由器在通往學校網絡的接口上接收到了包含該ARP查詢報文的幀,發現在ARP報文中目標IP地址68.85.2.1匹配其接口的IP地址。網關路由器因此准備一個ARP回答,指示它的MAC地址為00:22:6B:45:1F:1B,對應IP地址為68.85.2.1。它將ARP回答放在一個以太網幀中。其目的地址為00:16:D3:23:68:8A(小明的筆記本),並向交換機發送該幀,再由交換機將幀交付給筆記本電腦。

 

12  .筆記本電腦接收包含ARP回答報文的幀,並從ARP回答報文中抽取網關路由器的MAC地址(00:22:6B:45:1F:1B)。

 

13.  小明的筆記本電腦現在終於能夠使包含DNS查詢的以太網幀尋址到網關路由器的MAC地址。注意到在該幀中的IP數據報具有IP目的地址68.87.71.226(DNS服務器),而該幀具有MAC目的地址00:22:6B:45:1F:1B(網關路由器)。筆記本電腦向交換機發送該幀,交換機將幀交付給網關路由器。

 

四.還在准備:域內路由選擇到DNS服務器

 

14.  網關路由器接收該幀並抽取包含DNS查詢的IP數據報。路由器查找該數據報的目的地址(68.87.71.226),並根據路由器自己的轉發表決定該數據報應當發送到圖示unicom網絡中最左邊的路由器。IP數據報放置在鏈路層幀中,該鏈路適合將學校路由器連接到最左邊的unicom路由器,並且該幀經這條鏈路發送。

 

15.  在unicom網絡中最左邊的路由器接收到該幀,抽取IP數據報,檢查數據報的目的地址(68.87.71.226),並根據轉發表確定出接口,經過該接口朝着DNS服務器轉發數據報,而轉發表已根據unicom的域內協議(如RIP、OSPF、IS-IS等)以及因特網的域間協議BGP所填寫。

 

16.  最終包含DNS查詢的IP數據報到達了DNS服務器。DNS服務器抽取出DNS查詢報文,在它的DNS數據庫中查找名字www.baidu.com。找到包含對應www.baidu.com的IP地址(64.233.169.105)的DNS源記錄。(假設它當前緩存在這個DNS服務器中。)這種緩存數據源於baidu.com的權威DNS服務器。該DNS服務器形成了一個包含這種主機名的IP地址的映射的DNS回答報文,將該回答報文放入UDP報文段中,報文段放入尋址到小明筆記本電腦(68.85.2.101)的IP數據報,數據報通過unicom網絡反向轉發到學校的路由器,並從這里經過以太網交換機到小明的筆記本電腦。

 

17.  筆記本電腦從DNS報文抽取出服務器www.baidu.com的IP地址。最終,在上面的大量工作之后,這台可憐的筆記本電腦准備接觸www.baidu.com的服務器!

 

五.web交互:TCP與HTTP

 

18.  既然筆記本電腦已經有了www.baidu.com的服務器IP地址,它能夠生成TCP套接字,這個套接字將用於向www.baidu.com發送HTTP GET報文。當小明生成TCP套接字時,在筆記本電腦中的TCP必須首先與www.baidu.com中的TCP執行三次握手協議。筆記本因此首先生成一個具有目的端口80的TCP SYN報文段,該TCP報文段放置在具有目的IP地址為64.233.169.105(www.baidu.com)的IP數據報,數據報則放置在MAC地址為00:22:6B:45:1F:1B(默認網關路由器)的幀中,並向交換機發送該幀。

 

19.  在學校網絡、unicom網絡和某度網絡中的路由器朝着www.baidu.com轉發包含TCP SYN的數據報,使用每台路由器的轉發表,如上面的步驟14-16那樣。前面也說過支配分組經unicom和某度網絡之間的鏈路轉發的路由器轉發表項,是由BGP協議決定的。

 

20.  最終,包含TCP SYN的數據報到達www.baidu.com。從數據報抽取出TCP SYN報文並分解到與端口80相聯系的套接字。對於某度HTTP服務器和小明的筆記本電腦之間的TCP連接生成一個連接套接字。產生一個TCP SYNACK報文段,將其放入向筆記本電腦尋址的一個IP數據報中,最后放入鏈路層幀,該鏈路適合將www.baidu.com連接到其第一跳路由器。

 

21.  包含TCP SYNACK報文段的數據通過某度、unicom和學校網絡,最終到達筆記本電腦的以太網卡。數據報在操作系統中分解到步驟18生成的TCP套接字,從而進入連接狀態。

 

22.  借助筆記本電腦上的套接字,現在准備向www.baidu.com發送字節了,小明的瀏覽器生成包含要獲取的URL的HTTP GET報文。報文則寫入套接字,其中GET報文成為一個TCP報文段的有效載荷。TCP報文段放入數據報,再放入以太網幀。交付給www.baidu.com,如同步驟18-20那樣。

 

23.  在www.baidu.com的HTTP服務器從TCP套接字讀取HTTP GET報文,生成一個HTTP響應報文,將請求的web頁面內容放入HTTP響應體中,並將報文段發送到套接字中。

 

24.  包含HTTP響應報文的數據報通過某度、unicom、學校網絡轉發,最后到達小明的筆記本電腦。小明的瀏覽器從套接字中讀取HTTP響應,從響應中抽取web頁面的html等,經過瀏覽器引擎顯示出web頁面!大功告成!\(^o^)/YES!\(^o^)/YES!

 

六.寫在后頭

上面的一個場景已經涉及到了計算機網絡中的很多協議,如果你還想進了解關於其中的web技術的話,轉到我的另一篇博客:從地址欄輸入url到顯示頁面都發生了什么?。在這個場景里,還忽略了一些可能的附加的協議(舉幾個栗子,運行在學校網關路由器中的網絡地址轉換NAT,到學校網絡的無線網絡接入,接入學校網絡或者對報文段和數據報加密的安全協議網絡管理協議,等等),還有一些人們在公共互聯網中的考慮(CDN,負載均衡,web緩存DNS等級體系,等等),但是上述的步驟已經可以運行了。由此二十多個步驟可以看到,計算機網絡真的非常復雜,但是作為用戶完全不需要知道這些細節,也就是說對我們來說,上述的步驟都是“透明的”,向研制這些協議的先輩致敬。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM