從你輸入網址,到看到網頁——詳解中間發生的過程

huansky發表於2020-11-15

這是一個老生常談的話題,文章將詳細描述發生在這一過程中的內容。

 請求 URL

當我們在瀏覽器裡輸入一個網址,比如 

https://www.baidu.com/ 

URL由三部分組成:資源型別、存放資源的主機域名、資原始檔名。也可認為由4部分組成:協議、主機、埠、路徑。

URL的一般語法格式為:
// 帶方括號[]的為可選項
protocol :// hostname[:port] / path / [;parameters][?query]#fragment

生成 HTTP 請求資訊

拿到 URL 後,需要對 URL 進行一定的解析,比如這個 URL 請求表達了什麼(是請求圖片,html,txt ?請求域名是什麼?),於是會對 URL 進行解析之後,瀏覽器確定了 Web 伺服器和檔名,接下來就是根據這些資訊來生成 HTTP 請求訊息了。

 

HTTP 的訊息格式

生成資料包以後,但是此時還是不知道自己的目的地是哪裡,於是就需要根據 URL 來獲取 IP 地址。

通過 DNS 獲取 IP 地址

輸入網址後,會對網址中的域名進行解析獲取 IP 地址。儘管 IP 地址能夠唯一地標記網路上的計算機,但 IP 地址是一長串數字,不直觀,而且使用者記憶十分不方便,於是人們又發明了另一套字元型的地址方案,即所謂的域名地址。IP 地址和域名是一一對應的,這份域名地址的資訊存放在一個叫域名伺服器 (DNS,Domain name server) 的主機內,使用者只需瞭解易記的域名地址,其對應轉換工作就留給了域名伺服器。域名伺服器就是提供 IP 地址和域名之間的轉換服務的伺服器。

在廣域網中是基於 IP 地址進行通訊的。但通常客戶訪問的是一個網址,為此需要先得到網址對應的 IP 地址,這就需要域名服務系統將域名轉換成 IP 地址。在客戶端瀏覽器中輸入網址時,瀏覽器會根據本地客戶端 DNS 伺服器配置,向 DNS 伺服器獲取域名對應的 IP 地址。

域名解析伺服器是基於 UDP 協議實現的一個應用程式,通常通過監聽 53 埠來獲取客戶端的域名解析請求。        

DNS 查詢過程為:

瀏覽器快取->系統快取->路由器快取->ISP DNS快取->遞迴搜尋

遞迴搜尋過程為:從根域名伺服器頂級域名伺服器到所查詢的域名伺服器。

DNS 的解析過程,具體如下圖所示:

域名解析的工作流程

如果你訪問的網站使用了雲平臺,並配置了智慧 DNS 和全域性負載均衡,在權威 DNS 服務中,一般是通過配置 CNAME 的方式,我們可以起一個別名,例如 vip.yourcomany.com,然後告訴本地 DNS 伺服器,讓它請求 GSLB 解析這個域名,GSLB 就可以在解析這個域名的過程中,通過自己的策略實現負載均衡。

GSLB 通過檢視請求它的本地 DNS 伺服器所在的運營商和地址,就知道使用者所在的運營商和地址,然後將距離使用者位置比較近的 Region 裡面 IP 地址,返回給本地 DNS 伺服器。本地 DNS 解析器將結果快取後將結果返回。

對於手機 App 來說,可以繞過剛才的傳統 DNS 解析機制,只要 HTTPDNS 服務通過,直接呼叫 HTTPDNS 伺服器,得到這多個 SLB 的公網 IP 地址。

別忘了網際網路上還有另外一個重要的角色 CDN,它也會在 DNS 的解析過程中“插上一腳”。DNS 解析可能會給出 CDN 伺服器的 IP 地址,這樣你拿到的就會是 CDN 伺服器而不是目標網站的實際地址。

因為 CDN 會快取網站的大部分資源,比如圖片、CSS 樣式表,所以有的 HTTP 請求就不需要再發到 Apple,CDN 就可以直接響應你的請求,把資料發給你。

由 PHP、Java 等後臺服務動態生成的頁面屬於“動態資源”,CDN 無法快取,只能從目標網站獲取。於是你發出的 HTTP 請求就要開始在網際網路上的“漫長跋涉”,經過無數的路由器、閘道器、代理,最後到達目的地。

協議棧

通過 DNS 獲取到 IP 後,就可以把 HTTP 的傳輸工作交給作業系統中的協議棧。

協議棧的內部分為幾個部分,分別承擔不同的工作。上下關係是有一定的規則的,上面的部分會向下面的部分委託工作,下面的部分收到委託的工作並執行。

應用程式(瀏覽器)通過呼叫 Socket 庫,來委託協議棧工作。協議棧的上半部分有兩塊,分別是負責收發資料的 TCP 和 UDP 協議,它們兩會接受應用層的委託執行收發資料的操作。

協議棧的下面一半是用 IP 協議控制網路包收發操作,在網際網路上傳資料時,資料劊被切分成一塊塊的網路包,而將網路包傳送給對方的操作就是由 IP 負責的。

此外 IP 中還包括 ICMP 協議和 ARP 協議。

  • ICMP 用於告知網路包傳送過程中產生的錯誤以及各種控制資訊。

  • ARP 用於根據 IP 地址查詢相應的乙太網 MAC 地址。

IP 下面的網路卡驅動程式負責控制網路卡硬體,而最下面的網路卡則負責完成實際的收發操作,也就是對網線中的訊號執行傳送和接收操作。

可靠傳輸 —— TCP

HTTP 是基於 TCP 協議傳輸的,關於 TCP 協議 可以參考文章 TCP 三次握手和四次揮手圖解(有限狀態機)

在 HTTP 傳輸資料之前,首先需要 TCP 建立連線,這裡就不細說建立連線過程了。

如果 HTTP 請求訊息比較長,超過了 MSS 的長度,這時 TCP 就需要把 HTTP 的資料拆解一塊塊的資料傳送,而不是一次性傳送所有資料。

MTU 與 MSS

  • MTU:一個網路包的最大長度,乙太網中一般為 1500 位元組。

  • MSS:除去 IP 和 TCP 頭部之後,一個網路包所能容納的 TCP 資料的最大長度。

資料會被以 MSS 的長度為單位進行拆分,拆分出來的每一塊資料都會被放進單獨的網路包中。也就是在每個被拆分的資料加上 TCP 頭資訊,然後交給 IP 模組來傳送資料。

 

資料包分割

TCP 報文生成

TCP 協議裡面會有兩個埠,一個是瀏覽器監聽的埠(通常是隨機生成的),一個是 Web 伺服器監聽的埠(HTTP 預設埠號是 80, HTTPS 預設埠號是 443)。

在雙方建立了連線後,TCP 報文中的資料部分就是存放 HTTP 頭部 + 資料,組裝好 TCP 報文之後,就需交給下面的網路層處理。

至此,網路包的報文如下圖。

遠端定位 —— IP 

我們先看看 IP 報文頭部的格式:

IP 包頭格式

在 IP 協議裡面需要有源地址 IP 和 目標地址 IP:

  • 源地址IP,即是客戶端輸出的 IP 地址;

  • 目標地址,即通過 DNS 域名解析得到的 Web 伺服器 IP。

因為 HTTP 是經過 TCP 傳輸的,所以在 IP 包頭的協議號,要填寫為 06(十六進位制),表示協議為 TCP。

兩點傳輸 —— MAC

生成了 IP 頭部之後,接下來網路包還需要在 IP 頭部的前面加上 MAC 頭部。

MAC 頭部是乙太網使用的頭部,它包含了接收方和傳送方的 MAC 地址等資訊。

MAC 包頭格式

在 MAC 包頭裡需要傳送方 MAC 地址和接收方目標 MAC 地址,用於兩點之間的傳輸。

一般在 TCP/IP 通訊裡,MAC 包頭的協議型別只使用:

  • 0800 :IP 協議

  • 0806 :ARP 協議

MAC 傳送方和接收方如何確認?

傳送方的 MAC 地址獲取就比較簡單了,MAC 地址是在網路卡生產時寫入到 ROM 裡的,只要將這個值讀取出來寫入到 MAC 頭部就可以了。

接收方的 MAC 地址就有點複雜了,只要告訴乙太網對方的 MAC 的地址,乙太網就會幫我們把包傳送過去,那麼很顯然這裡應該填寫對方的 MAC 地址。

所以先得搞清楚應該把包發給誰,這個只要查一下路由表就知道了。在路由表中找到相匹配的條目,然後把包發給 Gateway 列中的 IP 地址就可以了。

既然知道要發給誰,按如何獲取對方的 MAC 地址呢?

不知道對方 MAC 地址?不知道就喊唄。

此時就需要 ARP 協議幫我們找到路由器的 MAC 地址。

ARP 廣播

ARP 協議會在乙太網中以廣播的形式,對乙太網所有的裝置喊出:“這個 IP 地址是誰的?請把你的 MAC 地址告訴我”。

然後就會有人回答:“這個 IP 地址是我的,我的 MAC 地址是 XXXX”。

如果對方和自己處於同一個子網中,那麼通過上面的操作就可以得到對方的 MAC 地址。然後,我們將這個 MAC 地址寫入 MAC 頭部,MAC 頭部就完成了。

好像每次都要廣播獲取,這不是很麻煩嗎?

放心,在後續作業系統會把本次查詢結果放到一塊叫做 ARP 快取的記憶體空間留著以後用,不過快取的時間就幾分鐘。

也就是說,在發包時:

  • 先查詢 ARP 快取,如果其中已經儲存了對方的 MAC 地址,就不需要傳送 ARP 查詢,直接使用 ARP 快取中的地址。

  • 而當 ARP 快取中不存在對方 MAC 地址時,則傳送 ARP 廣播查詢。

至此,網路包的報文如下圖。

MAC 層報文

網路卡

IP 生成的網路包只是存放在記憶體中的一串二進位制數字資訊,沒有辦法直接傳送給對方。因此,我們需要將數字資訊轉換為電訊號,才能在網線上傳輸,也就是說,這才是真正的資料傳送過程。

負責執行這一操作的是網路卡,要控制網路卡還需要靠網路卡驅動程式。

網路卡驅動從 IP 模組獲取到包之後,會將其複製到網路卡內的快取區中,接著會其開頭加上報頭和起始幀分界符,在末尾加上用於檢測錯誤的幀校驗序列。

 

物理層資料包

  • 起始幀分界符是一個用來表示包起始位置的標記

  • 末尾的 FCS(幀校驗序列)用來檢查包傳輸過程是否有損壞

最後網路卡會將包轉為電訊號,通過網線傳送出去。

交換機

下面來看一下包是如何通過交換機的。交換機的設計是將網路包原樣轉發到目的地。交換機工作在 MAC 層,也稱為二層網路裝置。

交換機的包接收操作

首先,電訊號到達網線介面,交換機裡的模組進行接收,接下來交換機裡的模組將電訊號轉換為數字訊號。

然後通過包末尾的 FCS 校驗錯誤,如果沒問題則放到緩衝區。這部分操作基本和計算機的網路卡相同,但交換機的工作方式和網路卡不同。

計算機的網路卡本身具有 MAC 地址,並通過核對收到的包的接收方 MAC 地址判斷是不是發給自己的,如果不是發給自己的則丟棄;相對地,交換機的埠不核對接收方 MAC 地址,而是直接接收所有的包並存放到緩衝區中。因此,和網路卡不同,交換機的埠不具有 MAC 地址。

將包存入緩衝區後,接下來需要查詢一下這個包的接收方 MAC 地址是否已經在 MAC 地址表中有記錄了。

交換機的 MAC 地址表主要包含兩個資訊:

  • 一個是裝置的 MAC 地址,

  • 另一個是該裝置連線在交換機的哪個埠上。

舉個例子,如果收到的包的接收方 MAC 地址為 00-02-B3-1C-9C-F9,則與圖中表中的第 3 行匹配,根據埠列的資訊,可知這個地址位於 3 號埠上,然後就可以通過交換電路將包傳送到相應的埠了。

所以,交換機根據 MAC 地址表查詢 MAC 地址,然後將訊號傳送到相應的埠。

當 MAC 地址表找不到指定的 MAC 地址會怎麼樣?

地址表中找不到指定的 MAC 地址。這可能是因為具有該地址的裝置還沒有向交換機傳送過包,或者這個裝置一段時間沒有工作導致地址被從地址表中刪除了。

這種情況下,交換機無法判斷應該把包轉發到哪個埠,只能將包轉發到除了源埠之外的所有埠上,無論該裝置連線在哪個埠上都能收到這個包。

這樣做不會產生什麼問題,因為乙太網的設計本來就是將包傳送到整個網路的,然後只有相應的接收者才接收包,而其他裝置則會忽略這個包。

有人會說:“這樣做會傳送多餘的包,會不會造成網路擁塞呢?”

其實完全不用過於擔心,因為傳送了包之後目標裝置會作出響應,只要返回了響應包,交換機就可以將它的地址寫入 MAC 地址表,下次也就不需要把包發到所有埠了。

區域網中每秒可以傳輸上千個包,多出一兩個包並無大礙。

此外,如果接收方 MAC 地址是一個廣播地址,那麼交換機會將包傳送到除源埠之外的所有埠。

以下兩個屬於廣播地址:

  • MAC 地址中的 FF:FF:FF:FF:FF:FF

  • IP 地址中的 255.255.255.255

路由器

路由器與交換機的區別

網路包經過交換機之後,現在到達了路由器,並在此被轉發到下一個路由器或目標裝置。

這一步轉發的工作原理和交換機類似,也是通過查表判斷包轉發的目標。

不過在具體的操作過程上,路由器和交換機是有區別的。

  • 因為路由器是基於 IP 設計的,俗稱三層網路裝置,路由器的各個埠都具有 MAC 地址和 IP 地址;

  • 而交換機是基於乙太網設計的,俗稱二層網路裝置,交換機的埠不具有 MAC 地址。

路由器基本原理

路由器的埠具有 MAC 地址,因此它就能夠成為乙太網的傳送方和接收方;同時還具有 IP 地址,從這個意義上來說,它和計算機的網路卡是一樣的。

當轉發包時,首先路由器埠會接收發給自己的乙太網包,然後路由表查詢轉發目標,再由相應的埠作為傳送方將乙太網包傳送出去。

路由器的包接收操作

首先,電訊號到達網線介面部分,路由器中的模組會將電訊號轉成數字訊號,然後通過包末尾的 FCS 進行錯誤校驗。

如果沒問題則檢查 MAC 頭部中的接收方 MAC 地址,看看是不是發給自己的包,如果是就放到接收緩衝區中,否則就丟棄這個包。

總的來說,路由器的埠都具有 MAC 地址,只接收與自身地址匹配的包,遇到不匹配的包則直接丟棄。

查詢路由表確定輸出埠

完成包接收操作之後,路由器就會去掉包開頭的 MAC 頭部。

MAC 頭部的作用就是將包送達路由器,其中的接收方 MAC 地址就是路由器埠的 MAC 地址。因此,當包到達路由器之後,MAC 頭部的任務就完成了,於是 MAC 頭部就會被丟棄。

接下來,路由器會根據 MAC 頭部後方的 IP 頭部中的內容進行包的轉發操作。

轉發操作分為幾個階段,首先是查詢路由表判斷轉發目標。

 路由器轉發流程圖

舉個例子

假設地址為 10.10.1.101 的計算機要向地址為 192.168.1.100 的伺服器傳送一個包,這個包先到達圖中的路由器。

判斷轉發目標的第一步,就是根據包的接收方 IP 地址查詢路由表中的目標位址列,以找到相匹配的記錄。

路由匹配和前面講的一樣,每個條目的子網掩碼和 192.168.1.100 IP 做 & 與運算後,得到的結果與對應條目的目標地址進行匹配,如果匹配就會作為候選轉發目標,如果不匹配就繼續與下個條目進行路由匹配。

如第二條目的子網掩碼 255.255.255.0 與 192.168.1.100 IP 做 & 與運算後,得到結果是 192.168.1.0 ,這與第二條目的目標地址 192.168.1.0 匹配,該第二條目記錄就會被作為轉發目標。

實在找不到匹配路由時,就會選擇預設路由,路由表中子網掩碼為 0.0.0.0 的記錄表示「預設路由」。

路由器的傳送操作

接下來就會進入包的傳送操作。

首先,我們需要根據路由表的閘道器列判斷對方的地址。

  • 如果閘道器是一個 IP 地址,則這個IP 地址就是我們要轉發到的目標地址,還未抵達終點,還需繼續需要路由器轉發。

  • 如果閘道器為空,則 IP 頭部中的接收方 IP 地址就是要轉發到的目標地址,也是就終於找到 IP 包頭裡的目標地址了,說明已抵達終點。

知道對方的 IP 地址之後,接下來需要通過 ARP 協議根據 IP 地址查詢 MAC 地址,並將查詢的結果作為接收方 MAC 地址。路由器也有 ARP 快取,因此首先會在 ARP 快取中查詢,如果找不到則傳送 ARP 查詢請求。

接下來是傳送方 MAC 地址欄位,這裡填寫輸出埠的 MAC 地址。還有一個以太型別欄位,填寫 0080 (十六進位制)表示 IP 協議。

網路包完成後,接下來會將其轉換成電訊號並通過埠傳送出去。這一步的工作過程和計算機也是相同的。傳送出去的網路包會通過交換機到達下一個路由器。由於接收方 MAC 地址就是下一個路由器的地址,所以交換機會根據這一地址將包傳輸到下一個路由器。

接下來,下一個路由器會將包轉發給再下一個路由器,經過層層轉發之後,網路包就到達了最終的目的地。

不知你發現了沒有,在網路包傳輸的過程中,源 IP 和目標 IP 始終是不會變的,一直變化的是 MAC 地址,因為需要 MAC 地址在乙太網內進行兩個裝置之間的包傳輸。

資料包抵達了伺服器,伺服器肯定高興呀,正所謂有朋自遠方來,不亦樂乎?

拆包--伺服器和客戶端

伺服器高興的不得了,於是開始扒資料包的皮!就好像你收到快遞,能不興奮嗎?

資料包抵達伺服器後,伺服器會先扒開資料包的 MAC 頭部,檢視是否和伺服器自己的 MAC 地址符合,符合就將包收起來。

接著繼續扒開資料包的 IP 頭,發現 IP 地址符合,根據 IP 頭中協議項,知道自己上層是 TCP 協議。

於是,扒開 TCP 的頭,裡面有序列號,需要看一看這個序列包是不是我想要的,如果是就放入快取中然後返回一個 ACK,如果不是就丟棄。TCP頭部裡面還有埠號, HTTP 的伺服器正在監聽這個埠號。

於是,伺服器自然就知道是 HTTP 程式想要這個包,於是就將包發給 HTTP 程式。

伺服器的 HTTP 程式看到,原來這個請求是要訪問一個頁面,於是就把這個網頁封裝在 

HTTP 響應報文裡。

HTTP 響應報文也需要穿上 TCP、IP、MAC 頭部,不過這次是源地址是伺服器 IP 地址,目的地址是客戶端 IP 地址。

穿好頭部衣服後,從網路卡出去,交由交換機轉發到出城的路由器,路由器就把響應資料包發到了下一個路由器,就這樣跳啊跳。

最後跳到了客戶端的城門把手的路由器,路由器扒開 IP 頭部發現是要找城內的人,於是把包發給了城內的交換機,再由交換機轉發到客戶端。

客戶端收到了伺服器的響應資料包後,同樣也非常的高興,客戶能拆快遞了!

於是,客戶端開始扒皮,把收到的資料包的皮扒剩 HTTP 響應報文後,交給瀏覽器去渲染頁面,一份特別的資料包快遞,就這樣顯示出來了!

最後,客戶端要離開了,向伺服器發起了 TCP 四次揮手,至此雙方的連線就斷開了。

其他

閘道器和路由的區別

簡單版

‘閘道器’一個大概念,不具體特指一類產品,只要連線兩個不同的網路的裝置都可以叫閘道器;而‘路由器’麼一般特指能夠實現路由尋找和轉發的特定類產品,路由器很顯然能夠實現閘道器的功能。 

詳細版

閘道器(Gateway)就是一個網路連線到另一個網路的“關口”。按照不同的分類標準,閘道器也有很多種。TCP/IP 協議裡的閘道器是最常用的,在這裡我們所講的“閘道器”均指 TCP/IP 協議下的閘道器。        

那麼閘道器到底是什麼呢?閘道器實質上是一個網路通向其他網路的IP地址。比如有網路 A 和網路 B,網路A的IP地址範圍為 “192.168.1.1~192. 168.1.254”,子網掩碼為 255.255.255.0;網路B的IP地址範圍為 “192.168.2.1~192.168.2.254”,子網掩碼為 255.255.255.0。在沒有路由器的情況下,兩個網路之間是不能進行 TCP/IP 通訊的,即使是兩個網路連線在同一臺交換機(或集線器)上,TCP/IP 協議也會根據子網掩碼(255.255.255.0)判定兩個網路中的主機處在不同的網路裡。而要實現這兩個網路之間的通訊,則必須通過閘道器。如果網路A中的主機發現資料包的目的主機不在本地網路中,就把資料包轉發給它自己的閘道器,再由閘道器轉發給網路B的閘道器,網路 B 的閘道器再轉發給網路B的某個主機。網路B向網路A轉發資料包的過程也是如此。        

所以說,只有設定好閘道器的 IP 地址,TCP/IP 協議才能實現不同網路之間的相互通訊。那麼這個 IP 地址是哪臺機器的 IP 地址呢?閘道器的IP地址是具有路由功能的裝置的 IP 地址,具有路由功能的裝置有路由器、啟用了路由協議的伺服器(實質上相當於一臺路由器)、代理伺服器(也相當於一臺路由器)。       

路由器(Router)是一種負責尋徑的網路裝置,它在互連網路中從多條路徑中尋找通訊量最少的一條網路路徑提供給使用者通訊。路由器用於連線多個邏輯上分開的網路。對使用者提供最佳的通訊路徑,路由器利用路由表為資料傳輸選擇路徑,路由表包含網路地址以及各地址之間距離的清單,路由器利用路由表查詢資料包從當前位置到目的地址的正確路徑。路由器使用最少時間演算法或最優路徑演算法來調整資訊傳遞的路徑,如果某一網路路徑發生故障或堵塞,路由器可選擇另一條路徑,以保證資訊的正常傳輸。路由器可進行資料格式的轉換,成為不同協議之間網路互連的必要裝置。  

集線器(HUB)  

集線器就是將網線集中到一起的機器,也就是多臺主機和裝置的聯結器。集線器的主要功能以擴大網路的傳輸距離,是中繼器的一種形式,區別在於集線器能夠提供多埠服務,也稱為多口中繼器。集線器在 OSI/RM 中的物理層。集線器的基本功能是資訊分發,它把一個埠接收的所有訊號向所有埠分發出去。一些集線器在分發之前將弱訊號重新生成,一些集線器整理訊號的時序以提供所有埠間的同步資料通訊。

集線器實際就是一種多埠的中繼器。集線器一般有 4、8、16、24、32 等數量的 RJ45 介面,通過這些介面,集線器便能為相應數量的電腦完成“中繼”功能(將已經衰減得不完整的訊號經過整理,重新產生出完整的訊號再繼續傳送)。由於它在網路中處於一種“中心”位置,因此集線器也叫做 “HUB”。 

集線器的工作原理很簡單,比如有一個具備8個埠的集線器,共連線了 8 臺電腦。集線器處於網路的“中心”,通過集線器對訊號進行轉發,8 臺電腦之間可以互連互通。具體通訊過程是這樣的:假如計算機1要將一條資訊傳送給計算機8,當計算機1的網路卡將資訊通過雙絞線送到集線器上時,集線器並不會直接將資訊送給計算機 8,它會將資訊進行“廣播”——將資訊同時傳送給 8 個埠,當 8 個埠上的計算機接收到這條廣播資訊時,會對資訊進行檢查,如果發現該資訊是發給自己的,則接收,否則不予理睬。由於該資訊是計算機1發給計算機 8的,因此最終計算機 8 會接收該資訊,而其它7臺電腦看完資訊後,會因為資訊不是自己的而不接收該資訊。

交換機(Switch)

交換機是集線器的升級換代產品,外形上和集線器沒什麼分別,是一種在通訊系統中自動完成資訊交換功能的裝置,用途和 HUB 一樣也是連線組網之用,但是它具有比集線器更強大的功能。

交換機也叫交換式集線器,它通過對資訊進行重新生成,並經過內部處理後轉發至指定埠,具備自動定址能力和交換作用,由於交換機根據所傳遞資訊包的目的地址,將每一資訊包獨立地從源埠送至目的埠,避免了和其他埠發生碰撞。廣義的交換機就是一種在通訊系統中完成資訊交換功能的裝置。  

在計算機網路系統中,交換機是針對共享工作模式的弱點而推出的。集線器是採用共享工作模式的代表,如果把集線器比作一個郵遞員,那麼這個郵遞員是個不認識字的“傻瓜”——要他去送信,他不知道直接根據信件上的地址將信件送給收信人,只會拿著信分發給所有的人,然後讓接收的人根據地址資訊來判斷是不是自己的!而交換機則是一個“聰明”的郵遞員——交換機擁有一條高頻寬的背部匯流排和內部交換矩陣。交換機的所有的埠都掛接在這條背部匯流排上,當控制電路收到資料包以後,處理埠會查詢記憶體中的地址對照表以確定目的MAC(網路卡的硬體地址)的 NIC(網路卡)掛接在哪個埠上,通過內部交換矩陣迅速將資料包傳送到目的埠。目的 MAC 若不存在,交換機才廣播到所有的埠,接收埠回應後交換機會“學習”新的地址,並把它新增入內部地址表中。 

 總結

  • 應用層到網路卡之前,其實都是在為傳送資料前做準備,比如新增各種頭部資訊,MAC,IP 地址;

  • 網路傳輸過程主要是通過 交換機-路由器-...-路由器 最終將資料傳到對方伺服器上。

  • 伺服器和客戶端都要經歷新增和刪除頭部的過程,交換機是通過 MAC 傳遞資料的,路由器是通過 MAC 和 IP 傳遞資料的。

本文也只是把請求的流程給做了講解,但是真的在網路傳輸過程中,還涉及到加密,快取,負載均衡,資料傳輸等各種過程。

到這裡,才發現想要把一個網路請求完整的理解,還是需要花很多功夫的。

  

參考文章

從你輸入一個網址,到網頁顯示,其間發生了什麼?

相關文章