天天看點

路由資訊檢視

  • /proc/net/stat/rt_cache
  • /proc/net/rt_acct
  • /proc/net/fib_triestat
  • /proc/net/fib_trie
  • ip route get  xxxx(ip 位址)
  • ip route list table (local  main xxx)

Scope分為兩種:路由的Scope 和 IP位址的Scope

路由的Scope:表示到目的網絡的距離。

IP位址的Scope: 表示該IP位址到達本地主機有多遠。

常用的Scope

IP位址常用的Scope

主機:表示該位址隻用于主機的内部通信。例如:127.0.0.1

鍊路:表示位址盡在區域網路内部有意義(鍊路層互聯),如子網廣播位址

全域:表示位址可以在任何地方使用。(這是大多數位址的預設Scope)

*注意點:***Scope并不能反映可路由(公開)位址和不可路由(私有)位址之間的差別。10.0.0.1和165.2.2.2的Scope都可能是鍊路或全域。廣播位址和會換位址由核心來制定合适的Scope。

路由常用的Scope

主機: 路由表示的目的位址為本地主機。

鍊路:路由表示的目的位址為本地網絡。

全域:路由表示的目的位址超過一個下一跳

Scope的應用

路由Scope和IP位址Scope在路由代碼和核心其他部分都有廣泛的應用。

關于IP位址的Scope

首先,我們要知道,對于Linux而言,IP位址屬于主機而不是接口。這樣當主機有兩個接口,如eth0,eth1(例如我們路由期Wan口為eth0:202.202.202.202,lan口為eth1:192.168.1.1),兩個IP位址(202.202.202.202和192.168.1.1)都是屬于主機的,盡管他們配置在不同的接口上。這樣,如果沒有進行進一步的配置,我們來考慮下ARP應答:假設路由器從eth0(即wan口)接收到ip位址為192.168.1.1的位址請求(即wan端有主機ping 192.168.1.1)路由器是會給予應答的。(當然我們可以通過ARP_IGNORE特性進行配置)。

IP位址屬于主機,那麼,往我們的主機有多個IP位址時,當主機需要往外傳送資料是,選擇哪一個IP位址作為源IP,就需要進行判斷了。對IP位址配置不同的Scope在這裡就會得到一定的應用了。

關于路由的Scope

我們來看下圖有關于路由的Scope的應用:

路由資訊檢視

圖中,主機A需要往主機B發送消息。第一條路由的Scope為鍊路,目的位址為子網10.0.1.0/24,主機A無法通過該路由到達主機B。第二條路由的Scope為全域,主機A通過eth0到達網關10.0.1.1,在經網關傳送到主機B。

路由有更大的Scope能夠保證封包能夠到達更遠的地方

Scope在Linux中的實作

Scope在linux核心中描述

Linux核心中用枚舉常量來表示Scope:

enum rt_scope_t

{

RT_SCOPE_UNIVERSE=0, //scope 為全域 所有遠端非直連目的地

/* User defined values */

RT_SCOPE_SITE=200, //scope

RT_SCOPE_LINK=253, //scope 為鍊路

RT_SCOPE_HOST=254, //scope 為本機

RT_SCOPE_NOWHERE=255 //被代碼視為非法scopte

};

路由Scope

路由Scope被儲存在結構體struct fib_alias的fa_scope字段