寫在前面
要想去外面的世界看看, 就離不了路由器,而路由器工作的原理就是路由,那么具體是怎么路由的呢?本文就一起來看下這部分內容。
1:路由的配置
配置一條路由無非就是在配置以下三個信息:
1:包要去哪里,即目的IP
2:從路由器的哪個網口出去
3:下一跳的IP地址是啥?
知道了以上信息,就能以在局域網環境中傳輸包方式來完成一跳了,還是ARP獲取MAC,修改目標MAC等操作。
那么如何配置呢,最簡單的方式就是直接配置,如下:
ip route add 10.176.48.0/20 via 10.173.32.1 dev eth0
意思就是如果是包要去10.176.48.0/20,就要從eth0這個網口出去,下一跳的地址是10.173.32.1,就像這樣:
當然這樣子按照目的IP來配置路由器是完全可行的,但是一個個配置工作量還是蠻大的,所以也支持其他的配置方式,比如策略配置方式,即通過源IP,TOS等方式等方式來配置,如下根據源IP來進行配置:
ip rule add from 192.168.1.0/24 table 10 如果是來源IP是192.168.1.0/24則使用路由表10
ip rule add from 192.168.2.0/24 table 20如果是來源IP是192.168.2.0/24則使用路由表20
也可以配置多個出口,來實現負載均衡:
ip route add default scope global nexthop via 100.100.100.1 weight 1 nexthop via 200.200.200.1 weight 2
下一跳有倆,分別是100.100.100.1,權重1,200.200.200.1,權重2。
接著我們來看一個出口可以二選一的實際場景。
我家在有孩子之前只買了一家運營商的網絡,因為我家對網絡的要求不高,我跟我老婆基本上都不看視頻什么的對網速要求比較高的網站,最多也就是看看新聞,查查工作中遇到的問題啥的,但是呢,后來有了孩子,孩子要上網課,所以我們又買了另一家運營商的網絡,寬帶呢更高,但是家里的路由器支持一個出網網口,即只能接一個外網,為此,我們還專門買了一個可以支持兩個外網網口的更高級的路由器,最終,我們家的網絡就像這樣子:
其中eth2和eth3就是兩個外網網口。
此時我們家的路由配置如下:
$ ip route list table main
60.190.27.189/30 dev eth3 proto kernel scope link src 60.190.27.190
183.134.188.1 dev eth2 proto kernel scope link src 183.134.189.34
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1
127.0.0.0/8 dev lo scope link
default via 183.134.188.1 dev eth2
意思是:
如果是要去60.190.27.189/30,即運營商2則從eth3口出
如果是要去183.134.188.1,即運營商1則從eth2口出
如果是去內網192.168.1.0/24,則從eth0出,此時只是在局域網內,不到外網
如果是去127則走lo,回環網口,此時是自己跟自己玩
默認走eth2
因為我們需要孩子屋使用高速網絡,我們屋使用低速網絡,為此還要進行如下的配置:
- 我們屋走低速網絡
添加新的路由表:# echo 200 slow >> /etc/iproute2/rt_tables
配置slow路由表:# ip route add default via 60.190.27.189 dev eth3 table slow# ip route flush cache
配置來自我們的IP走slow路由表:# ip rule add from 192.168.1.102 table slow
這樣我們屋走路由表slow
,而路由表slow走eth3網口,下一跳的IP的60.190.27.189。
- 孩子屋走高速網絡
添加新的路由表:# echo 200 fast >> /etc/iproute2/rt_tables
配置slow路由表:# ip route add default via 183.134.188.1 dev eth2 table fast# ip route flush cache
配置來自我們的IP走slow路由表:# ip rule add from 192.168.1.101 table fast
這樣孩子屋走路由表fast
,而路由表fast走eth2網口,下一跳的IP是183.134.188.1。
當然簡單的網絡環境,比如我家里的網絡,手動擋搗鼓搗鼓還是問題不大的,但是當網絡環境比較復雜時,手動的方式就顯得力不從心了,此時就需要自動的方式來進行了。
2:動態路由配置
其實我們抽象的來看所有路由器,組成的其實就是一個圖,而路由器無非就是找到一條最短路徑而已,所以動態路由配置其實就是轉化為了圖的最短路徑問題了,而解決最短路徑問題,主要是Bellman-Ford 算法和Dijkstra 算法。具體在動態路由配置算法有以下兩種。
- 距離矢量路由算法
該算法基于bellman-ford,適用于小型網絡。 - 鏈路狀態路由算法
該算法基于dijkstra算法。適用于大型網絡。
但是只有算法還是工作不起來的,還需要具體協議的支持,畢竟先干嘛后干嘛還是要有一個規范的嗎,所以就有了以下的具體協議: - 基于鏈路狀態路由算法的 OSPF
OSPF(Open Shortest Path First,開放式最短路徑優先)就是這樣一個基于鏈路狀態路由協議,廣泛應用在數據中心中的協議。由于主要用在數據中心內部,用于路由決策,因而稱為內部網關協議(Interior Gateway Protocol,簡稱 IGP)。
即,這是一個內網環境的路由協議。 - 基于距離矢量路由算法的 BGP
這是一個外網環境的路由協議。我們稱為外網路由協議(Border Gateway Protocol,簡稱 BGP)。
網絡世界一個獨立的內網環境,比如一個公司網絡,我們稱為一個AS(Autonomous System),自治系統分為以下幾類:
Stub AS:對外只有一個連接。這類 AS 不會傳輸其他 AS 的包。例如,個人或者小公司的網絡。
Multihomed AS:可能有多個連接連到其他的 AS,但是大多拒絕幫其他的 AS 傳輸包。例如一些大公司的網絡。
Transit AS:有多個連接連到其他的 AS,并且可以幫助其他的 AS 傳輸包。例如主干網。
每個AS之間都有邊界路由器。BGP分為eBGP和iBGP,其中AS之間使用eBGP通信,AS內部使用iBGP,如下圖:
寫在后面
參考文章列表
網絡協議之不能老在家里晃悠,也得出去看看啊! 。