在前面的討論中,我們已經詳細介紹了計算機網路中的物理層、傳輸層和網路層以及應用層的工作原理。這些層次組成了一個完整的網路架構,確保了資料的傳輸和交流。在今天的討論中,我們將進一步深入探討封包從計算機發出後的一系列流程,這涉及到網路裝置中的交換機和路由器在其中扮演的重要角色。
現在我們來詳細瞭解一下網路包是如何通過交換機進行傳輸的。交換機的設計理念是將網路包以原始的形式直接轉發到目標裝置。作為一個二層網路裝置,交換機在MAC層進行工作。
首先,當電訊號到達交換機的網線介面時,交換機內的模組會進行接收操作,將電訊號轉換為數位訊號。
接下來,通過對包末尾的FCS(Frame Check Sequence)校驗進行錯誤檢查,如果校驗通過,則將該包放入緩衝區。這一部分操作與計算機的網路卡類似,但是交換機的工作方式與網路卡有一些不同之處。
加長優化語句:計算機的網路卡本身具有唯一的MAC地址,並通過核對收到的封包的目的MAC地址來判斷是否是發給自己的。如果目的MAC地址與自身網路卡的MAC地址匹配,那麼網路卡就會接收並處理這個封包,否則就會丟棄。而與網路卡不同的是,交換機的埠並不會核對接收方的MAC地址,它直接接收所有的封包,並將它們存放到緩衝區中。
在封包存入緩衝區後,交換機會查詢MAC地址表,以查詢該封包的接收方MAC地址是否已經在表中有記錄。交換機的MAC地址表主要包含兩個重要資訊:裝置的MAC地址和該裝置所連線在交換機的哪個埠上。通過這個表,交換機能夠快速地確定封包應該轉發到哪個埠,從而實現資料的高效傳輸和網路的正常執行。
交換機內部擁有一張稱為MAC地址表的對映表,它記錄著各個裝置的MAC地址與連線的網線埠之間的對應關係。當交換機接收到一個封包時,它會將該封包中的源MAC地址和接收到該封包的埠號寫入MAC地址表中。通過這樣的記錄,交換機就能夠根據MAC地址迅速判斷出該裝置連線在哪個埠上。
讓我們舉一個例子來說明交換機根據MAC地址表進行轉發的過程。假設我們收到一個封包,其中的目的MAC地址是00-02-B3-1C-9C-F9。我們查詢MAC地址表,發現與表中的第3行的MAC地址匹配。根據該行的埠列資訊,我們知道這個地址連線在3號埠上。現在,交換機就可以通過內部的交換電路將這個封包傳送到與3號埠相連的目標裝置上。
網路包經過交換機後,現在到達了路由器,並在此被轉發到下一個路由器或目標裝置。這一步轉發的工作原理與交換機類似,同樣是通過查詢表來判斷包的轉發目標。然而,路由器和交換機在具體的操作過程上有一些區別。首先,路由器是基於IP設計的,被稱為三層網路裝置,它的各個埠都具有MAC地址和IP地址。而交換機是基於乙太網設計的,被稱為二層網路裝置,它的埠不具有MAC地址。因此,在路由器中,封包的轉發是根據IP地址進行的,而在交換機中,封包的轉發是根據MAC地址進行的。在轉發過程中,路由器會根據封包的目標IP地址查詢路由表,確定下一跳的目標地址,並將封包轉發給相應的路由器介面。這樣,路由器能夠將封包從一個網路轉發到另一個網路。通過路由器和交換機的協同工作,網路中的資料能夠高效地進行轉發和交換,實現了網路的通訊和連線。
路由器的埠具有MAC地址,因此它可以作為乙太網的傳送方和接收方。與此同時,路由器也具有IP地址,這使得它在某種程度上與計算機的網路卡相似。
在轉發包時,路由器的埠首先會接收傳送給自己的乙太網包。然後,路由器會查詢路由表,確定轉發目標,並通過相應的埠作為傳送方將乙太網包傳送出去。這個過程類似於交換機的工作原理,但是與交換機不同的是,路由器不僅僅根據MAC地址來進行轉發,還會根據IP地址來進行路由決策。
首先,當電訊號到達網線介面部分時,路由器中的模組會將電訊號轉換成數位訊號,並通過包末尾的幀校驗序列(FCS)進行錯誤校驗,以確保接收到的封包的完整性和準確性。
接下來,路由器會檢查封包的MAC頭部,檢視接收方MAC地址是否與自身匹配。如果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協定來查詢對應的MAC地址,並將查詢結果作為接收方的MAC地址。路由器也有自己的ARP快取,因此首先會在ARP快取中查詢對應的MAC地址。如果在快取中找不到,則會傳送ARP查詢請求。接下來是傳送方的MAC位址列位,這裡會填寫輸出埠的MAC地址。還有一個以太型別欄位,會填寫0080(十六進位制)來表示IP協定。
網路包傳送完成後,將被轉換成電訊號,並通過埠傳送出去。這個過程與計算機的工作方式非常相似。
傳送出去的網路包會經過交換機傳輸,以達到下一個路由器。由於接收方的MAC地址就是下一個路由器的地址,因此交換機會根據這個MAC地址將包傳輸到下一個路由器。
接下來,下一個路由器會將包轉發給再下一個路由器,通過層層轉發,網路包最終到達目的地。
你可能已經注意到,在網路包傳輸的過程中,源IP和目標IP始終保持不變,而MAC地址是不斷變化的。這是因為在乙太網內進行裝置之間的包傳輸時,需要使用MAC地址來識別和定位裝置。
當封包到達伺服器時,伺服器會感到非常高興,就像迎接遠方朋友一樣,充滿了喜悅的心情。它迫不及待地開始解析封包,就像你收到快遞一樣,難以抑制內心的興奮。
當封包抵達伺服器後,伺服器首先會扒開封包的MAC頭部,檢查是否與伺服器自身的MAC地址匹配,如果匹配,伺服器會接收該封包。接著,伺服器會繼續扒開封包的IP頭部,發現IP地址與伺服器的IP地址匹配,然後根據IP頭部中的協定欄位,確定上層協定是TCP。
伺服器會繼續扒開TCP頭部,其中包含了序列號,伺服器需要確認這個序列號是否符合預期,如果是,伺服器會將該封包放入快取,並行送一個ACK確認。如果不符合預期,則伺服器會丟棄該封包。TCP頭部還包含埠號,HTTP伺服器正在監聽該埠號,因此伺服器知道該封包是由HTTP程序需要的,於是將封包傳遞給HTTP程序。
伺服器的HTTP程序接收到封包後,發現這個請求是用於存取一個網頁,於是將該網頁封裝在HTTP響應報文中。HTTP響應報文需要經過TCP、IP和MAC頭部的封裝,源地址為伺服器的IP地址,目的地址為使用者端的IP地址。完成頭部的封裝後,封包從伺服器的網路卡出發,通過交換機轉發到離開城市的路由器。路由器將響應封包轉發給下一個路由器,如此往復進行直到到達使用者端的城門把手的路由器。該路由器扒開IP頭部後發現要將封包交給城內的人,於是將封包傳送到城內的交換機,再由交換機轉發到使用者端。
使用者端收到伺服器的響應封包後,同樣感到非常高興,就像客戶收到快遞一樣。於是,使用者端開始扒開封包的"皮",將接收到的封包的"皮"扒剩下HTTP響應報文,然後將其交給瀏覽器進行頁面渲染,最終展示出一份特別的封包快遞。
最後,使用者端準備離開,向伺服器發起TCP四次揮手,雙方的連線隨之斷開。這樣,整個過程就完美地結束了。
計算機網路中的交換機和路由器扮演了重要的角色,確保了資料的高效傳輸和網路的正常執行。交換機在MAC層進行工作,將封包根據目的MAC地址轉發到相應的埠,利用MAC地址錶快速確定封包的接收方。而路由器是基於IP設計的三層網路裝置,根據IP地址進行轉發決策,將封包從一個網路轉發到另一個網路。最後,封包經過伺服器和使用者端的互動,實現了Web頁面的展示。