網路協定之路由協定的詳細介紹(範例講解)
這篇文章帶給大家的內容是關於網路協議之路由協議的詳細介紹(範例講解),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
前面例子中,我們都是在一個區域網路內折騰。今天就讓我們擴大範圍,在多個區域網路甚至到廣闊的網路世界中遨遊,看看這中間會發生什麼。
這個過程中,跨網關存取是我們要了解的第一個內容。
跨網關存取
當我們要了解跨網關存取時,就牽扯到 MAC 位址和 IP 位址的變化,因此,我們先來看下 MAC 頭和 IP 頭的細節。
MAC 頭和IP 頭的細節
#如圖,在MAC 頭裡,先是目標MAC 位址,然後是來源MAC 位址,最後是協定類型。
在 IP 頭裡,最重要的就是來源 IP 位址和目標 IP 位址。除此之外,還有版本號,也就是我們常說的IPv4 和IPv6、服務類型TOS(表示封包優先權)、TTL(封包生存週期)以及識別協定(TCP 和UDP)
當我們造訪部落格園區時,經過的第一個網關應該就是我們設定的預設閘道。當本機存取預設閘道時,還是走區域網路內部存取的步驟:
將來源位址和目標IP 位址放入IP 頭;
透過ARP 協定取得網關的MAC 位址;
將來源MAC 位址和網關的MAC 位址放入MAC 頭中,傳送給網關。
而我們的網關,一般就是指家裡的路由器,是一個三層轉送的設備。它會把 MAC 頭和 IP 頭都取下來,然後根據裡面的內容,看看接下來把封包轉送到哪裡。
很多情況下,人們把網關叫做路由器。其實不准備,用這個比喻應該更為恰當些:
路由器是一台設備,它有五個網口或網路卡,相當於有五隻手,分別連著五個區域網路。每隻手的 IP 位址都和區域網路的 IP 位址有著相同的網段,每隻手都是它握住的那個區域網路的網關。
任何一個想發送到其他區域網路的包,都會到達其中一隻手,被拿進來,拿下MAC 頭和IP 頭,然後根據自己的路由演算法,選擇另一隻手,加上IP 頭和MAC 頭,然後扔出去。
注意,在上面這個過程中,有出現路由演算法。接下來,我們就來認識它。
路由演算法
路由演算法,又稱選路演算法,是提高路由協定功能,盡量減少路由時所帶來的開銷的演算法。
路由演算法可以根據多個特性來區分,找到到達目的地的最佳路由。
路由演算法的區分點有很多,有
靜態與動態
-
單路徑與多路徑
平坦與分層
主機智慧與路由器智慧
網域內與網域間
連結狀態與距離向量
這裡主要介紹靜態與動態## 這裡主要介紹
靜態與動態#路由演算法。
靜態路由
靜態路由演算法,實質上是由網關配置好的映射表。
我們家裡的路由器,可能會有這樣的路由配置
訪問百度,從3 號口出去,下一跳是IP3。
類似上述這樣的規則就是靜態路由,依照一定的語法保存在路由器裡。
每當要選擇從哪個口拋出去的時候,就一條一條的匹配規則,找到符合的規則,就按規則辦事,從指定口拋出去,找下一跳 IP。
過網關的「變」與「不變」
之前我們了解到,MAC 位址是一個區域網路內才有效的位址。因此,MAC 位址只要過網關,就一定會改變。而 IP 位址在過網關後 ,就不一定會改變了。 經過網關 A 後,如果IP 位址沒有改變,那 A 就是轉送網關,否則,就是
NAT網關。
轉送網關
如上圖,伺服器A 要存取伺服器B,要經過流程:
#1)伺服器A 到網關A- 檢查B 的網段,發現不在同一個網段,因此發給網關
- 由於網關的IP 位址是已經設定好了,因此發送ARP 取得網關的MAC 位址
- ###傳送包###
而最後傳送套件的內容主要有:
來源MAC:伺服器A 的MAC
模板MAC:192.168.1.1 網關的MAC
源IP:192.168.1.101
目標IP:192.168.4.101
封包到達192.168.1.1 這個網口後,網口發現MAC 位址是它的,就將包包收進來,然後開始「思考」往哪裡轉送。
這時候,路由器A 中設定了規則A1:
要存取192.168.4.0/24,就從192.168.56.1 這個網口出去,下一跳是192.168.56.2
2)網關A 到網關B
於是,路由器A 匹配了A1,要從192.168.56.1 這個口發出去,發給192.168.56.2。於是,又開始了這個過程:
檢查B 的網段,發現在同一個網段, ARP 取得MAC 位址
- ##發送套件
- #來源MAC:192.168.56.1 的MAC
- #模板MAC:192.168.56.2 的MAC
- 來源IP:192.168.1.101
- 目標IP:192.168.4.101 #目標IP:192.168.4.101
#目標IP:192.168.4.101
## 封包到達192 .168.56.2 網口,網口發現MAC 位址是它的,就將封包收進來,然後去檢查路由規則。路由器B 設定以下規則B1:
想存取192.168.4.0/24,就從192.168.4.1 而路由器B 發現,它的右網口就是目標位址網段的,因此就沒有下一跳了。3)網關 B 到 伺服器 B
- 路由器 B 符合上 B1。從 192.168.4.1 出口,發給 192.168.4.101。封包內容:
- 來源MAC:192.168.4.1 的MAC
- 範本MAC:192.168.4.101 的MAC
# 伺服器B 收到封包,發現MAC 位址是它的,就把包包收進來。 透過上面的過程可以看出,每到一個新的區域網, MAC 位址都是要變的,而 IP 位址則都不變。在 IP 頭裡面,不會儲存任何網關的 IP 位址。 而我們說的下一跳,
就是某個 IP 要將這個 IP 位址轉換為 MAC 放入 MAC 頭。 NAT 網關
NAT 網關,也就是 Network Address Translation。
由於各個區域網路都有各自的網段,很容易出現 IP 衝突的情況。如上圖,美國伺服器A 的IP 位址和法國伺服器B 的IP 位址都是192.168.1.101/24,從IP 上看,好像是自己訪問自己,但實際上從美國的192.168.1.101 訪問法國的192.168.1.101 。 如何解決這個問題呢?既然區域網路之間沒有商量好 IP 分配,各管各的,那到國際上,也就是中間的區域網路裡面,就需要使用另外的位址,就像出國後,我們要改用護照一樣。
首先,目標伺服器B 在國際上要有一個國際的身份
,我們給它一個190.168.56.2.在網關B 上,我們記下來,國際身份192.168.56.2 對應國內身份192.168.1.101.凡是要訪問192.168.56.2 的,網關都要轉成192.168.1.101。- 於是,來源伺服器 A 要存取目標伺服器 B,目標位址就變成國際 IP 位址 192.168.56.2。流程如下: 1)來源伺服器A 發封包到網關A
- 檢查伺服器B IP,不在同一網段
- 傳送包
- 封包的內容是這樣的:
- 來源MAC:伺服器A 的MAC
- 目標MAC:192.168.1.1 這個網路埠的MAC
在路由器 A 中設定了規則:
想存取 192.168.56.2/24,就從 192.168.56.1 網口發出去,發給 192.168.56.2,沒有下一跳。
- 由於路由器的右網口(192.168.56.1) IP 位址和目標 IP 位址在同一網段,因此沒有下一跳。
- 2)網關 A 到網關 B
- 當網路套件傳送到中間的區域網路時,伺服器 A 也需要有個國際身分。因此,來源IP 位址192.168.1.101 要改成192.168.56.1,所以封包的內容是:
- 來源MAC:192.168.56.1 的MAC###來源MAC:192.168.56.1 的MAC######## ####目標MAC:192.168.56.2 的MAC############來源IP:192.168.56.1###
目標 IP:192.168.56.2
套件到達 192.168.56.2 這個網口後,發現 MAC 一致,就將包包收進來。
而路由器 B 是 NAT 網關,它上面配置了,國際身分 192.168.56.2 對應國內的 192.168.1.101,於是目標位址改為 192.168.1.101。
同樣的,路由器 B 中配置了規則:
想訪問 192.168.1.101,就從 192.168.1.1 網口出去,沒有下一跳。
於是,封包就從 192.168.1.1 這個網口發給 192.168.1.101。
3)網關B 到伺服器B
封包從192.168.1.1 網口發出後,同樣經過這些步驟:
#檢查伺服器B 的IP,在同一網段
ARP 取得伺服器B 的MAC 位址
傳送包
- 來源MAC:192.168.1.1 的MAC
- 目標MAC:192.168 .1.101 的MAC
- 來源IP:192.168.56.1
- 目標IP:192.168.1.101
#1)基本想法
基於Bellman-Ford 演算法。每個路由器都保存一個路由表,包含多行,每行對應網路中的一個路由器,每一行包含兩部分信息,一個是要到目標路由器,從哪條線出去,另一個是到目標路由器的距離2)有問題
a.好消息傳得區塊,壞消息傳的慢。
新加入的路由器能夠很快的新路由器訊息廣播出去。但是如果一個路由器掛了,掛的訊息沒有廣播。每個經過這個宕機節點的路由器,無法得知該節點一宕機,而是試圖通過其他的路徑訪問,直到試過了所有的路徑,才發現這個路由器已經宕機了。 範例:b.每次傳送訊息,要傳送整個全域路由表
上面的兩個問題,限制了距離向量路由的網路規模,僅適用於小型網路(小於15 跳)。
連結狀態路由演算法1)基本想法
#基於Dijkstra 演算法。當一個路由器加入網路是,首先是發現鄰居,給鄰居說 hello,鄰居都回覆。然後計算和鄰居的距離,發送一個 echo,要求馬上返回,除以 2 就是距離。接著將自己和鄰居之間的鏈路狀態包廣播出去,發送到整個網路的每個路由器。 這種演算法中,每個路由器都能在自己本地建立一個完整的圖,然後針對這個圖使用 Dijkstra 演算法,找到兩點之間的最短路徑。 不像距離向量路由協定那樣,更新時會傳送整個路由表。鏈路狀態路由協定只廣播更新的或改變的網路拓撲,這使得更新資訊更小,節省了寬頻和 CPU 使用率。而且一旦一個路由器掛了,它的鄰居就會廣播這個訊息,可以讓壞消息迅速收斂。 動態路由協定基於連結狀態路由演算法的OSPF
#找到最短路徑。當存在多個最短路徑時,可以在這多個路徑中進行負載平衡,這常常被稱為等價路由。
等價路由不僅可以用來分攤流量,還可以提高容錯率,當一條路徑不通時,還可以經由另一條路到達目的地。基於距離向量路由演算法的BGP
每個資料中心都有自己的路由配置。例如,哪些外部 IP 可以讓內部知曉,哪些內部 IP 可以讓外部知曉,哪些可以通過,哪些不能通過。
因此,在各個資料中心進行互動時,需要一種協議,透過這種協議,可以知道相鄰資料中心的路由配置,從而找到資料中心之間最好的路由。
BGP 協定就是這樣的協定。它不著眼於發現和計算路由,而在於控制路由的傳播和選擇最好的路由。
總結
封包要離開本區域網,就要經過網關,網關就是路由器的一個網口;
路由器是一個三層設備,理由有如何尋找下一跳的規則;
經過路由器之後的MAC 頭肯定會改變。如果IP 不變,就是轉送網關,否則就是NAT網關;
#路由分靜態路由和動態路由,動態路由可以設定複雜的策略路由,控制轉送策略;
動態路由主流演算法有兩種,距離向量演算法和連結狀態演算法。基於兩種演算法產生兩種協議,BGP 協定和 OSPF 協定。
以上是網路協定之路由協定的詳細介紹(範例講解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
