網絡之路由器工作原理

網絡

Q:網絡是什麼?
網絡是實現在各終端設備進行通信的數據載體;終端應用通過網絡實現了資源的共享。

網絡三元素
OSI定義了網絡的網絡通信的三元組:

  • 終端 :包含PC Printer 等。
  • 中間系統:主要是網絡設備路由器(Router),交換機(Switch)。
  • 傳輸介質:包括有線線纜,雙絞線,光纖 ,NIC網卡,無線接入點(AP)。

網絡設備分類

一個網絡中,網絡設備可以分爲兩大類:

  • A類:OSI 2層或2層以下的設備, 交換機(Switch),集線器(Hub)。
    • 2層設備屬於傻瓜型設備,接上電,終端連接上設備接口就能通信。
    • 使用交換機(Switch)的接口,連接終端設備形成一個星型網絡。
    • 使用集線器(Hub)的接口,連接終端設備形成一個總線型網絡。
  • B類:OSI 3層或3層以上的設備,路由器(Router),雙層路由(MLS),防火牆(Firewall),PC
    • 終端通過3層設備網絡接口進行通信,除了通電,還得必須有一個全球唯一3層身份標識,就是IP地址。

IP地址初探

現在所使用的IP地址可以分爲兩類:

  • IPV4地址
  • IPV6地址

現在大多數設備上所使用的都是IPV4地址。IPV6是面向未來網絡所使用IP地址。

IPV4地址

IPV4地址,4個十進制數採用點分十進制表示法,表示一個網絡地址,X.X.X.X,每一個X佔8bit,一共佔32bit, 例如192.168.0.1

32bit位分爲高位和低位:

  • 高位表示網絡位 192.168.0
  • 低位表示主機位 1

在同一個網絡中,所有主機的IP地址,網絡位是相同的。

子網掩碼:表示計算機網絡中的高多少位表示網絡位,低多少位表示主機位。

網關:一個網絡的出口。

網關

一個網絡中的所有終端設備,可以做網絡內的通信,但是往往只做網絡內的通信是不夠的,還要進行網絡間通信;比如去訪問Google,baidu,是在訪問其他網絡的服務器,你的PC肯定沒和Google,baidu的服務器在同一個網絡中。要訪問Google,baidu,得把先數據發出本地網絡,這個網絡數據的出口就是一個網關。

網關Gateway): 一個網絡的出口,該網絡的出口節點,就是本網絡的網關。

早期網關就是指路由器(Router),路由器(Router)的每個接口都可以分配一個網絡。
路由器(Router)連接一個網絡的接口,就是該網絡內所有節點的出口。該網絡內任意主機想要訪問其他網絡,都必須先把數據發給路由器(Router),然後路由器(Router)查錶轉發到其他網絡。

在這裏插入圖片描述
PC1網絡配置如下:

  • IP地址:10.1.1.1
  • 子網掩碼:255.255.255.0
  • 網關:10.1.1.254

子網掩碼上全爲1的位表示網絡位,全爲0的位表示主機位
對於PC1來說高24位表示網絡位,低8位表示主機位

255轉成二進制是11111111

PC1所在網絡可用的IP地址

  • 網段中包含的IP地址範圍:10.1.1.0 - 10.1.1.255
  • 第一個IP地址10.1.1.0表示網絡號,最後一個IP地址10.1.1.255表示廣播號,不能分配給主機作爲IP地址使用。
  • 可用的IP地址範圍是 10.1.1.1 - 10.1.1.254

網絡號10.1.1.0 主機位全爲 0IPV4地址表示網絡號。用來標識這個網絡本身
廣播號10.1.1.255 主機位全爲 1IPV4地址表示廣播號。用來標識這個網絡內的所有節點。

IPV4中一般會把網段中最後一個可用地址,也就是10.1.1.254作爲網關地址。

網關檢測工具PING

PING 命令可以檢測節點之間的3層往返連通性。如果節點的3層連接可以PING通,則說明網絡通信沒沒問題,如果有問題可能是應用程序的問題。
界定一個網絡問題是系統工程師,還是網絡工程師去解決的最好的方法就是PING,PING一下如果能通網絡工程師就可以甩鍋了。

PCA PING PCB

  1. PCA 發送Echo Request 回聲請求
  2. PCB 應答Echo Reply 回聲應答

PING 請求是以數據幀Frame的形式發送的,格式類似於這樣"Ethernet2|IPV4|ICMP|FCS" 。使用的協議是ICMP

ping 192.168.1.1
正在 Ping 192.168.1.1 具有 32 字節的數據:
來自 192.168.1.1 的回覆: 字節=32 時間=11ms TTL=64
來自 192.168.1.1 的回覆: 字節=32 時間=1ms TTL=64
來自 192.168.1.1 的回覆: 字節=32 時間=3ms TTL=64
來自 192.168.1.1 的回覆: 字節=32 時間=1ms TTL=64
192.168.1.1 的 Ping 統計信息:
數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒爲單位):
最短 = 1ms,最長 = 11ms,平均 = 4ms

網絡通信的前提

組建一個網絡,不是有交換機,路由器,連接上PC,這個網絡就能通信,想要網絡通的話,還得有兩個前提條件:

  1. 需要給這個網絡上的所有節點,分配IP地址。
  2. 而且還得保證所有節點的IP地址不能衝突;並且在同一網絡內,所有節點IP地址的網絡位必須相同,主機位要彼此不同。

路由器(Router)的職責

在組網的時候,一般不會把路由器(Router),作爲接入設備。原因是什麼呢?

  1. 路由器(Router)接口真的是很少。相比集線器,交換機,接口密度非常低。
  2. 路由器(Router)的每一個接口,都是一個節點,只連線是不能通的,必須配置IP地址。
  3. 路由器(Router)的每個接口都要分割一個網絡,直接拿路由器接口來連接計算機入網的話,那每臺PC都屬於一個獨立的網絡。兩臺PC不在同一個網絡,那有些需要在同一個網絡內通信的應用就沒有辦法正常工作了。
  4. 如果將Router作爲接入設備部署,還會導致大量數據IP浪費。

正是基於以上原因,路由器一般不做接入設備,只負責網絡間通信,互聯多個網絡;作爲網絡間中心設備負責數據轉發。

路由器(Router)轉發數據

路由器(Router)收到一個數據包,發現是發送給網絡內的某個設備的,那麼路由器(Router)就會直接丟棄數據包,不做轉發。路由器(Router)只關心網絡間的數據通信,只會做網絡間的數據轉發。

路由器(Router)既然負責網絡間的數據轉發,肯定得知道數據要發給誰對吧。知道要發給誰之後,再根據接收者所在網絡路徑信息,沿着這個自由路徑,把數據發走,這樣端到端的通信就可以通。那麼問題來了。

Q:路由器收到一個數據,怎樣才能確定將數據發送到那個網絡的那臺主機呢?

兩個網絡中的主機進行通信,主機發送的數據包含兩組源目地址信息:

  • 源目MAC地址
  • 源目IP地址

爲什麼通信需要兩種地址標識呢?它們又有什麼區別呢?

MACIP都是主機身份標識。作用卻不一樣。

MAC和IP本質區別:

  • MAC地址: MAC地址作爲一個2層地址,唯一作用就是通過MAC地址,在網絡中區別不同節點;不能標識一個節點屬於那個網絡。
  • IP地址:IP地址不僅能在一個網絡內來彼此區分節點,而且還能在整個Internet互聯網上標識一個節點;告訴因特網上的其他節點,我在那個網絡中。

知道了MACIP的作用,那麼路由器收到數據幀以後,到底是根據那種地址,來確定數據發給誰的呢?

一個節點通過一根網線連接到一個以太網,接口標識符,既有 IP地址,又有MAC地址。
在這裏插入圖片描述
PC1PC2進行網絡內通信,數據幀頭包含2層源目MAC地址,3層源目IP地址。

  • IP地址:PC1IP地址。
  • 目的IP地址:PC2IP地址。
  • MAC地址:PC1MAC地址。
  • 目的MAC地址:PC2的MAC地址。

很好理解,那麼PC2PC3進行網絡間通信,數據幀頭目的MAC地址是PC3MAC地址嗎?
在這裏插入圖片描述
在兩個網絡中,A網絡中的PC2MAC地址,對於B網絡中PC3MAC地址完全沒有意義。暫且不說PC2PC3發送消息,源目MAC地址到底是什麼。最起碼要有一個概念:PC2想要在網絡A中發送數據,不管你想要把數據發給誰,源目MAC都應該是A網絡內的某個節點地址。

無論是網絡間通信,還是網絡內通信。源目IP標識的都是通信雙方,但是源目MAC永遠都只能使用該網絡內的節點地址。

PC2PC3各屬不同網絡,因此PC2發送數據到PC3目的MAC地址肯定不是PC3MAC地址。

Q: 路由器(Router)收到數據幀以後,到底是根據目的IP,還是目的MAC,來確定數據包的最終去向?

根據以上的分析,顯然是IP地址

以太網規定,網絡中的任何節點,使用任何應用,產生任何數據,不管是什麼內容,如果想發送數據,就必須添加一個2層幀頭和幀尾,進行數據封裝。

任何一個網絡節點,不管是PC還是路由器(Router),收到一個數據幀後,只有確定這個數據幀是要發給自己的時候,纔有權利解封裝,拿到3IP數據報。

Q:一個節點什麼情況下才能確定收到的數據幀是自己的呢?

很簡單,看以太網(Ethernet)幀頭的目的MAC地址。如果這個目的MAC就是接收端接口MAC地址,那麼這個數據就是發給我主機這個接口的,沒必要再看幀頭幀尾了,把幀頭幀尾去掉,拿到3IP數據報。
如果目的MAC和接收端接口的MAC地址不符,說明數據不是發給我的,不能數據解封裝,也就拿不到數據3層地址,無法做數據轉發了(臣妾做不到啊)。

路由器數據轉發規則

路由器(Router)作爲網關,只有它接收到一個發往自己的數據的時候,纔有能力轉發。也就是說路由器接收到一個數據幀,只有這個數據幀目的MAC地址,是接收端接口的MAC地址時,才先假定這個數據幀是發給自己的,去掉幀頭幀尾,拿到3層報頭,查看目的IP地址。發現這個幀其實不是發給我的,是發給網絡B內的主機C的;去網絡B的路徑我知不知道?如果知道就沿着去往網絡B的最優路徑信息,去做數據轉發。這就是在網絡間通信的規則。

Q:PC2真要拿PC3的MAC地址作爲目的MAC地址去做數據封裝,和PC3通信,能直接通信嗎?
答案肯定是不可以的,爲什麼呢?

  1. PC2PC3發送數據。
  2. PC2發送的數據幀到達Switch1Switch1並不知道PC3MAC地址,所以要進行數據泛洪。
  3. 路由器(Router)接收到泛洪消息,發現數據幀目的MAC地址,並不是自己的網絡接入接口的MAC地址,就會丟棄。

經過以上流程,PC3永遠也接收不到數據。爲什麼MAC地址被稱爲一個網絡內的有效地址就是因爲這個。

Q:那麼PC2想要訪問網絡2的某個節點,該拿誰的MAC地址作爲,目的MAC地址呢?

答案是應該拿網關的MAC地址,作爲目的MAC地址。

端到端的數據通信規則

  • 如果是網絡內通信,源目2層地址和源目3層地址標識的都是通信雙方。
  • 如果是網絡間的通信,源目3層地址標識通信雙方,源目2層地址是每跨越一層網關設備,目的MAC地址都會改變。

一臺主機從A網絡向B網絡的主機發送數據,都不能將對方的MAC地址,作爲目的MAC地址封裝裝數據。
數據幀每跨越一個網絡,其2層幀頭的2層源目MAC地址都會改變,3層報頭的源目3IP地址維持端到端一致性。

PC爲什麼要指網關啊?

PC指網關的目的就是,當PC在網絡間通信的時候,需要通過網關這個IP,找個網關對應的MAC地址。拿到網關的MAC地址之後,就可以使用網關的MAC地址作爲目的MAC地址來封裝數據,PC發出數據幀,總會被網關收到,並且會被網關誤以爲數據幀是發給它自己的,網關把2層數據幀頭幀尾去掉,就能拿到3層目的IP地址。之所以讓路由器(Router)看到IP,就是想讓它知道,這個數據包的真實去向,它會去查詢一張叫路由表的表,來做一次網絡間精確數據轉發。

Q:那麼PC是怎樣知道網關的MAC地址的呢?
答案是通過ARP地址解析協議。

ARP地址解析過程:

  1. PC通過網關的IP地址10.1.1.254,向網關發送一個ARP請求。
  2. 網關(Gateway)收到這個請求後會把網關的MAC地址返回。
  3. PC拿到網關MAC地址以後就把他存在本地的ARP表中。

PC再將網關的MAC地址作爲目的MAC地址進行封裝數據,發送給網關,網關再做進一步的數據轉發。

網內通信VS網間通信

做網絡間通信的時候,需要網關做數據的轉發。目的主機在哪裏,不知道,目的主機離你有多少跳也不知道。終端主機只知道本地網絡的出口是網關路由器(Router)的3IP地址。

那麼問題來了主機只知道網關IP地址,怎麼確定PC1PC4兩臺主機進行數據通信,是網絡內通信呢,還是網絡間通信?

這時候子網掩碼的作用就尤爲突出了,方法很簡單。

  • PC1IP地址和子網掩碼,做邏輯與運算,網絡位不變,主機位全部置0。
  • 再用PC4IPPC1的子網掩碼做邏輯與運算。
  • 兩個結果如果一致,就說明兩臺主機在同一個網絡,不一致則兩臺主機分屬不同的網絡。

例如
PC1 IP:10.1.1.1
PC4 IP:20.1.1.1
PC1 子網掩碼:255.255.255.0
PC1和PC1的子網掩碼與運算的結果:10.1.1.0 正好是網絡號
PC2和PC1的子網掩碼與運算的結果:20.1.1.0
兩個結果不一致,說明PC1和PC4沒有在同一個網絡。

這就是爲什麼我們在配置IP的時候也要配一個子網掩碼,配子網掩碼的目的就是讓你的計算機在和其他終端通信的時候,來確定兩臺機器是否在同一個網絡,

路由器的控制層面

什麼是路由器控制層面?
簡單一句話路由器如何獲取去往目的網絡的路徑信息。如何在路由表中,產生一條去往目的網絡的路由條目。

路由:去往一個目的網絡的路徑,

路由器(Router)爲了做網絡間的轉發,必須靠一張路由表,來記錄每一個網絡在哪裏。
每臺路由器針對IPV4的單播流量,必須要有路由表,被稱之主動路由表,路由表中每一個路由表項都指向一個目的網絡,路由器通過該表項,就能找到去往該目的網絡的路徑地址。

路由表(TCAM) VS Hub CAM表

  • 路由表(TCAM)相較於交換機(Hub )的CAM表更加重要。
  • 交換機每次我收到一個數據幀的時候,都會根據目的MAC地址,來查看CAM表,來確定一個路徑轉發信息;交換機能不能找到MAC地址表項,都不影響它進行數據轉發,找到了進行精確數據轉發,找不到進行泛洪轉發。
  • 路由器(Router)是做的網絡間轉發,路由表中必須得有路由條目才能轉發,沒有路由條目,就不能轉發數據,直接丟包,是不可能進行泛洪轉發的。

網絡間有多大?
整個因特網有多大,它就有多大,它不像交換機,只做網絡內的轉發,一個網絡內主機數量二三百臺也就上限了,就算以泛洪的方式來轉發數據,充其量也只能影響到一個網絡內的所有節點,影響有限。但是路由器不行,一個路由器收到一個數據幀,一看目的IP不知道去往哪。沒有去往該網絡的路徑信息,這個時候你想效仿交換機進行泛洪轉發,是不可能的,因爲如果路由器進行泛洪轉發,影響的是整個因特網。

路由中有一個非常獨立的控制體系,得先讓這個體系運行完畢,再得基於這個體系,獲取相應的路由之後,才能完成數據轉發。
路由器是先有控制層面,再有數據層面。先有控制層面,纔會知道一個一個網絡怎麼走,知道網絡怎麼走之後,再基於數據層面,接收數據,查讀路由表,來進行數據轉發。

路由的兩種分類:
在這裏插入圖片描述
直連路由:路由器直接連接,一個直連網絡,如圖R1,這種路由就被稱之爲直連路由。

直連網絡:
所謂直連網絡,就是路由器有一個接口直接始於該網絡。

直連路由,只要滿足兩個條件,路由器路由表就可以自動學習。

  • 路由器連接該網絡的接口要擁有IP地址和子網掩碼。
  • 該路由器連接該網絡的接口狀態是upup。

非直連路由:路由器直連是一個非直連網絡,如圖R2,這種路由就被稱之爲非直連路由。

非直連路由,添加路由器路由表方式:

  • 靜態路由,當路由個數多的時候,人工手動配置費時費力。
  • 通過動態路由協議,相鄰的幾個路由可以相互同步共享路由表項,

路由器的數據層面

路由器(Router)收到一個數據幀,先檢查幀頭的目的MAC地址,是不是自己接口的MAC地址,如果是我的數據,去掉幀頭幀尾,露出3層報頭,檢查目的IP

Q:IP地址通常指向一個網絡的主機地址,而路由器路由表的條目是指向的一個一個的網絡。那麼用什麼來標識一個網絡呢?

答案是網絡號,也就說路由條目的IP地址都是一個網絡號;網絡號雖然都是一個IP地址,但是主機位都爲0

路由器怎樣確定目的IP所指向的網絡號呢?

  1. 路由器(Router)拿數據報的目的IP地址,和路由條目的子網掩碼,逐一去做邏輯與運算。
  2. 得到的結果,再和此路由條目中網絡號去做對比,如果一致,就代表命中,沒命中接着匹配。

使用的最長匹配原則,屬於模糊匹配 ,別小看這個匹配過程,會導致路由器轉發數據的效率明顯低於交換機。因此端到端連接儘量用交換機少用路由器。

交換機在轉發數據的時候也是基於源目MAC地址查表,但是因爲數據幀的源目地址是一個MACCAM表項裏也是MAC地址,所以不會進行模糊匹配,精確匹配。

結語

  • 在網絡間通信中,路由器(Router)扮演的就是一箇中間人的角色。
  • 所謂的網關,就是路由器的一個接口連接一個網絡;網絡內的主機想要進行網間通信的出口。
  • 路由器只做網絡間轉發,使用IP地址,來確定這個數據幀到底是要去到那個網絡。

路由器要查看IP的前提是要去掉幀頭幀尾;去掉幀頭幀尾的前提是這個數據是發給我自己的;確定數據幀是不是發給自己的前提,是收到數據幀的目的2層地址,必須是路由器接收接口的MAC地址,這就是計算機爲什麼要指網關,指網關的目的是要獲取到網關的MAC地址。

當路由器判斷出和我通信的主機跟我不在一個網絡的時候,我能通過網關的MAC地址, 來封裝數據,讓網關做一個網絡間的網絡轉發協助。

爲什麼計算機要有IP地址,還要有子網掩碼,子網掩碼能描述我們的IP地址,高多少位是網絡位,低多少位是主機位;通過子網掩碼跟目的主機的IP做與運算,就能得知目的主機和我在不在同一個網絡。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章