NULL0介面的作用

2021-10-24 17:32:17 字數 4930 閱讀 8340

null 口是個偽介面( pseudo-inte***ce),不能配位址,也不能被封裝,它總是 up 的,但是從來不**或者接受任何通訊量,對於所有發到該介面的通訊量都直接丟棄。

不管是手動彙總還是自動彙總彙總的介面都是空介面 null0

eigrp 中的 null0 介面:指向null0 ,因為這個 路由是拿來通告的,給自己介面方向的鄰居減少路由表用的,而不表示乙個實際的可以到達明細網路的路由,從鄰居通過彙總路由來的到分組,還是要查本身的明細路由的,如果進來分組在彙總路由不匹配,直接丟給 null 0 埠。就是說使用介面 null0 能避免路由器**分組的時候尋找匹配程度更高的路由,阻止分組在網路內形成環路。

在 eigrp 中,只要發生總結就會在路由表中自動產生一條指向 null0 的路由條目,這條路由的直接意思是:匹配這條路由的資料報會被路由器丟掉。它的目的是為了避免在某些情況下產生路由環路。

比如說 a 和 b 是鄰居

a 連了三個網路 192.168.1.0/24 192.168.2.0/24 192.168.3.0/24

然後在 a 上做了彙總 192.168.0.0/16

a 把這個彙總路由傳給 b

然後 b 傳過來乙個包,目的是 192.168.4.0/24

如 果,不是彙總到 null0 介面,看其過程:先分條細細匹配 192.168.1.0/24 192.168.2.0/24 192.168.3.0/24,由於匹配不到, 則匹配彙總路由 192.168.0.0/16,則根據最長匹配原則,該分組與彙總路由匹配,那就出現了一種 現象,如果這路由器有預設路由,則此包會沿預設路由**分組,這樣有可能造成了路由環路再來看看,如果有了 null0 介面,看其過程,看其過程:先分條 細細匹配 192.168.1.0/24 192.168.2.0/24

192.168.3.0/24,由於匹配不到, 則被**到 null0 介面(注意,不是再來跟彙總路由匹配) ,而**到 null0,

它就被丟棄或者到了位元桶( bit bucket, 路由器確定的被丟棄位元(被丟棄的分組)的目的地),避免產生了以上的環路。

一般情況下,路由器提供乙個稱為null0的介面,該介面是乙個邏輯介面,有乙個重要的特性:永遠是 up 的,並且傳送到該介面的資料幀都會被丟棄。由此可以推斷,如果我們在路由器上配置一條靜態路由,該路由的出口就是 null0, 那麼該路由會有下列特性:

1、這個靜態路由永遠的有效,那是因為介面不會 down 掉;

2、使用該路由**資料幀消耗的系統資源很少,因為路由器只是丟棄接收的資料報;

3、路由器根據配置的引數要不然向資料來源發乙個丟棄通知(icmp 通知訊息),要不就不做任何反應。正是有了這些特性,使得該介面有廣泛而重要的用途,尤其在進行一些高階的路由策略時,比如路由聚合,網路發布等,有靈活而巧妙的應用。下面具幾個例子:

null0 與路由彙總

一 般情況下,為了提高網路的可伸縮性,都得在邊緣路由器上弄路由聚合。但是路由聚合需要滿足一些的條件,比如,ospf 中,只能在區域邊界路由器對路由進行彙總,這樣,為了進行路由聚合,我們就得進行劃分多區域,但是這在某些情況下是不可滿足的,再者,在bgp 中,為通知乙個彙總網路,這個網路就得 存在在路由表,否則無法通知。

但如果使用了 null0 介面和靜態路由技術,這些問題會很巧妙的被解決。下面我們舉兩個例子,乙個例子說明如何解決單區域情況下的 ospf 路由彙總,另外乙個例子說明在bgp 中如何通告聚合路由。這兩個例子都很有代表性。

這個網路,rt1 經過兩個高速的 pos 鏈路直接連線上層的兩台中心路由器 crt1 和crt2, 在 rt1 下面直接連線了很多 ddn 的使用者,每個 ddn 的使用者用乙個 c 類 ip 的位址,目前已經使用了四個:

192.168.1.0,192.168.2.0,192.168.3.0,192.168.4.0,按照這樣,192.168.0.0/16 整個分配給該了路由器下的ddn 的使用者以使用。

在 rt1 和兩台中心路由器之間執行ospf協議,rt1 和 ddn 使用者之間採用靜態路由,為了把 ddn使用者的靜態路由分發到整個 internet, 在 rt1 上把所有靜態路由引入了 ospf.這樣工作起來是沒有問題的,但因為整個 192.168.0.0/16 路由都分配給了 rt1, 即說明該網路不會在外部網路上出現,這時候我們可以採用路由聚合的技術,把這些 " 零碎" 網段聚合成 192.168.0.0/16,然後通過 ospf 發布出去。

當前的問題是,在ospf,要進行路由聚合,必須在區域邊界進行,這時乙個解決方案就是把所有連線ddn 使用者的介面劃分到另外乙個區域中( rt1 和 crt1,crt2 之間劃分為區域 0),然後在 rt1 上進行聚合,把所有 ddn 路由聚合後傳送到區域 0 裡面。這樣做有很多弊端,比如,容易造成路由洩露(rt1 上的路由可能被 ddn 使用者截獲),浪費ddn 線路頻寬( ospf 要在介面上不斷傳送 hello 報文)等。乙個不另外劃分區域而解決該問題的方式就是應用 null0 介面路由。可以按照下列步驟進行:

1、在 rt1 上配置靜態路由,如下:

(crt1-config ) #ip route 192.168.0.0 255.255.0.0 null0

2、建立訪問列表,用於 ospf 中的路由分發,如下:

(crt1-config ) #access-list 10 permit 192.168.0.0 0.0.255.255

(crt1-config ) #access-list 10 deny any

3、在 ospf 中分發靜態路由,並使用訪問列表 10 來控制分發的路由,如下:

(crt1-config-router-ospf )#redistribute static

(crt1-config-router-ospf )#distribute-list 10 out static

以上僅僅列出了跟路由分發相關的配置。完成這樣配置後, ospf 在分發靜態路由時,就會根據訪問列表 10 來進行控制,而僅僅分發出去一條彙總路由,而其他具體的路由都會被過濾掉。

需要注意, ospf 在分發靜態路由時,僅分發路由表裡存在的路由,因此我們就得新建一條下一跳為null0 介面的靜態路由來欺騙 ospf,這也是上述操作的重點。

bgp 作為一種邊界閘道器之間的路由協議,有很大的伸縮性和靈活性,可以對路由進行精確的控制和分發。在一些 isp 中,往外發布自己的內部路由時往往需要做一些彙總,而不傳送具體的路由出去,這樣不但有利於保密的目的,而且也不會引入太多的路由到internet上。

bgp, 我們用 summary-address 命令來進行路由聚合,但是聚合後出現路由屬性的改變問題,像as-path 的屬性,會由具體的 as 的 號更換為 as-set,這樣對以後的路由控制有著不利的影響。 也就是說,在 bgp 中,引入路由的最理想方式是使用network命令直接引入到本地路由表中的路由,這樣引入的路由起點屬性為igp, 可信度是最好的。

但 network 命令總有乙個限制,就使用 network 來引入的路由必須在路由表中存在,否則就不能引入。實際情況是,路由表中存在著一些具體的路由,而不存在彙總路由,這時候用network便不起作用。

跟上面 ospf 的解決方式是一樣的, 我們可以用配置一條靜態的來指向 null0 介面的路由進行欺騙bgp,如下步驟:

1、配置靜態路由,如下:

(crt1-config ) #ip route 192.168.0.0 255.255.0.0 null0

2、在 bgp 中,把聚合路由引入到其中,如下:

(crt1-config-router-bgp ) #network 192.168.0.0 mask 255.255.0.0

完成這些配置後, bgp 就會把一條聚合路由引入其中,同樣的道理,配置上該條靜態路由後,也不會對資料的正常**造成任何影響。

一 般,如果一台路由器接收了乙個資料報,而在自己的路由表裡又沒有查詢到要**的路由,該路由器就會把資料報丟棄,並向資料來源傳送乙個目的地不可達 的 icmp 訊息。當然,這是一種正確的行為,但有些情況下就可能不符合人的願望,比如,我們在路由器上配置了一條靜態路由,使這個路由指向乙個物理串列埠,這個串列埠正常時,該靜態路由就可用,但這個串列埠 down 掉時候,該靜態路由就會被刪除,這 樣如果再收到這樣乙個資料報(該資料報需要配置的靜態路由進行**),則丟棄, 並給源傳送乙個 icmp 目的地不可達訊息,接收到 icmp 不可達訊息的主機就有可能修改自己的路由表(尤其是在一些 unix 主機),而這是我們所不希望的。

這時候我們可以配置一條指向 null0介面的備用路由,但是把優先順序降低,假設我們在路由器上做如下配置:

(router-config )#ip route 0.0.0.0 0.0.0.0 serial 0 preference 60

(router-config )#ip route 0.0.0.0 0.0.0.0 null0 preference 20

即使 serial0 介面斷掉了,路由器也就會不斷使用下條路由地進行****發的結果當然就是丟棄資料報),而不再給源目的地傳送 icmp 不可達訊息。這在路由擺動比較頻繁的情況下也可以使用,不至於影響到其它路由器,而僅僅只是把擺動限制在自己身上。

某些情況,我們也可能採取某些 ip **的策略,像,進行源位址的路由等。在這些情況下,我們可能 需要**一些符合條件資料,而丟棄一些不符合條件的 資料。有些情況下,比如源位址的路由等,可以通過訪問列表解決,但有些特殊情況下,用訪問列表是解決不了的,比如,我們在乙太網介面上過濾 1500 位元組的 資料,即如果資料報的長度超過了 1500,我們可以丟棄。該需求可以通過 ip 策略解決,如下:

1、配置乙個路由影像( route-map ),如下:

(router-config )#route-map deny_1500 permit 100

(router-route-map )#match length 1500

(router-route-map )#set inte***ce null0

(router-route-map )#exit

2、到介面的模式下,實施 ip 的策略,如下:

(router-config-if ) #ip policy route-map deny_1500

完成這樣配置後,所有乙太網介面上都將收到的1500 位元組的資料幀過濾掉。

C C 的空指標,NULL,0和nullptr

在c和c 中,null和0都可以使用。c通常使用null,c 通常使用0 include int main void include using namespace std int main 1 void foo char 2 int main void foo int 1 void foo cha...

wmaster0介面的簡單介紹

wmaster0是linux無線網路裝置的主介面,根據官方說明,從linux2.6.32開始刪除了這個介面,所以從linux2.6.32版本開始不會再看到這個介面,我們比較熟悉的是類似於waln0這種介面,因為簡單來說,乙個wlanx 0,1,2,介面就代表一張無線網絡卡。但是,在linux2.6....

介面的作用

我在專案中大量使用介面,如果是多人合作專案更是不可少,舉個例子 我要寫乙個列印程式,但是面臨的問題是必須使用不同的印表機,有 hp的,ibm的 epsom 的等等。但是針對每乙個印表機的程式只有 2個必須要用到的函式,print printpreview 這兩個函式不同的印表機裡面的具體實現 是不一...