選路是IP層最重要的一個(gè)功能之一。前面的部分已經(jīng)簡(jiǎn)單的講過(guò)路由器是通過(guò)何種規(guī)則來(lái)根據(jù)IP數(shù)據(jù)包的IP地址來(lái)選擇路由。這里就不重復(fù)了。首先來(lái)看看一個(gè)簡(jiǎn)單的系統(tǒng)路由表。
對(duì)于一個(gè)給定的路由器,可以打印出五種不同的flag。
U沒(méi)啥可說(shuō)的,G說(shuō)明這是一個(gè)網(wǎng)關(guān),如果你要發(fā)數(shù)據(jù)給Destination,IP頭應(yīng)該寫Destination的IP地址,而數(shù)據(jù)鏈路層的MAC地址就應(yīng)該是GateWay的Mac地址了;反之,如果沒(méi)有G標(biāo)志,那么數(shù)據(jù)鏈路層和IP層的地址應(yīng)該是對(duì)應(yīng)的。H說(shuō)明了Destination的性質(zhì),如果是H的,則說(shuō)明該地址是一個(gè)完整的地址,既有網(wǎng)絡(luò)號(hào)又有主機(jī)號(hào),那么再匹配的時(shí)候就既要匹配網(wǎng)絡(luò)號(hào),又要匹配主機(jī)號(hào);反之,Destination就代表一個(gè)網(wǎng)絡(luò),在匹配的時(shí)候只要匹配一下網(wǎng)絡(luò)號(hào)就可以了。
這樣,IP選路的方式就可以更加具體化了。如下
順便提一下那個(gè)GenMask(還記得子網(wǎng)掩碼么),它指定了目的地址的子網(wǎng)號(hào),例如第一條的子網(wǎng)就是11。
一般,我們?cè)谂渲煤靡粋€(gè)網(wǎng)絡(luò)接口的時(shí)候,一個(gè)路由就被直接創(chuàng)建好了。當(dāng)然我們也可以手動(dòng)添加路由。用route add命令就可以了。
而當(dāng)一個(gè)IP包在某一個(gè)路由器的時(shí)候發(fā)現(xiàn)沒(méi)有路由可走,那么該路由器就會(huì)給源主機(jī)發(fā)送“主機(jī)不可達(dá)”或者“網(wǎng)絡(luò)不可達(dá)”的ICMP包來(lái)報(bào)錯(cuò)。
注意,一般的操作系統(tǒng)默認(rèn)是沒(méi)有路由功能的,這需要自己配置。這些歷史原因就不細(xì)說(shuō)了,
當(dāng)IP包在某一個(gè)地方轉(zhuǎn)向的時(shí)候,都回給發(fā)送IP報(bào)的源主機(jī)一個(gè)ICMP重定向報(bào)文,而源主機(jī)就可以利用這個(gè)信息來(lái)更新自己的路由表,這樣,隨著網(wǎng)絡(luò)通信的逐漸增多,路由表也就越來(lái)越完備,數(shù)據(jù)轉(zhuǎn)發(fā)的速度也會(huì)越來(lái)越快。我們需要注意的是:
在主機(jī)引導(dǎo)的時(shí)候,一般會(huì)發(fā)送在網(wǎng)內(nèi)廣播一個(gè)路由請(qǐng)求的ICMP報(bào)文,而多個(gè)路由器則會(huì)回應(yīng)一個(gè)路由通告報(bào)文。而且,路由其本身不定期的在網(wǎng)絡(luò)內(nèi)發(fā)布路由通告報(bào)文,這樣,根據(jù)這些報(bào)文,每一個(gè)主機(jī)都會(huì)有機(jī)會(huì)建立自己的路由表而實(shí)現(xiàn)網(wǎng)絡(luò)通信。路由器在一份通告報(bào)文中可以通告多個(gè)地址,并且給出每一個(gè)地址的優(yōu)先等級(jí),這個(gè)優(yōu)先等級(jí)是該IP作為默認(rèn)路由的等級(jí),至于怎么算的就不深究了。
路由器一般會(huì)在450-600秒的時(shí)間間隔內(nèi)發(fā)布一次通告,而一個(gè)給定的通告報(bào)文的壽命是30分鐘。而主機(jī)在引導(dǎo)的時(shí)候會(huì)每三秒發(fā)送一次請(qǐng)求報(bào)文,一旦接受到一個(gè)有效的通告報(bào)文,就停止發(fā)送請(qǐng)求報(bào)文。
在TCP/IP詳解編寫的時(shí)候,只有Solaris2.x支持這兩種報(bào)文,大多數(shù)系統(tǒng)還不支持這兩種報(bào)文。(后面還會(huì)講到一些有用的路由報(bào)文)
前面的選路方法叫做靜態(tài)選路,簡(jiǎn)要地說(shuō)就是在配置接口的時(shí)候,以默認(rèn)的方式生成路由表項(xiàng)。并通過(guò)route來(lái)增加表項(xiàng),或者通過(guò)ICMP報(bào)文來(lái)更新表項(xiàng)(通常在默認(rèn)方式出錯(cuò)的情況下)。 而如果上訴三種方法都不能滿足,那么我們就使用動(dòng)態(tài)選路。
動(dòng)態(tài)選路協(xié)議是用于動(dòng)態(tài)選路的重要組成部分,但是他們只是使用在路由器之間,相鄰路由器之間互相通信。系統(tǒng)(路有選擇程序)選擇比較合適的路有放到核心路由表中,然后系統(tǒng)就可以根據(jù)這個(gè)核心路有表找到最合適的網(wǎng)路。也就是說(shuō),動(dòng)態(tài)選路是在系統(tǒng)核心網(wǎng)絡(luò)外部進(jìn)行的,它只是用一些選路的策略影響路由表,而不會(huì)影響到最后通過(guò)路由表選擇路由的那一部分。選路協(xié)議有一大類常用的叫做內(nèi)部網(wǎng)關(guān)協(xié)議(IGP),而在IGP中,RIP就是其中最重要的協(xié)議。一種新的IGP協(xié)議叫做開(kāi)放最短路經(jīng)優(yōu)先(OSPF)協(xié)議,其意在取代RIP。另一種最早用在網(wǎng)路骨干網(wǎng)上的IGP協(xié)議--HELLO,現(xiàn)在已經(jīng)不用了。
如今,任何支持動(dòng)態(tài)選路的路由器都必須同時(shí)支持OSPF和RIP,還可以選擇性的支持其他的IGP協(xié)議。
Unix系統(tǒng)上面通常都有路由守護(hù)程序--routed。還有一個(gè)叫做gate。gate所支持的協(xié)議要比routed多,routed只是支持RIPv1版本。而gate則支持RIPv1、v2,BGPv1 等等。
它的定義可以在RFC1058內(nèi)找到,這種協(xié)議使用UDP作為載體(也就是UDP的上層協(xié)議)。我們最關(guān)心的就是RIP其中的一個(gè)段,叫做度量的段,這是一個(gè)以hop作為計(jì)數(shù)器(就是以走過(guò)多少路由為計(jì)數(shù)器)的段(IP協(xié)議里面也有一個(gè)TTL不是么)。這個(gè)度量段將最終影響到路由表的建立。參考圖:
一般說(shuō)來(lái)routed要承擔(dān)如下的工作:
這個(gè)協(xié)議看起來(lái)會(huì)工作的很好,但是,這里面其實(shí)有很多隱藏的憂患,比如說(shuō)RIP沒(méi)有子網(wǎng)的概念,比如說(shuō)環(huán)路的危險(xiǎn)。而且hop數(shù)的上限也限制了網(wǎng)絡(luò)的大小。
因此,出現(xiàn)了很多RIPv1的替代品,比如說(shuō)RIPv2,比如說(shuō)OSPF。他們都是通過(guò)某種策略來(lái)影響路由表,所以就不說(shuō)了。
聯(lián)系客服