作業系統裡靜態路由和直連路由的優先順序
引言
在作業系統上, 同網段IP是通過二層方式直接通訊, 不經過閘道器,成為了一個根深蒂固的觀念, 就算在有直連路由的同時也配置同網段的靜態路由, 也不會有人懷疑直連路由的優先順序, 認為還是會優先二層通訊, 特別是玩過路由器的人, 都知道相同網段的情況下直連路由比靜態路由的優先順序高. 然而事實並非如此.:
Linux系統下的靜態路由與直連路由優先順序對比:
eth0配置 192.168.1.2/24 閘道器 192.168.1.1
然後再配置 route add -net 192.168.1.0/24 gw 192.168.1.1
結果如下:
帶閘道器的是靜態路由,可見2條路由的優先順序都是0, 但是根據實驗, 資料包會先發到閘道器, 也就是靜態路由優先(即便本機有arp記錄,也會靜態路由優先)
Windows(2003)系統下的靜態路由與直連路由優先順序對比:
本地連線1 配置 192.168.1.12/24 閘道器 192.168.1.1
然後再配置 route add 192.168.1.0 mask 255.255.255.0 192.168.1.1
結果如下:
可見直連路由的閘道器是本身,優先順序為10, 靜態路由的閘道器是192.168.1.1 , 優先順序為1, 明顯也是靜態路由優先, 實際測試也是如此.
華為三層交換機下的靜態路由與直連路由優先順序對比:
在vlanif 上配置 ip address 作為閘道器, 同時用 ip route-static 將同樣網段指到另一出口的互聯地址, 經測:
無論直連路由上有沒有活躍的目標IP(活躍的arp記錄) 都不會往靜態路由轉發.
用display routing-table 檢視, 也只能看到直連路由
可見是直連路由優先順序高
結論:
作業系統上靜態路由優先, 路由裝置上直連路由優先. 當然這都是在相同網段的前提下, 在網段不同的時候, 都遵循深度優先原則, 即網段越小優先順序越高.
現實意義:
或許有人說了, 這有什麼用呢? 有誰會在有直連路由的時候去配置相同的靜態路由呢?
1.在把Linux作為軟路由的時候, 難免會配置成這樣而導致異常
2.在南方普遍使用的雙線雙IP伺服器裡面一般都要配置靜態路由表,如果恰好包含本機IP段而且網段大小一致就會出現這種情形.
3.靜態路由優先的情況下, 根本的影響是同網段的二層通訊會走三層(走閘道器), 從而導致:
(1).增加閘道器的負載
(2).如果閘道器介面限速會影響頻寬
(3).如果閘道器介面計費的話增加費用
(4).如果閘道器上做了策略路由, 把inbound的包都策略走了, 可能導致同網段IP不通, 哪怕2個IP在同一個LAN的相鄰埠