以一例子來講明:公司內網要求192.168.0.100 之內的使用 10.0.0.1 網關上網 (電信),其餘IP使用 20.0.0.1 (網通)上網。linux
標籤:算法
基於策略的路由比傳統路由在功能上更強大,使用更靈活,它使網絡管理員不只可以根據目的地址並且可以根據報文大小、應用或IP源地址等屬性來選擇轉發路徑。數據庫
例子:服務器
在 Linux 系統啓動時,內核會爲路由策略數據庫配置三條缺省的規則: 網絡
不要混淆路由表和策略:規則指向路由表,多個規則能夠引用一個路由表,並且某些路由表能夠沒有策略指向它。若是系統管理員刪除了指向某個路由表的全部規則,這個表就沒有用了,可是仍然存在,直到裏面的全部路由都被刪除,它纔會消失。併發
(資料來源)工具
所謂路由表,指的是路由器或者其餘互聯網網絡設備上存儲的表,該表中存有到達特定網絡終端的路徑,在某些狀況下,還有一些與這些路徑相關的度量。路由器的主要工做就是爲通過路由器的每一個數據包尋找一條最佳的傳輸路徑,並將該數據有效地傳送到目的站點。因而可知,選擇最佳路徑的策略即路由算法是路由器的關鍵所在。爲了完成這項工做,在路由器中保存着各類傳輸路徑的相關數據——路由表(Routing Table),供路由選擇時使用,表中包含的信息決定了數據轉發的策略。打個比方,路由表就像咱們平時使用的地圖同樣,標識着各類路線,路由表中保存着子網的標誌信息、網上路由器的個數和下一個路由器的名字等內容。路由表根據其創建的方法,能夠分爲動態路由表和靜態路由表。ui
linux 系統中,能夠自定義從 1-252個路由表,其中,linux系統維護了4個路由表:url
路由表的查看可有如下二種方法:
路由表序號和表名的對應關係在 /etc/iproute2/rt_tables 文件中,可手動編輯。路由表添加完畢即時生效,下面爲實例:
如下面的路由表爲例:
Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.123.254 192.168.123.88 1 #缺省路由,目的地址不在本路由表中的數據包,通過本機的 192.168.123.88 接口發到下一個路由器 192.168.123.254 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 #發給本機的網絡包 192.168.123.0 255.255.255.0 192.168.123.68 192.168.123.68 1 #直連路由。目的地址爲 192.168.123.0/24 的包發到本機 192.168.123.88 接口 192.168.123.88 255.255.255.255 127.0.0.1 127.0.0.1 1 #目的地址爲 192.168.123.88的包是發給本機的包 192.168.123.255 255.255.255.255 192.168.123.88 192.168.123.88 1 #廣播包的網段是 192.168.123.0/24,通過 192.168.123.88 接口發出去 224.0.0.0 224.0.0.0 192.168.123.88 192.168.123.88 1 #多播包,通過 192.168.123.88 接口發出去 255.255.255.255 255.255.255.255 192.168.123.68 192.168.123.68 1 #全網廣播包 Default Gateway: 192.168.123.254
各字段說明:
根據子網掩碼,能夠將路由分爲三種類型:
Destination Gateway Genmask Flags Metric Ref Use Iface ----------- ------- ------- ----- ------ --- --- ----- 10.0.0.10 192.168.1.1 255.255.255.255 UH 0 0 0 eth0
Destination Gateway Genmask Flags Metric Ref Use Iface ----------- ------- ------- ----- ----- --- --- ----- 192.19.12 192.168.1.1 255.255.255.0 UN 0 0 0 eth0
Destination Gateway Genmask Flags Metric Ref Use Iface ----------- ------- ------- ----- ------ --- --- ----- default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
設置和查看路由表均可以用 route 命令,設置內核路由表的命令格式是:route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
其中:
好比:
關於 src 屬性:
當一個主機有多個網卡配置了多個 IP 的時候,對於它產生的網絡包,能夠在路由選擇時設置源 IP 地址。好比:
ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12 (發到 78.22.45.0/24 網段的網絡包,下一跳的路由器 IP 是 10.45.22.1,包的源IP地址設爲10.45.22.12)。
要注意的是,src 選項只會影響該 host 上產生的網絡包。若是是一個被路由的外來包,明顯地它已經帶有了一個源 IP 地址,這時候,src 參數的配置對它沒有任何影響,除非你使用 NAT 來改變它。對 Neutron 來講,qrouter 和 qif namespace 中的路由表中的 src 都沒有實際意義,由於它們只會處理外來的網絡包。
靜態路由是指由用戶或網絡管理員手工配置的路由信息。當網絡的拓撲結構或鏈路的狀態發生變化時,網絡管理員須要手工去修改路由表中相關的靜態路由信息。靜態路由信息在缺省狀況下是私有的,不會傳遞給其餘的路由器。固然,網管員也能夠經過對路由器進行設置使之成爲共享的。靜態路由通常適用於比較簡單的網絡環境,在這樣的環境中,網絡管理員易於清楚地瞭解網絡的拓撲結構,便於設置正確的路由信息。
以上面的拓撲結構爲例,在沒有配置路由的狀況下,計算機1 和 2 沒法互相通訊,由於 1 發給 2 的包在到達路由器 A 後,它不知道怎麼轉發它。B 也一樣。管理員能夠配置以下的靜態路由來實現 1 和 2 之間的通訊:
計算機配置默認網關:
路由器配置:
或者
(來源:http://baike.baidu.com/view/911.htm)
動態路由是指路由器可以自動地創建本身的路由表,而且可以根據實際狀況的變化適時地進行調整。它是與靜態路由相對的一個概念,指路由器可以根據路由器之間的交換的特定路由信息自動地創建本身的路由表,而且可以根據鏈路和節點的變化適時地進行自動調整。當網絡中節點或節點間的鏈路發生故障,或存在其它可用路由時,動態路由能夠自行選擇最佳的可用路由並繼續轉發報文。
常見的動態路由協議有如下幾個:路由信息協議(RIP)、OSPF(Open Shortest Path First開放式最短路徑優先)、IS-IS(Intermediate System-to-Intermediate System,中間系統到中間系統)、邊界網關協議(BGP)是運行於 TCP 上的一種自治系統的路由協議。
(來源:http://baike.baidu.com/view/897.htm)
以一例子來講明:公司內網要求192.168.0.100 之內的使用 10.0.0.1 網關上網 (電信),其餘IP使用 20.0.0.1 (網通)上網。
由於 mangle 的處理是優先於 nat 和 fiter 表的,因此在數據包到達以後先打上標記,以後再經過 ip rule 規則,對應的數據包使用相應的路由表進行路由,最後讀取路由表信息,將數據包送出網關。
(來源:使用 ip route , ip rule , iptables 配置策略路由。這裏 有一個更詳細的例子)
這裏能夠看出 Netfilter 處理網絡包的前後順序:接收網絡包,先 DNAT,而後查路由策略,查路由策略指定的路由表作路由,而後 SNAT,再發出網絡包。
咱們在 linux 機器上,使用 traceroute 來獲知從你的計算機到互聯網另外一端的主機是走的什麼路徑。固然每次數據包由某一一樣的出發點(source)到達某一一樣的目的地(destination)走的路徑可能會不同,但基本上來講大部分時候所走的路由是相同的。在 MS Windows 中該工具爲 tracert。 在大多數狀況下,咱們會在linux主機系統下,直接執行命令行:traceroute hostname;而在Windows系統下是執行tracert的命令: tracert hostname。
(1)例子
[root@localhost ~]# traceroute www.baidu.com traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets 1 192.168.74.2 (192.168.74.2) 2.606 ms 2.771 ms 2.950 ms 2 211.151.56.57 (211.151.56.57) 0.596 ms 0.598 ms 0.591 ms 3 211.151.227.206 (211.151.227.206) 0.546 ms 0.544 ms 0.538 ms 4 210.77.139.145 (210.77.139.145) 0.710 ms 0.748 ms 0.801 ms 5 202.106.42.101 (202.106.42.101) 6.759 ms 6.945 ms 7.107 ms 6 61.148.154.97 (61.148.154.97) 718.908 ms * bt-228-025.bta.net.cn (202.106.228.25) 5.177 ms 7 124.65.58.213 (124.65.58.213) 4.343 ms 4.336 ms 4.367 ms 8 202.106.35.190 (202.106.35.190) 1.795 ms 61.148.156.138 (61.148.156.138) 1.899 ms 1.951 ms 9 * * * 30 * * *
說明:
(2)原理
Traceroute 程序的設計是利用 ICMP 及 IP header 的 TTL(Time To Live)欄位(field)。
Traceroute 在送出 UDP datagrams 到目的地時,它所選擇送達的 port number 是一個通常應用程序都不會用的號碼(30000 以上),因此當此 UDP datagram 到達目的地後該主機會送回一個「ICMP port unreachable」的消息,而當traceroute 收到這個消息時,便知道目的地已經到達了。因此traceroute 在Server端也是沒有所謂的Daemon 程式。Traceroute提取發 ICMP TTL 到期消息設備的 IP 地址並做域名解析。每次 ,Traceroute 都打印出一系列數據,包括所通過的路由設備的域名及 IP地址,三個包每次來回所花時間。
(以上資料來自互聯網)