路由器工作原理
路由器是構建整個網絡最核心的設備。比較著名的品牌為cisco、銳捷、華為、TP-LINK、H3C等等。之前工作中接觸的較多的是思科和銀河風雲,思科的主要是7609,性能十分穩定,基本上全年每天24小時工作不會出問題。銀河風雲一般,十分笨重,板卡容易壞,2M接口不穩定(進行自環不是loopback狀態),軟件有bug(一次作業中發現其以太口如果正常工作中,當將網線從以太口中拔出再插上,和對端的路由器之間路由協議的鄰居就建立不起來,必須將整個路由器進行重啟才正常工作)。
路由器其實和我們普通使用的計算機類似,有cpu、輸入輸出接口、內存,操作系統(思科的是ios,華為的VRP)。思科公司從來不承認自己是硬件公司,而是一直聲稱自己是軟件公司,由此可見路由器的操作系統是核心,操作系統的性能直接決定了路由器的性能。路由器和我們使用的計算機最大的不同之處就是路由器是用來進行轉發數據包的,而我們使用的計算機只是接收數據包或者發送數據包。好比我們個人只會收快遞或者發快遞,只是作為葉子節點,但是快遞中轉站則接收來自各地的快遞然后進行判斷將每個包裹從正確的路線發送出去,這個快遞中轉站就和我們的路由器很相像了。
路由器有很多接口,我們的電腦一般只有一個以太網口。而路由器比較常見的接口有2M口、以太電口、以太光口、POS口等等,這也是為了滿足整個網絡的異構性。路由器這些接口主要是做什么用的,當然是用來接收數據包、發送數據包的。數據包大家可以看成一個個快遞包裹。比如你要通過網絡給朋友發送一首mp3,一個包裹裝不下,那么就分成1000個包裹,當然是數據包,這個工作不需要你來做,電腦自動完成了,當你朋友收到這1000個數據包后,進行檢查有沒有破損的,沒有就進行重新組裝成mp3,如果在傳送過程中有丟失則會通知你進行重新傳送,重新傳送的時候只需要重傳丟棄或進行校驗出錯的那幾個數據包即可。另外這1000個數據包到達朋友處的順序是不定的,他們各自獨立的在網絡上跑向目的地,這就是分組交換,相對應的就是電路交換,電路交換就如我們打電話,進行交互之前必須提前申請好一條資源線路。
好的,路由器接口是用來接收數據包的,那么數據包到達路由器接口會發生什么呢?首先路由器會檢查數據幀目標地址字段中的數據鏈路標識。(其實就是MAC地址,二層,數據鏈路層,只在單跳中有用,在網絡上每進行一跳數據包頭中的目的MAC都要進行改寫才能繼續進行下一跳。這和IP地址不一樣,數據包中的目的IP地址在整個網絡傳輸過程中是一直不會變化的。IP地址類似我們的地址,MAC地址類似於我們每個人的身份證號),如果它包含了路由器接口標識符或者廣播標識符,那么說明這個數據包是給路由器我自己的,則路由器需要將從幀中剝離出數據包並傳遞給網絡層。
在網絡層,路由器將檢查數據包的目的IP地址。如果目的IP地址是路由器的接口IP地址或者是所有主機的廣播地址,那么需要進一步檢查數據包的協議字段,然后再把被封裝的數據發送給適當的內部進程,就是說這個數據包就是給我自己的,我自己進行消化處理,不需要我再進行轉發。
除此之外,其他所有的數據包都不是給我的,都需要我進行轉發,進行轉發就要進行路由選擇,否則路由器不知道應該從哪個接口將該數據包扔出去。數據包的目的地址可能是另一個網絡上的主機地址,這個網絡也許和路由器直接相連、也許不直接相連。那么路由器就需要查看自己的路由表來判斷這個數據包中指示的目的地址應該從哪個接口送出去。路由表是路由器一個最核心的數據庫,是不斷動態變化的,是路由器工作的基石,他是由一條條的路由組成的,每一條路由至少包含了兩點:目標地址、指向目標地址的指針。目標地址:這是路由器可以到達的網絡地址。指向目標的指針:指針不是指向路由器的直連目標網絡就是指向直連網絡內的另一條路由器地址,或者是到這個鏈路的本地接口。而且數據包在進行路由匹配的時候遵循路徑選擇最長匹配原則,就是如果有多個匹配,則選擇掩碼最長的。
我們上面所說的路由表是路由器工作過程中最核心的東西,是一個動態變化的數據庫,所有數據包轉發都需要根據路由表進行匹配。而且每個路由器都有自己的路由表。那么路由表中一條條的路由是怎么來的呢,由靜態路由和動態路由協議得來的,靜態路由是手動設置的,動態路由協議包括RIP、EIGRP、OSPF、ISIS、BGP等,在路由器中看啟動了哪些路由協議,也即啟用了哪些進程。這些進程就像一個個的打工仔,不斷的和同樣運行該協議的鄰居路由器們進行交互、進行計算,從而找到新的路由供路由器進行選擇,路由器根據一定的策略再決定要不要將該路由加入路由表中,只有加入了路由表中的路由才是有用的。這個策略是如果這條路由原來自己的路由表中沒有,則添加進去,如果存在則選擇管理距離最小的那個打工仔發現的,管理距離就是路由器對靜態路由及各種動態路由協議的一個信任程度,同一條路由,優先選擇最信任的那個打工仔發現的添加到自己的路由表中。這個管理距離是可以動態調整的。