Cisco路由技術(shù)基礎(chǔ)知識(shí)詳解
Cisco路由技術(shù)基礎(chǔ)知識(shí)詳解
最簡(jiǎn)單的網(wǎng)絡(luò)可以想象成單線的總線,各個(gè)計(jì)算機(jī)可以通過(guò)向總線發(fā)送分組以互相通信。但隨著網(wǎng)絡(luò)中的計(jì)算機(jī)數(shù)目增長(zhǎng),這就很不可行了,會(huì)產(chǎn)生許多問(wèn)題:
1、帶寬資源耗盡。
2、每臺(tái)計(jì)算機(jī)都浪費(fèi)許多時(shí)間處理無(wú)關(guān)的廣播數(shù)據(jù)。
3、網(wǎng)絡(luò)變得無(wú)法管理,任何錯(cuò)誤都可能導(dǎo)致整個(gè)網(wǎng)絡(luò)癱瘓。
4、每臺(tái)計(jì)算機(jī)都可以監(jiān)聽(tīng)到其他計(jì)算機(jī)的通信。
把網(wǎng)絡(luò)分段可以解決這些問(wèn)題,但同時(shí)你必須提供一種機(jī)制使不同網(wǎng)段的計(jì)算機(jī)可以互相通信,這通常涉及到在一些ISO網(wǎng)絡(luò)協(xié)議層選擇性地在網(wǎng)段間傳送數(shù)據(jù),我們來(lái)看一下網(wǎng)絡(luò)協(xié)議層和路由器的位置。
我們可以看到,路由器位于網(wǎng)絡(luò)層。本文假定網(wǎng)絡(luò)層協(xié)議為IPv4,因?yàn)檫@是最流行的協(xié)議,其中涉及的概念與其他網(wǎng)絡(luò)層協(xié)議是類(lèi)似的。
一、路由與橋接
路由相對(duì)于2層的橋接/交換是高層的概念,不涉及網(wǎng)絡(luò)的物理細(xì)節(jié)。在可路由的網(wǎng)絡(luò)中,每臺(tái)主機(jī)都有同樣的網(wǎng)絡(luò)層地址格式(如IP地址),而無(wú)論它是運(yùn)行在以太網(wǎng)、令牌環(huán)、FDDI還是廣域網(wǎng)。網(wǎng)絡(luò)層地址通常由兩部分構(gòu)成:網(wǎng)絡(luò)地址和主機(jī)地址。
網(wǎng)橋只能連接數(shù)據(jù)鏈路層相同(或類(lèi)似)的網(wǎng)絡(luò),路由器則不同,它可以連接任意兩種網(wǎng)絡(luò),只要主機(jī)使用的是相同的網(wǎng)絡(luò)層協(xié)議。
二、連接網(wǎng)絡(luò)層與數(shù)據(jù)鏈路層
網(wǎng)絡(luò)層下面是數(shù)據(jù)鏈路層,為了它們可以互通,需要“粘合”協(xié)議。ARP(地址解析協(xié)議)用于把網(wǎng)絡(luò)層(3層)地址映射到數(shù)據(jù)鏈路層(2層)地址,RARP(反向地址解析協(xié)議)則反之。
雖然ARP的定義與網(wǎng)絡(luò)層協(xié)議無(wú)關(guān),但它通常用于解析IP地址;最常見(jiàn)的數(shù)據(jù)鏈路層是以太網(wǎng)。因此下面的ARP和RARP的例子基于IP和以太網(wǎng),但要注意這些概念對(duì)其他協(xié)議也是一樣的。
1、地址解析協(xié)議
網(wǎng)絡(luò)層地址是由網(wǎng)絡(luò)管理員定義的抽象映射,它不去關(guān)心下層是哪種數(shù)據(jù)鏈路層協(xié)議。然而,網(wǎng)絡(luò)接口只能根據(jù)2層地址來(lái)互相通信,2層地址通過(guò)ARP從3層地址得到。
并不是發(fā)送每個(gè)數(shù)據(jù)包都需要進(jìn)行ARP請(qǐng)求,回應(yīng)被緩存在本地的ARP表中,這樣就減少了網(wǎng)絡(luò)中的ARP包。ARP的維護(hù)比較容易,是一個(gè)比較簡(jiǎn)單的協(xié)議。
2、簡(jiǎn)介
如果接口A想給接口B發(fā)送數(shù)據(jù),并且A只知道B的IP地址,它必須首先查找B的物理地址,它發(fā)送一個(gè)含有B的IP地址的ARP廣播請(qǐng)求B的物理地址,接口B收到該廣播后,向A回應(yīng)其物理地址。
注意,雖然所有接口都收到了信息,但只有B回應(yīng)該請(qǐng)求,這保證了回應(yīng)的正確且避免了過(guò)期的信息。要注意的是,當(dāng)A和B不在同一網(wǎng)段時(shí),A只向下一跳的路由器發(fā)送ARP請(qǐng)求,而不是直接向B發(fā)送。 接收到ARP分組后處理,注意發(fā)送者的對(duì)被存到接收ARP請(qǐng)求的主機(jī)的本地ARP表中,一般A想與B通信時(shí),B可能也需要與A通信。
3、IP地址沖突
ARP產(chǎn)生的問(wèn)題中最常見(jiàn)的是IP地址的沖突,這是由于兩個(gè)不同的主機(jī)IP地址相同產(chǎn)生的,在任何互聯(lián)的網(wǎng)絡(luò)中,IP地址必須是唯一的。這時(shí)會(huì)收到兩個(gè)ARP回應(yīng),分別指出了不同的硬件地址,這是嚴(yán)重的錯(cuò)誤,沒(méi)有簡(jiǎn)單的解決辦法。
為了避免出現(xiàn)這類(lèi)錯(cuò)誤,當(dāng)接口A初試化時(shí),它發(fā)送一個(gè)含有其IP地址的ARP請(qǐng)求,如果沒(méi)有收到回應(yīng),A就假定該IP地址沒(méi)有被使用。我們假定接口B已經(jīng)使用了該IP地址,那么B就發(fā)送一個(gè)ARP回應(yīng),A就可以知道該IP地址已被使用,它就不能再使用該IP地址,而是返回錯(cuò)誤信息。這樣又產(chǎn)生一個(gè)問(wèn)題,假設(shè)主機(jī)C含有該IP地址的映射,是映射到B的硬件地址的,它收到接口A的ARP廣播后,更新其ARP表使之指向A的硬件地址。為了解決這個(gè)錯(cuò)誤,B再次發(fā)送一個(gè)ARP請(qǐng)求廣播,這樣主機(jī)C又更新其ARP表再次指向B的硬件地址。這時(shí)網(wǎng)絡(luò)的狀態(tài)又回到先前的狀態(tài),有可能C已經(jīng)向A發(fā)送了應(yīng)該發(fā)送給B的IP分組,這很不幸,但是因?yàn)镮P提供的是無(wú)保證的傳輸,所以不會(huì)產(chǎn)生大的問(wèn)題。
4、管理ARP緩存表
ARP緩存表是對(duì)的列表,根據(jù)IP地址索引。該表可以用命令arp來(lái)管理,其語(yǔ)法包括:
向表中添加靜態(tài)表項(xiàng) -- arp -s
從表中刪除表項(xiàng) -- arp -d
顯示表項(xiàng) -- arp -a
ARP表中的動(dòng)態(tài)表項(xiàng)(沒(méi)有手動(dòng)加入的表項(xiàng))通常過(guò)一段時(shí)間自動(dòng)刪除,這段時(shí)間的長(zhǎng)度由特定的TCP/IP實(shí)現(xiàn)決定。
5、靜態(tài)ARP地址的使用
靜態(tài)ARP地址的典型使用是設(shè)置獨(dú)立的打印服務(wù)器,這些設(shè)備通常通過(guò)telnet來(lái)配置,但首先它們需要一個(gè)IP地址。沒(méi)有明顯的方法來(lái)把此信息告訴該設(shè)備,好象只能使用其串口來(lái)設(shè)置。但是,這需要找一個(gè)合適的終端和串行電纜,設(shè)置波特率、奇偶校驗(yàn)等,很不方便。
假設(shè)我們想給一個(gè)打印服務(wù)器設(shè)置IP地址P-IP,并且我們知道其硬件地址P-hard,在工作站A上創(chuàng)建一個(gè)靜態(tài)ARP表項(xiàng)把P-IP映射到P-hard,這樣,雖然打印服務(wù)器不知道自己的IP地址,但是所有指向P-IP的數(shù)據(jù)就將被送到P-hard。我們現(xiàn)在就可以telnet到P-IP并配置其IP地址了,然后再刪除該靜態(tài)ARP表項(xiàng)。
有時(shí)會(huì)在一個(gè)子網(wǎng)里配置打印服務(wù)器,而在另一個(gè)子網(wǎng)里使用它,方法與上面類(lèi)似。假設(shè)其IP地址為P-IP,我們分配一個(gè)本網(wǎng)的臨時(shí)IP地址T-IP給它,在工作站A上創(chuàng)建臨時(shí)ARP表項(xiàng)把T-IP映射到P-hard,然后telnet到T-IP,給打印服務(wù)器配以IP地址P-IP。接下來(lái)就可以把它放到另一個(gè)子網(wǎng)里使用了,別忘了刪除靜態(tài)ARP表項(xiàng)。
6、代理ARP
可以通過(guò)使用代理ARP來(lái)避免在每臺(tái)主機(jī)上配置路由表,在使用子網(wǎng)時(shí)這特別有用,但注意,不是所有的主機(jī)都能理解子網(wǎng)的?;镜乃枷胧羌词箤?duì)于不在本子網(wǎng)的主機(jī)也發(fā)送ARP請(qǐng)求,ARP代理服務(wù)器(通常是網(wǎng)關(guān))回應(yīng)以網(wǎng)關(guān)的硬件地址。
代理ARP簡(jiǎn)化了主機(jī)的管理,但是增加了網(wǎng)絡(luò)的通信量(不是很 明顯),并且可能需要較大的ARP緩存,每個(gè)不在本網(wǎng)的IP地址都被創(chuàng)建一個(gè)表項(xiàng),都映射到網(wǎng)關(guān)的硬件地址。在使用代理ARP的主機(jī)看來(lái),世界就象一個(gè)大的沒(méi)有路由器物理網(wǎng)絡(luò)。
三、IP地址
在可路由的網(wǎng)絡(luò)層協(xié)議中,協(xié)議地址必須含有兩部分信息:網(wǎng)絡(luò)地址和主機(jī)地址。存貯這種信息最明顯的方法是用兩個(gè)分離的域,這樣我們必須考慮到兩個(gè)域的最大長(zhǎng)度,有些協(xié)議(如IPX)就是這樣的,它在小型和中型的網(wǎng)絡(luò)里可以工作的很好。
另一種方案是減少主機(jī)地址域的長(zhǎng)度,如24位網(wǎng)絡(luò)地址、8位主機(jī)地址,這樣就有了較多的網(wǎng)段,但每個(gè)網(wǎng)段內(nèi)的主機(jī)數(shù)目很少。這樣一來(lái),對(duì)于多于256個(gè)主機(jī)的網(wǎng)絡(luò),就必須分配多個(gè)網(wǎng)段,其問(wèn)題是很多的網(wǎng)絡(luò)給路由器造成了難以忍受的負(fù)擔(dān)。
IP把網(wǎng)絡(luò)地址和主機(jī)地址一起包裝在一個(gè)32位的域里,有時(shí)主機(jī)地址部分很短,有時(shí)很長(zhǎng),這樣可以有效利用地址空間,減少I(mǎi)P地址的長(zhǎng)度,并且網(wǎng)絡(luò)數(shù)目不算多。有兩種將主機(jī)地址分離出來(lái)的方法:基于類(lèi)的地址和無(wú)類(lèi)別的地址。
1、主機(jī)和網(wǎng)關(guān)
主機(jī)和網(wǎng)關(guān)的區(qū)別常產(chǎn)生混淆,這是由于主機(jī)意義的轉(zhuǎn)變。在RFC中(1122/3和1009)中定義為:
主機(jī)是連接到一個(gè)或多個(gè)網(wǎng)絡(luò)的設(shè)備,它可以向任何一個(gè)網(wǎng)絡(luò)發(fā)送和從其接收數(shù)據(jù),但它從不把數(shù)據(jù)從一個(gè)網(wǎng)絡(luò)傳向另一個(gè)。
網(wǎng)關(guān)是連接到多于一個(gè)網(wǎng)絡(luò)的設(shè)備,它選擇性的把數(shù)據(jù)從一個(gè)網(wǎng)絡(luò)轉(zhuǎn)發(fā)到其它網(wǎng)絡(luò)。
換句話說(shuō),過(guò)去主機(jī)和網(wǎng)關(guān)的概念被人工地區(qū)分開(kāi)來(lái),那時(shí)計(jì)算機(jī)沒(méi)有足夠的能力同時(shí)用作主機(jī)和網(wǎng)關(guān)。主機(jī)是用戶工作的計(jì)算機(jī),或是文件服務(wù)器等?,F(xiàn)代的計(jì)算機(jī)的能力足以同時(shí)擔(dān)當(dāng)這兩種角色,因此,現(xiàn)代的主機(jī)定義應(yīng)該如此:
主機(jī)是連接到一個(gè)或多個(gè)網(wǎng)絡(luò)的設(shè)備,它可以向任何一個(gè)網(wǎng)絡(luò)發(fā)送和從其接收數(shù)據(jù)。它也可以作為網(wǎng)關(guān),但這不是其唯一的目的。
路由器是專(zhuān)用的網(wǎng)關(guān),其硬件經(jīng)過(guò)特殊的設(shè)計(jì)使其能以極小的延遲轉(zhuǎn)發(fā)大量的數(shù)據(jù)。然而,網(wǎng)關(guān)也可以是有多個(gè)網(wǎng)卡的標(biāo)準(zhǔn)的計(jì)算機(jī),其操作系統(tǒng)的網(wǎng)絡(luò)層有能力轉(zhuǎn)發(fā)數(shù)據(jù)。由于專(zhuān)用的路由硬件較便宜,計(jì)算機(jī)用作網(wǎng)關(guān)已經(jīng)很少見(jiàn)了,在只有一個(gè)撥號(hào)連接的小站點(diǎn)里,還可能使用計(jì)算機(jī)作為非專(zhuān)用的網(wǎng)關(guān)。
2、基于類(lèi)的地址
最初設(shè)計(jì)IP時(shí),地址根據(jù)第一個(gè)字節(jié)被分成幾類(lèi):
0: 保留
1-126: A類(lèi)(網(wǎng)絡(luò)地址:1字節(jié),主機(jī)地址:3字節(jié))
127: 保留
128-191: B類(lèi)(網(wǎng)絡(luò)地址:2字節(jié),主機(jī)地址:2字節(jié))
192-223: C類(lèi)(網(wǎng)絡(luò)地址:3字節(jié),主機(jī)地址:1字節(jié))
224-255: 保留
3、子網(wǎng)劃分
雖然基于類(lèi)的地址系統(tǒng)對(duì)因特網(wǎng)服務(wù)提供商來(lái)說(shuō)工作得很好,但它不能在一個(gè)網(wǎng)絡(luò)內(nèi)部做任何路由,其目的是使用第二層(橋接/交換)來(lái)導(dǎo)引網(wǎng)絡(luò)中的數(shù)據(jù)。在大型的A類(lèi)網(wǎng)絡(luò)中,這就成了個(gè)特殊的問(wèn)題,因?yàn)樵诖笮途W(wǎng)絡(luò)中僅使用橋接/交換使其非常難以管理。在邏輯上其解決辦法是把大網(wǎng)絡(luò)分割成若干小的網(wǎng)絡(luò),但在基于類(lèi)的地址系統(tǒng)中這是不可能的。為了解決這個(gè)問(wèn)題,出現(xiàn)了一個(gè)新的域:子網(wǎng)掩碼。子網(wǎng)掩碼指出地址中哪些部分是網(wǎng)絡(luò)地址,哪些是主機(jī)地址。在子網(wǎng)掩碼中,二進(jìn)制1表示網(wǎng)絡(luò)地址位,二進(jìn)制0表示主機(jī)地址位。傳統(tǒng)的各類(lèi)地址的子網(wǎng)掩碼為:
A類(lèi):255.0.0.0
B類(lèi):255.255.0.0
C類(lèi):255.255.255.0
如果想把一個(gè)B類(lèi)網(wǎng)絡(luò)的地址用作C類(lèi)大小的地址,可以使用掩碼255.255.255.0。
用較長(zhǎng)的子網(wǎng)掩碼把一個(gè)網(wǎng)絡(luò)分成多個(gè)網(wǎng)絡(luò)就叫做劃分子網(wǎng)。要注意的是,一些舊軟件不支持子網(wǎng),因?yàn)樗鼈儾焕斫庾泳W(wǎng)掩碼。例如UNIX的routed路由守護(hù)進(jìn)程通常使用的路由協(xié)議是版本1的RIP,它是在子網(wǎng)掩碼出現(xiàn)前設(shè)計(jì)的。
上面只介紹了三種子網(wǎng)掩碼:255.0.0.0、255.255.0.0和255.255.255.0,它們是字節(jié)對(duì)齊的子網(wǎng)掩碼。但是也可以在字節(jié)中間對(duì)其進(jìn)行劃分,這里不進(jìn)行詳細(xì)講解,請(qǐng)參照相關(guān)的TCP/IP書(shū)籍。
子網(wǎng)使我們可以擁有新的規(guī)模的網(wǎng)絡(luò),包括很小的用于點(diǎn)到點(diǎn)連接的網(wǎng)絡(luò)(如掩碼255.255.255.252,30位的網(wǎng)絡(luò)地址,2位的主機(jī)地址:兩個(gè)主機(jī)的子網(wǎng)),或中型網(wǎng)絡(luò)(如掩碼255.255.240.0,20位網(wǎng)絡(luò)地址,12位主機(jī)地址:4094個(gè)主機(jī)的子網(wǎng))。
注意DNS被設(shè)計(jì)為只允許字節(jié)對(duì)齊的IP網(wǎng)絡(luò)(在in-addr.arpa.域中)。
4、超網(wǎng)(supernetting)
超網(wǎng)是與子網(wǎng)類(lèi)似的概念--IP地址根據(jù)子網(wǎng)掩碼被分為獨(dú)立的網(wǎng)絡(luò)地址和主機(jī)地址。但是,與子網(wǎng)把大網(wǎng)絡(luò)分成若干小網(wǎng)絡(luò)相反,它是把一些小網(wǎng)絡(luò)組合成一個(gè)大網(wǎng)絡(luò)--超網(wǎng)。
假設(shè)現(xiàn)在有16個(gè)C類(lèi)網(wǎng)絡(luò),從201.66.32.0到201.66.47.0,它們可以用子網(wǎng)掩碼255.255.240.0統(tǒng)一表示為網(wǎng)絡(luò)201.66.32.0。但是,并不是任意的地址組都可以這樣做,例如16個(gè)C類(lèi)網(wǎng)絡(luò)201.66.71.0到201.66.86.0就不能形成一個(gè)統(tǒng)一的網(wǎng)絡(luò)。不過(guò)這其實(shí)沒(méi)關(guān)系,只要策略得當(dāng),總能找到合適的一組地址的。
5、可變長(zhǎng)子網(wǎng)掩碼(VLSM)
如果你想把你的網(wǎng)絡(luò)分成多個(gè)不同大小的子網(wǎng),可以使用可變長(zhǎng)子網(wǎng)掩碼,每個(gè)子網(wǎng)可以使用不同長(zhǎng)度的子網(wǎng)掩碼。例如:如果你按部門(mén)劃分網(wǎng)絡(luò),一些網(wǎng)絡(luò)的掩碼可以為255.255.255.0(多數(shù)部門(mén)),其它的可為255.255.252.0(較大的部門(mén))。
6、無(wú)類(lèi)別地址(CIDR)
因特網(wǎng)上的主機(jī)數(shù)量增長(zhǎng)超出了原先的設(shè)想,雖然還遠(yuǎn)沒(méi)達(dá)到232,但地址已經(jīng)出現(xiàn)匱乏。1993年發(fā)表的RFC1519--無(wú)類(lèi)別域間路由CIDR(Classless Inter-Domain Routing)--是一個(gè)嘗試
解決此問(wèn)題的方法。CIDR試圖延長(zhǎng)IPv4的壽命,與128位地址的IPv6不同,它并不能最終解決地址空間的耗盡,但I(xiàn)Pv6的實(shí)現(xiàn)是個(gè)龐大的任務(wù),因特網(wǎng)目前還沒(méi)有做好準(zhǔn)備。CIDR給了我們緩沖的準(zhǔn)備時(shí)間。
基于類(lèi)的地址系統(tǒng)工作的不錯(cuò),它在有效的地址使用和少量的網(wǎng)絡(luò)數(shù)目間做出了較好的折衷。但是隨著因特網(wǎng)意想不到的成長(zhǎng)出現(xiàn)了兩個(gè)主要的問(wèn)題:
已分配的網(wǎng)絡(luò)數(shù)目的增長(zhǎng)使路由表大得難以管理,相當(dāng)程度上降低了路由器的處理速度。
僵化的地址分配方案使很多地址被浪費(fèi),尤其是B類(lèi)地址十分匱乏。
為了解決第二個(gè)問(wèn)題,可以分配多個(gè)較小的網(wǎng)絡(luò),例如,用多個(gè)C類(lèi)網(wǎng)絡(luò)而不是一個(gè)B類(lèi)網(wǎng)絡(luò)。雖然這樣能夠很有效地分配地址,但是更加劇了路由表的膨脹(第一個(gè)問(wèn)題)。
在CIDR中,地址根據(jù)網(wǎng)絡(luò)拓?fù)鋪?lái)分配。連續(xù)的一組網(wǎng)絡(luò)地址可以被分配給一個(gè)服務(wù)提供商,使整組地址作為一個(gè)網(wǎng)絡(luò)地址(很可能使用超網(wǎng)技術(shù))。例如:一個(gè)服務(wù)提供商被分配以256個(gè)C類(lèi)地址,從213.79.0.0到213.79.255.0,服務(wù)提供商給每個(gè)用戶分配一個(gè)C類(lèi)地址,但服務(wù)提供商外部的路由表只通過(guò)一個(gè)表項(xiàng)--掩碼為255.255.0.0的網(wǎng)絡(luò)213.79.0.0--來(lái)分辨這些路由。
這種方法明顯減少了路由表的增長(zhǎng),CIDR RFC的作者估計(jì),如果90%的服務(wù)提供商使用了CIDR,路由表將以每3年54%的速度增長(zhǎng),而如果沒(méi)有使用CIDR,則增長(zhǎng)速度為776%。如果可以重新組織現(xiàn)有的地址,則因特網(wǎng)骨干上的路由器廣播的路由數(shù)量將大大減少。但這實(shí)際是不可行的,因?yàn)閷?lái)巨大的管理負(fù)擔(dān)。
四、路由
1、路由表
如果一個(gè)主機(jī)有多個(gè)網(wǎng)絡(luò)接口,當(dāng)向一個(gè)特定的IP地址發(fā)送分組時(shí),它怎樣決定使用哪個(gè)接口呢?答案就在路由表中。來(lái)看下面的例子:
目的 子網(wǎng)掩碼 網(wǎng)關(guān) 標(biāo)志 接口
201.66.37.0 255.255.255.0 201.66.37.74 U eth0
201.66.39.0 255.255.255.0 201.66.39.21 U eth1
主機(jī)將所有目的地為網(wǎng)絡(luò)201.66.37.0內(nèi)主機(jī)(201.66.37.1-201.66.37.254)的數(shù)據(jù)通過(guò)接口eth0(IP地址為201.66.37.74)發(fā)送,所有目的地為網(wǎng)絡(luò)201.66.39.0內(nèi)主機(jī)的數(shù)據(jù)通過(guò)接口eth1(IP地址為201.66.39.21)發(fā)送。標(biāo)志U表示該路由狀態(tài)為“up”(即激活狀態(tài))。對(duì)于直接連接的網(wǎng)絡(luò),一些軟件并不象上例中一樣給出接口的IP地址,而只列出接口。
此例只涉及了直接連接的主機(jī),那么目的主機(jī)在遠(yuǎn)程網(wǎng)絡(luò)中如何呢?如果你通過(guò)IP地址為201.66.37.254的網(wǎng)關(guān)連接到網(wǎng)絡(luò)73.0.0.0,那么你可以在路由表中增加這樣一項(xiàng):
目的 73.0.0.0
掩碼 255.0.0.0
網(wǎng)關(guān) 201.66.37.254
標(biāo)志 UG
接口 eth0
此項(xiàng)告訴主機(jī)所有目的地為網(wǎng)絡(luò)73.0.0.0內(nèi)主機(jī)的分組通過(guò)201.66.37.254路由過(guò)去。標(biāo)志G(gateway)表示此項(xiàng)把分組導(dǎo)向外部網(wǎng)關(guān)。類(lèi)似的,也可以定義通過(guò)網(wǎng)關(guān)到達(dá)特定主機(jī)的路由,增加標(biāo)志H(host):
目的 掩碼 網(wǎng)關(guān) 標(biāo)志 接口
91.32.74.21 255.255.255.255 201.66.37.254 UGH eth0
下面是路由表的基礎(chǔ),除了特殊表項(xiàng)之外:
目的 掩碼 網(wǎng)關(guān) 標(biāo)志 接口
127.0.0.1 255.255.255.255 127.0.0.1 UH lo0
default 0.0.0.0 201.66.37.254 UG eth1
第一項(xiàng)是loopback接口,用于主機(jī)給自己發(fā)送數(shù)據(jù),通常用于測(cè)試和運(yùn)行于IP之上但需要本地通信的應(yīng)用。這是到特定地址127.0.0.1的主機(jī)路由(接口lo0是IP協(xié)議棧內(nèi)部的“假”網(wǎng)卡)。第二項(xiàng)十分有意思,為了防止在主機(jī)上定義到因特網(wǎng)上每一個(gè)可能到達(dá)網(wǎng)絡(luò)的路由,可以定義一個(gè)缺省路由,如果在路由表中沒(méi)有與目的地址相匹配的項(xiàng),該分組就被送到缺省網(wǎng)關(guān)。多數(shù)主機(jī)簡(jiǎn)單地通過(guò)一個(gè)網(wǎng)卡連接到網(wǎng)絡(luò),因此只有通過(guò)一個(gè)路由器到其它網(wǎng)絡(luò),這樣在路由表中只有三項(xiàng):loopback項(xiàng)、本地子網(wǎng)項(xiàng)和缺省項(xiàng)(指向路由器)。
2、重疊路由
假設(shè)在路由表中有下列重疊項(xiàng):
目的 掩碼 網(wǎng)關(guān) 標(biāo)志 接口
1.2.3.4 255.255.255.255 201.66.37.253 UGH eth0
1.2.3.0 255.255.255.0 201.66.37.254 UG eth0
1.2.0.0 255.255.0.0 201.66.37.253 UG eth1
default 0.0.0.0 201.66.39.254 UG eth1
之所以說(shuō)這些路由重疊是因?yàn)檫@四個(gè)路由都含有地址1.2.3.4,如果向1.2.3.4發(fā)送數(shù)據(jù),會(huì)選擇哪條路由呢?在這種情況下,會(huì)選擇第一條路由,通過(guò)網(wǎng)關(guān)201.66.37.253。原則是選擇具有最長(zhǎng)(最精確)的子網(wǎng)掩碼。類(lèi)似的,發(fā)往1.2.3.5的數(shù)據(jù)選擇第二條路由。
注意:這條原則只適用于間接路由(通過(guò)網(wǎng)關(guān))。把兩個(gè)接口定義在同一子網(wǎng)在很多軟件實(shí)現(xiàn)上是非法的。例如下面的設(shè)置通常是非法的(不過(guò)有些軟件將嘗試在兩個(gè)接口進(jìn)行負(fù)載平衡):
接口 IP地址 子網(wǎng)掩碼
eth0 201.66.37.1 255.255.255.0
eth1 201.66.37.2 255.255.255.0
對(duì)于重疊路由的策略是十分有用的,它允許缺省路由作為目的為0.0.0.0、子網(wǎng)掩碼為0.0.0.0的路由進(jìn)行工作,而不需要作為路由軟件的一個(gè)特殊情況來(lái)實(shí)現(xiàn)。
回頭來(lái)看看CIDR,仍使用上面的例子:一個(gè)服務(wù)提供商被賦予256個(gè)C類(lèi)網(wǎng)絡(luò),從213.79.0.0到213.79.255.0。該服務(wù)提供商外部的路由表只以一個(gè)表項(xiàng)就了解了所有這些路由:213.79.0.0,子網(wǎng)掩碼為255.255.0.0。假設(shè)一個(gè)用戶移到了另一個(gè)服務(wù)提供商,他擁有網(wǎng)絡(luò)地址213.79.61.0,現(xiàn)在他是否必須 從新的服務(wù)提供商處取得新的網(wǎng)絡(luò)地址呢?如果是,意味著他必須重新配置每臺(tái)主機(jī)的IP地址,改變DNS設(shè)置,等等。幸運(yùn)的是,解決辦法很簡(jiǎn)單,原來(lái)的服務(wù)提供商保持路由213.79.0.0(子網(wǎng)掩碼為255.255.0.0),新的服務(wù)提供商則廣播路由213.79.61.0(子網(wǎng)掩碼為255.255.255.0),因?yàn)樾侣酚傻淖泳W(wǎng)掩碼較長(zhǎng),它將覆蓋原來(lái)的路由。
3、靜態(tài)路由
回頭看看我們已建立的路由表,已有了六個(gè)表項(xiàng):
目的 掩碼 網(wǎng)關(guān) 標(biāo)志 接口
127.0.0.1 255.255.255.255 127.0.0.1 UH lo0
201.66.37.0 255.255.255.0 201.66.37.74 U eth0
201.66.39.0 255.255.255.0 201.66.39.21 U eth1
default 0.0.0.0 201.66.39.254 UG eth1
73.0.0.0 255.0.0.0 201.66.37.254 UG eth0
91.32.74.21 255.255.255.255 201.66.37.254 UGH eth0
這些表項(xiàng)分別是怎么得到的呢?第一個(gè)是當(dāng)路由表初始化時(shí)由路由軟件加入的,第二、三個(gè)是當(dāng)網(wǎng)卡綁定IP地址時(shí)自動(dòng)創(chuàng)建的,其余三個(gè)必須手動(dòng)加入,在UNIX系統(tǒng)中,這是通過(guò)命令route來(lái)做的,可以由用戶手工執(zhí)行,也可以通過(guò)rc腳本在啟動(dòng)時(shí)執(zhí)行。上述方法涉及的是靜態(tài)路由,通常在啟動(dòng)時(shí)創(chuàng)建,并且沒(méi)有手工干預(yù)的話將不再改變。
4、路由協(xié)議
主機(jī)和網(wǎng)關(guān)都可以使用稱作動(dòng)態(tài)路由的技術(shù),這使路由表可以動(dòng)態(tài)改變。動(dòng)態(tài)路由需要路由協(xié)議來(lái)增加和刪除路由表項(xiàng),路由表還是和靜態(tài)路由一樣地工作,只是其增添和刪除是自動(dòng)的。
有兩種路由協(xié)議:內(nèi)部的和外部的。內(nèi)部協(xié)議在自制系統(tǒng)(AS)內(nèi)部路由,而外部協(xié)議則在自制系統(tǒng)間路由。自制系統(tǒng)通常在統(tǒng)一的控制管理之下,例如大的公司或大學(xué)。小的站點(diǎn)常常是其因特網(wǎng)服務(wù)提供商自制系統(tǒng)的一部分。
這里只討論內(nèi)部協(xié)議,很少有人涉及到甚至聽(tīng)說(shuō)外部協(xié)議。最常見(jiàn)的外部協(xié)議是外部網(wǎng)關(guān)協(xié)議EGP(External Gateway Protocol)和邊緣網(wǎng)關(guān)協(xié)議BGP(Border Gateway Protocol),BGP是較新的協(xié)議,在逐漸地取代EGP。
5、ICMP重定向
ICMP通常不被看作路由協(xié)議,但是ICMP重定向卻與路由協(xié)議的工作方式很類(lèi)似,所以將在這里討論一下。假設(shè)現(xiàn)在有上面所給的六個(gè)表項(xiàng)的路由表,分組被送往201.66.43.33,看看路由表,除了缺省路由外,這并不能匹配任何路由。靜態(tài)路由將其通過(guò)路由器201.66.39.254發(fā)送(trip 1),但是,該路由器知道所有發(fā)向子網(wǎng)201.66.43.0的分組應(yīng)該通過(guò)201.66.39.253,因此,它把分組轉(zhuǎn)發(fā)到適當(dāng)?shù)穆酚善?trip 2)。但是如果主機(jī)直接把分組發(fā)到201.66.39.253就會(huì)提高效率(trip 3)。
因?yàn)槁酚善靼逊纸M從同一接口發(fā)回了分組,所以它知道有更好的路由,路由器可以通過(guò)ICMP重定向指示主機(jī)使用新的路由。雖然路由器知道所有發(fā)向201.66.43.0子網(wǎng)的分組應(yīng)該通過(guò)201.66.39.253,它通常只發(fā)送特定的主機(jī)的ICMP重定向(此例中是201.66.43.33)。主機(jī)將在路由表中創(chuàng)建一個(gè)新的表項(xiàng):
目的 掩碼 網(wǎng)關(guān) 標(biāo)志 接口
201.66.43.33 255.255.255.255 201.66.39.253 UGHD eth1
注意標(biāo)志D,對(duì)所有由ICMP重定向創(chuàng)建的路由設(shè)置此標(biāo)志。將來(lái)此類(lèi)分組將通過(guò)新路由發(fā)送(trip 3)。
6、RIP
RIP是一種簡(jiǎn)單的內(nèi)部路由協(xié)議,已經(jīng)存在很久,被廣泛地實(shí)現(xiàn)(UNIX的routed就使用RIP)。它使用距離向量算法,所以其路由選擇只是基于兩點(diǎn)間的“跳(hop)”數(shù),穿過(guò)一個(gè)路由器認(rèn)為是一跳。主機(jī)和網(wǎng)關(guān)都可以運(yùn)行RIP,但是主機(jī)只是接收信息,而并不發(fā)送。路由信息可以從指定網(wǎng)關(guān)請(qǐng)求,但通常是每隔30秒廣播一次以保持正確性。RIP使用UDP通過(guò)端口520在主機(jī)和網(wǎng)關(guān)間通信。網(wǎng)關(guān)間傳送的信息用于建立路由表,由RIP選定的路由總是具有距離目的跳數(shù)最少的。RIP版本1在簡(jiǎn)單、較小的網(wǎng)絡(luò)中工作得不錯(cuò),但是在較大的網(wǎng)絡(luò)中,就出現(xiàn)一些問(wèn)題,有些問(wèn)題在RIP版本2中已糾正,但有些是由于其設(shè)計(jì)產(chǎn)生的限制。在下面的討論中,適用于兩種版本時(shí)簡(jiǎn)單稱為RIP,RIP v1和RIP v2則指特定的版本。
RIP并沒(méi)有任何鏈接質(zhì)量的概念,所有的鏈路都被認(rèn)為是相同的,低速的串行鏈路被認(rèn)為與高速的光纖鏈路是同樣的。RIP以最小的跳數(shù)來(lái)選擇路由,因此當(dāng)在下面兩個(gè)路由中選擇時(shí):
100Mbps的光纖鏈路,路由器,然后是10Mbps的以太網(wǎng)
9600bps的串行鏈路
RIP將選擇后者。RIP也沒(méi)有鏈路流量等級(jí)的概念。例如對(duì)于兩條以太網(wǎng)鏈路,其中一個(gè)很繁忙,另一個(gè)根本沒(méi)有數(shù)據(jù)流,RIP可能會(huì)選擇繁忙的那條鏈路。
RIP中的最大hop數(shù)是15,大于15則認(rèn)為不可到達(dá)。因此在很大的自制系統(tǒng)中,hop數(shù)很可能超過(guò)15,使用RIP是很不現(xiàn)實(shí)的。RIP v1不支持子網(wǎng),交換的信息中不含子網(wǎng)掩碼,對(duì)給定路由確定子網(wǎng)掩碼的方法各不相同,RIP v2則彌補(bǔ)了此缺點(diǎn)。RIP每隔30秒才進(jìn)行信息更新,因此在大網(wǎng)中斷鏈信息可能要花些時(shí)間才能傳播開(kāi)來(lái),路由信息的穩(wěn)定時(shí)間可能更長(zhǎng),并且在這段時(shí)間內(nèi)可能產(chǎn)生路由環(huán)路。對(duì)此有一些解決辦法,但這里不進(jìn)行討論。
可以看出,RIP是一個(gè)簡(jiǎn)單的路由協(xié)議,有一些限制,尤其在版本1中。不過(guò),它常常是某些操作系統(tǒng)的唯一選擇。