路由器 (http://www.ydaedu.com.cn)的工作不外乎兩個,一是路徑選擇,二是資料轉發。進行資料轉發相對容易一些,難的是如何判斷到達目的網絡的最佳路徑。是以,路徑選擇就成了路由器最重要的工作。
許多路由協定可以完成路徑選擇的工作,常見的有RIP,OSPF,IGRP和EIGRP協定等等。這些算法中,我們不能簡單的說誰好誰壞,因為算法的優劣要依據使用的環境來判斷。比如RIP協定,它有時不能準确地選擇最優路徑,收斂的時間也略顯長了一些,但對于小規模的,沒有專業人員維護的網絡來說,它是首選的路由協定,我們看中的是它的簡單性。
如果你手頭正有一個小的網絡項目,那麼,就讓我們來安排一個計劃,30分鐘讀完本文(一讀),20分鐘再細看一遍本文提及的指令和操作方法(二讀),用30分鐘配置網絡上的所有路由器(小網絡,沒有幾台路由器可以配的),最後20分鐘,檢查一下網絡工作是否正常。好了,一百分鐘,你的RIP網絡運轉起來了。就這麼簡單,不信,請繼續往下看。
一、RIP是什麼
RIP(Routing Information Protocols,路由資訊協定)是使用最廣泛的距離向量協定,它是由施樂(Xerox)在70年×××發的。當時,RIP是XNS(Xerox Network Service,施樂網絡服務)協定簇的一部分。TCP/IP版本的RIP是施樂協定的改進版。RIP最大的特點是,無論實作原理還是配置方法,都非常簡單。
度量方法
RIP的度量是基于跳數(hops count)的,每經過一台路由器,路徑的跳數加一。如此一來,跳數越多,路徑就越長,RIP算法會優先選擇跳數少的路徑。RIP支援的最大跳數是15,跳數為16的網絡被認為不可達。
路由更新
RIP中路由的更新是通過定時廣播實作的。預設情況下,路由器每隔30秒向與它相連的網絡廣播自己的路由表,接到廣播的路由器将收到的資訊添加至自身的路由表中。每個路由器都如此廣播,最終網絡上所有的路由器都會得知全部的路由資訊。正常情況下,每30秒路由器就可以收到一次路由資訊确認,如果經過180秒,即6個更新周期,一個路由項都沒有得到确認,路由器就認為它已失效了。如果經過240秒,即8個更新周期,路由項仍沒有得到确認,它就被從路由表中删除。上面的30秒,180秒和240秒的延時都是由計時器控制的,它們分别是更新計時器(Update Timer)、無效計時器(Invalid Timer)和重新整理計時器(Flush Timer)。
路由循環
距離向量類的算法容易産生路由循環,RIP是距離向量算法的一種,是以它也不例外。如果網絡上有路由循環,資訊就會循環傳遞,永遠不能到達目的地。為了避免這個問題,RIP等距離向量算法實作了下面4個機制。
? 水準分割(split horizon)。水準分割保證路由器記住每一條路由資訊的來源,并且不在收到這條資訊的端口上再次發送它。這是保證不産生路由循環的最基本措施。
? 毒性逆轉(poison reverse)。當一條路徑資訊變為無效之後,路由器并不立即将它從路由表中删除,而是用16,即不可達的路徑成本将它廣播出去。這樣雖然增加了路由表的大小,但對消除路由循環很有幫助,它可以立即清除相鄰路由器之間的任何環路。
? 觸發更新(trigger update)。當路由表發生變化時,更新封包立即廣播給相鄰的所有路由器,而不是等待30秒的更新周期。同樣,當一個路由器剛啟動RIP時,它廣播請求封包。收到此廣播的相鄰路由器立即應答一個更新封包,而不必等到下一個更新周期。這樣,網絡拓撲的變化會最快地在網絡上傳播開,減少了路由循環産生的可能性。
? 抑制計時(holddown timer)。一條路由資訊無效之後,一段時間内這條路由都處于抑制狀态,即在一定時間内不再接收關于同一目的位址的路由更新。如果,路由器從一個網段上得知一條路徑失效,然後,立即在另一個網段上得知這個路由有效。這個有效的資訊往往是不正确的,抑制計時避免了這個問題,而且,當一條鍊路頻繁起停時,抑制計時減少了路由的浮動,增加了網絡的穩定性。
即便采用了上面的4種方法,路由循環的問題也不能完全解決,隻是得到了最大程度的減少。一旦路由循環真的出現,路由項的路徑成本就會出現計數到無窮大(Count to Infinity)的情況。這是因為路由資訊被循環傳遞,每傳過一個路由器,路徑成本就加1,一直加到16,路徑就成為不可達的了。RIP選擇16作為不可達的路徑成本是很巧妙的,它既足夠的大,保證了多數網絡能夠正常運作,又足夠小,使得計數到無窮大所花費的時間最短。
鄰居
有些網絡是NBMA(Non-Broadcast MultiAccess,非廣播多路通路)的,即網絡上不允許廣播傳送資料。對于這種網絡,RIP就不能依賴廣播傳遞路由表了。解決方法有很多,最簡單的是指定鄰居(neighbor),即指定将路由表發送給某一台特定的路由器。
RIP的缺陷
RIP雖然簡單易行,并且久經考驗,但是也存在着一些很重要的缺陷,主要有以下幾點:
? 過于簡單,以跳數為依據計算路徑成本,經常得出非最優路由;
? 路徑成本以16為限,不适合大的網絡;
? 安全性差,接受來自任何裝置的路由更新;
? 不支援無類IP位址和VLSM(Variable Length Subnet Mask,變長子網路遮罩);
? 收斂緩慢,時間經常大于5分鐘;
? 消耗帶寬很大。
二、路由器怎麼配
路由器本身就是一台有多個網絡接口的計算機,同普通計算機一樣,它也有中央處理器(CPU)、系統主存(RAM)和隻讀存儲器(ROM)等部件。
除此之外,一個很重要的部分是它的網絡接口(Interface),為了連結不同類型的網絡,路由器的網絡接口種類繁多,比如應用在區域網路中的以太、快速以太、令牌環接口,應用于廣域網的V.35、RS232、ISDN BRI PRI接口等等。
路由器的外存儲器主要有兩種:NVRAM(Non-Volatile RAM,非易失性RAM)和Flash(閃存)。NVRAM存儲路由器的配置檔案,Flash用于存放作業系統IOS(Internet Operating System)。
配置模式
CISCO路由器最基本的配置模式有兩種:使用者(user)和特權(privileged)。在使用者模式下,隻能顯示路由器的狀态,特權模式還可以更改路由器的配置。
特權模式下可以進入安裝(setup)模式、全局配置(global config)模式,局部配置(sub config)模式。
? 安裝模式提供菜單提示,引導使用者進行路由器的基本配置。新路由器第一次啟動後,自動進入安裝模式。
? 全局配置模式中可以改變路由器的全局參數,如主機名、密碼等等。
? 局部配置改變路由器的局部參數,例如某一個網絡接口的配置、某一種路由協定的配置等等。
配置方法
路由器的配置可以使用多種方法,下面這五種是最常見的:
? 使用超級終端類的工具通過串行口登入控制台(console port)。
? 将數據機連結至路由器的輔助口(auxiliary port),遠端撥号登入控制台。
? 遠端登入(telnet)至路由器的某一IP 位址,通過VTY(virtue terminal line,虛拟終端)方式通路路由器。
? 編輯配置檔案,并通過TFTP上傳至路由器。
? 通過網絡管理軟體(network management system)遠端設定路由器參數。
安裝路由器
假設我們的項目網絡中隻有三台路由器。網絡拓撲如下圖:
它們放在北京、上海和天津,名字分别叫testBJ、testSH和testTJ。我們采用B類保留IP位址172.16.0.0,共劃分了四個子網172.16.1.0、172.16.2.0、172.16.3.0和172.16.4.0,子網路遮罩均為255.255.255.0。
基本配置
将包裝中附帶的串行電纜一端連接配接到Beijing路由器的console口上,另外一端連接配接到計算機的com口上。啟動超級終端程式(Win95/NT中),作适當配置,連接配接路由器。給路由器加電,連續鍵入數個回車,出現如下提示符,顯示路由器處于使用者模式。
testBJ>
由使用者模式轉入特權模式,使用enable指令。
testBJ> enable
testBJ#
和UNIX主機一樣,“#”代表特權(root)使用者的系統提示符,它表示你進入了特權模式。與enable作用相反,即從特權模式傳回使用者模式的指令是disable。
特權模式下,可以使用config terminal指令進入全局配置模式。全局配置模式下,可以使用一些配置子項的名稱進入局部配置模式。傳回的方法都是exit指令。其中,從局部配置模式直接傳回特權模式的指令是end。如下所示。
testBJ#config terminal
Enter configuration commands, one per line. End with CNTL/Z.
testBJ(config)#router rip
testBJ(config-router)#exit
testBJ(config)#exit
CISCO IOS的一個非常引人的特色是它的指令行幫助,一個?解決了所有的問題。?可以顯示目前模式下的指令清單,可以顯示指令全稱,還可以顯示指令的參數和幫助資訊。在任何對指令不确定的地方鍵入?,系統會給出提示資訊。
CISCO路由器還支援指令簡寫功能,隻要不引起歧義,可以用指令的前幾個字元替代整個指令,這樣,配置時的打字工作量就小多了。
路由器的全部配置資訊都儲存在配置檔案中,目前正在使用的配置檔案是running-config,它存放在系統記憶體裡,我們在特權模式下對配置的修改會立即反映到running-config中。startup-config是存儲在NVRAM中的配置檔案,隻有它是掉電不丢失的,是以如果想使所做的修改到下一次啟動時仍然有效,就必須儲存目前配置。存盤指令如下:
testBJ#copy running-config startup-config
Building configuration...
[OK]
更改路由器名、密碼
路由器的名字可以用hostname指令修改。
Router(config)#hostname testBJ
testBJ(config)#
enable password和enable secret指令可以修改特權模式的密碼。
testBJ(config)#enable password cisco
testBJ(config)#enable secret cisco
進入line console局部配置模式下,修改console登入密碼;進入line vty局部配置模式,修改telnet登入的密碼。login指令指出需要登入,修改密碼的指令都是password。
testBJ(config)#line console 0
testBJ(config-line)#login
testBJ(config-line)#password cisco
testBJ(config-line)#exit
testBJ(config)#line vty 0 4
測試連通性
打開其餘兩台路由器,按上述方法進行配置,然後就可以檢查它們之間是否連通了。
測試線路連通性的方法有三種,ping、traceroute和telnet。ping可以檢測目的地是否可達;trace不僅檢測連通性,還給出到達目的地所經過的路徑;telnet測試應用層軟體的連通性,如下所示。
testBJ#ping 172.16.4.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.4.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 24/25/28 ms
testBJ#traceroute 172.16.4.2
Tracing the route to 172.16.4.2
1 172.16.2.2 16 msec 16 msec *
testBJ#telnet 172.16.4.2
Trying 172.16.4.2 ... Open
User Access Verification
Password:
testTJ>
172.16.4.2是路由器testTJ上的一個端口,我們在testBJ上運作上述三個指令,得知它運作正常。
顯示目前狀态
為了使網絡管理者能夠友善地了解路由器的狀态,CISCO路由器提供了豐富的show指令。我們在這裡介紹最簡單的幾個,如下所示。
show version指令顯示路由器的硬軟體版本号及配置資訊。
show flash:指令相當于DOS的dir指令,顯示flash中包含的檔案資訊。
show interface指令顯示網絡接口的狀态。
配置路由器的過程中,最重要的一個show指令莫過于檢視配置檔案的内容,可以用show指令檢視running-config或startup-config,如下所示。
show running-config
show startup-config
配置檔案是一個文本檔案,其中包含着你鍵入的每一條配置指令。可以将配置檔案下載下傳到計算機上,用文本編輯器修改之後,再傳回路由器。
三、RIP要配什麼
IP位址配置
我們可以使用interface指令進入局部配置模式,然後利用ip address設定接口的IP位址。如下所示。
testBJ#conf t
testBJ(config)#interface e0/1
testBJ(config-if)#ip address 172.16.1.2 255.255.255.0
testBJ(config-if)#
為了便于配置和記憶,你還可以給每個端口添加一些描述資訊。如下所示,在端口局部配置模式下使用description指令。
testBJ(config-if)#description connect to testSH
testBJ(config-if)#end
RIP配置
RIP是最容易配置的路由協定。配置它隻需要兩步操作,首先,指定使用RIP協定,然後,聲明所連接配接的網絡号,如下所示。
testBJ(config-router)#network 172.16.0.0
testBJ(config-router)#end
router rip指令用于指定使用RIP協定,network指令聲明網絡号,由于RIP是一個有類路由協定,是以不必聲明各個子網号。
對每一台路由器重複上述操作,一個使用RIP路由的網絡就建成了。
測試配置正确性
配置RIP之後,要檢查資料是否可以被正确路由。除了可以使用上面提到的連通性測試工具之外,還有以下幾個指令:
? sh ip route用于檢測路由表;
? sh ip protocols用于檢查路由協定狀況;
? debug ip rip用于調試RIP協定資訊。
使用sh ip route指令顯示各台路由器的路由表。
testBJ#sh ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2,
* - candidate default, U - per-user static route, o - ODR
Gateway of last resort is not set
172.16.0.0/24 is subnetted, 4 subnets
R 172.16.4.0 [120/1] via 172.16.2.2, 00:00:12, Serial1/0
C 172.16.1.0 is directly connected, Ethernet0/1
C 172.16.2.0 is directly connected, Serial1/0
R 172.16.3.0 [120/1] via 172.16.1.3, 00:00:09, Ethernet0/1
[120/1] via 172.16.2.2, 00:00:22, Serial1/0
上面顯示的是北京路由器的路由資訊。字母C開頭的是直接相連的網絡,有172.16.1.0和172.16.2.0,分别連接配接在e0/1和s1/0端口上。字母R開頭的是RIP協定學習到的路由,有172.16.3.0和172.16.4.0,其中,到172.16.3.0有兩條路徑供選擇,分别經由testSH和testTJ路由器。對比網絡拓撲圖,可以看出實際情況與設計的完全一緻。
中括号裡的内容是路由項的管理距離和路徑成本,RIP的預設管理距離是120,到達3、4子網的路徑成本是1,即經過1個路由器可達。
同樣的指令在另外兩台路由器上運作,結果如下。
testSH#sh ip route
R 172.16.4.0 [120/1] via 172.16.3.2, 00:00:13, Ethernet0/0
R 172.16.2.0 [120/1] via 172.16.1.2, 00:00:11, Ethernet0/1
[120/1] via 172.16.3.2, 00:00:13, Ethernet0/0
C 172.16.3.0 is directly connected, Ethernet0/0
testTJ#sh ip route
C 172.16.4.0 is directly connected, Ethernet0/0
R 172.16.1.0 [120/1] via 172.16.3.3, 00:00:07, Ethernet0/1
[120/1] via 172.16.2.3, 00:00:19, Serial1/0
C 172.16.3.0 is directly connected, Ethernet0/1
分析上述指令輸出時,一定要随時參照拓撲圖,離開網絡拓撲,上面的資訊就沒有任何意義。動态路由的靈活性展現在一條鍊路出現故障,路由算法會自動切換到迂回鍊路上。例如我們将testBJ和testTJ之間的串行線纜斷開,一段時間後,再檢查路由表,如下所示。
172.16.0.0/24 is subnetted, 3 subnets
R 172.16.4.0 [120/2] via 172.16.1.3, 00:00:22, Ethernet0/1
R 172.16.3.0 [120/1] via 172.16.1.3, 00:00:22, Ethernet0/1
我們發現串行鍊路所在的子網2斷開了,到網絡172.16.4.0網絡的資料包都将繞經testSH路由器。
sh ip protocols指令可以顯示目前路由協定的狀況,如下所示。
testBJ#sh ip protocols
Routing Protocol is "rip"
Sending updates every 30 seconds, next due in 19 seconds
Invalid after 180 seconds, hold down 180, flushed after 240
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Redistributing: connected, rip
Default version control: send version 1, receive any version
Interface Send Recv Key-chain
Ethernet0/1 1 1 2
Serial1/0 1 1 2
Routing for Networks:
172.16.0.0
Routing Information Sources:
Gateway Distance Last Update
172.16.2.2 120 00:00:05
172.16.1.3 120 00:00:27
Distance: (default is 120)
從指令輸出中,可以看出RIP協定的基本配置,還可以得知與目前路由器交換資訊的路由器有testTJ(172.16.2.2)和testSH(172.16.1.3)兩台路由器,上次接收路由資訊分别在5秒和27秒之前。
要了解路由器之間交換路由資訊的詳情,可以使用debug ip rip指令。如下所示,輸入指令後,隔一段時間,控制台上出現接收或者發送RIP廣播的資訊。
testBJ#debug ip rip
RIP protocol debugging is on
RIP: received v1 update from 172.16.2.2 on Serial1/0
172.16.4.0 in 1 hops
172.16.3.0 in 1 hops
RIP: received v1 update from 172.16.1.3 on Ethernet0/1
172.16.4.0 in 2 hops
RIP: sending v1 update to 255.255.255.255 via Ethernet0/1 (172.16.1.2)
subnet 172.16.4.0, metric 2
subnet 172.16.2.0, metric 1
RIP: sending v1 update to 255.255.255.255 via Serial1/0 (172.16.2.3)
subnet 172.16.1.0, metric 1
testBJ#no debug all
All possible debugging has been turned off
從上述資訊中可以得到RIP廣播的詳情。路由器先是從testTJ收到子網3、4的資訊,然後又從testSH收到子網3、4的資訊。其中,到子網4走testTJ一跳,走testSH兩跳,是以,路由表中反映出來的是經由testTJ到子網4;到子網3的距離都是一跳,是以,路由表中有兩條并列的路由。
一段時間後,目前路由器的更新計時達到30秒,于是,它在兩條鍊路上廣播自身的路由表資訊。注意,廣播路由更新時,RIP采用了水準分割機制,從一個端口上學得的資訊就不在這個端口上進行廣播,是以目前路由器testBJ隻發送子網172.16.1.0的路由資訊。
使用no debug all指令結束調試資訊的顯示。需要注意的是debug指令非常消耗路由器資源,是以不要在通訊繁忙的路由器上使用,否則,路由器就會象當機一樣停止反應。
怎麼樣,你看一遍這篇文章用了多少時間。下面可以找幾台路由器,試着配置一下,不是很困難吧。
體會網絡連通時的樂趣,将這裡作為你學習路由器的起點,IGRP、OSPF、HSRP等等,不過,再往後學,100分鐘可就不夠了……