最簡(jiǎn)單的網(wǎng)絡(luò)可以想象成單線的總線,各個(gè)計(jì)算機(jī)可以通過向總線發(fā)送分組以互相通信。但隨著網(wǎng)絡(luò)中的計(jì)算機(jī)數(shù)目增長(zhǎng),這就很不可行了,會(huì)產(chǎn)生許多問題:
1、帶寬資源耗盡。
2、每臺(tái)計(jì)算機(jī)都浪費(fèi)許多時(shí)間處理無關(guān)的廣播數(shù)據(jù)。
3、網(wǎng)絡(luò)變得無法管理,任何錯(cuò)誤都可能導(dǎo)致整個(gè)網(wǎng)絡(luò)癱瘓。
4、每臺(tái)計(jì)算機(jī)都可以監(jiān)聽到其他計(jì)算機(jī)的通信。
把網(wǎng)絡(luò)分段可以解決這些問題,但同時(shí)你必須提供一種機(jī)制使不同網(wǎng)段的計(jì)算機(jī)可以互相通信,這通常涉及到在一些ISO網(wǎng)絡(luò)協(xié)議層選擇性地在網(wǎng)段間傳送數(shù)據(jù),我們來看一下網(wǎng)絡(luò)協(xié)議層和路由器的位置。
我們可以看到,路由器位于網(wǎng)絡(luò)層。本文假定網(wǎng)絡(luò)層協(xié)議為IPv4,因?yàn)檫@是最流行的協(xié)議,其中涉及的概念與其他網(wǎng)絡(luò)層協(xié)議是類似的。
一、路由與橋接
路由相對(duì)于2層的橋接/交換是高層的概念,不涉及網(wǎng)絡(luò)的物理細(xì)節(jié)。在可路由的網(wǎng)絡(luò)中,每臺(tái)主機(jī)都有同樣的網(wǎng)絡(luò)層地址格式(如IP地址),而無論它是運(yùn)行在以太網(wǎng)、令牌環(huán)、FDDI還是廣域網(wǎng)。網(wǎng)絡(luò)層地址通常由兩部分構(gòu)成:網(wǎng)絡(luò)地址和主機(jī)地址。
網(wǎng)橋只能連接數(shù)據(jù)鏈路層相同(或類似)的網(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é)議無關(guān),但它通常用于解析IP地址;最常見的數(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層地址來互相通信,2層地址通過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)的正確且避免了過期的信息。要注意的是,當(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)生的問題中最常見的是IP地址的沖突,這是由于兩個(gè)不同的主機(jī)IP地址相同產(chǎn)生的,在任何互聯(lián)的網(wǎng)絡(luò)中,IP地址必須是唯一的。這時(shí)會(huì)收到兩個(gè)ARP回應(yīng),分別指出了不同的硬件地址,這是嚴(yán)重的錯(cuò)誤,沒有簡(jiǎn)單的解決辦法。
為了避免出現(xiàn)這類錯(cuò)誤,當(dāng)接口A初試化時(shí),它發(fā)送一個(gè)含有其IP地址的ARP請(qǐng)求,如果沒有收到回應(yīng),A就假定該IP地址沒有被使用。我們假定接口B已經(jīng)使用了該IP地址,那么B就發(fā)送一個(gè)ARP回應(yīng),A就可以知道該IP地址已被使用,它就不能再使用該IP地址,而是返回錯(cuò)誤信息。這樣又產(chǎn)生一個(gè)問題,假設(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)?/span>IP提供的是無保證的傳輸,所以不會(huì)產(chǎn)生大的問題。
4、管理ARP緩存表
ARP緩存表是對(duì)的列表,根據(jù)IP地址索引。該表可以用命令arp來管理,其語法包括:
向表中添加靜態(tài)表項(xiàng) -- arp -s
從表中刪除表項(xiàng) -- arp -d
顯示表項(xiàng) -- arp -a
ARP表中的動(dòng)態(tài)表項(xiàng)(沒有手動(dòng)加入的表項(xiàng))通常過一段時(shí)間自動(dòng)刪除,這段時(shí)間的長(zhǎng)度由特定的TCP/IP實(shí)現(xiàn)決定。
5、靜態(tài)ARP地址的使用
靜態(tài)ARP地址的典型使用是設(shè)置獨(dú)立的打印服務(wù)器,這些設(shè)備通常通過telnet來配置,但首先它們需要一個(gè)IP地址。沒有明顯的方法來把此信息告訴該設(shè)備,好象只能使用其串口來設(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)里使用它,方法與上面類似。假設(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。接下來就可以把它放到另一個(gè)子網(wǎng)里使用了,別忘了刪除靜態(tài)ARP表項(xiàng)。
6、代理ARP
可以通過使用代理ARP來避免在每臺(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ī)看來,世界就象一個(gè)大的沒有路由器物理網(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ù)目很少。這樣一來,對(duì)于多于256個(gè)主機(jī)的網(wǎng)絡(luò),就必須分配多個(gè)網(wǎng)段,其問題是很多的網(wǎng)絡(luò)給路由器造成了難以忍受的負(fù)擔(dān)。
IP把網(wǎng)絡(luò)地址和主機(jī)地址一起包裝在一個(gè)32位的域里,有時(shí)主機(jī)地址部分很短,有時(shí)很長(zhǎng),這樣可以有效利用地址空間,減少IP地址的長(zhǎng)度,并且網(wǎng)絡(luò)數(shù)目不算多。有兩種將主機(jī)地址分離出來的方法:基于類的地址和無類別的地址。
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ò)。
換句話說,過去主機(jī)和網(wǎng)關(guān)的概念被人工地區(qū)分開來,那時(shí)計(jì)算機(jī)沒有足夠的能力同時(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),但這不是其唯一的目的。
路由器是專用的網(wǎng)關(guān),其硬件經(jīng)過特殊的設(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ù)。由于專用的路由硬件較便宜,計(jì)算機(jī)用作網(wǎng)關(guān)已經(jīng)很少見了,在只有一個(gè)撥號(hào)連接的小站點(diǎn)里,還可能使用計(jì)算機(jī)作為非專用的網(wǎng)關(guān)。
2、基于類的地址
最初設(shè)計(jì)IP時(shí),地址根據(jù)第一個(gè)字節(jié)被分成幾類:
0: 保留
1-126: A類(網(wǎng)絡(luò)地址:1字節(jié),主機(jī)地址:3字節(jié))
127: 保留
128-191: B類(網(wǎng)絡(luò)地址:2字節(jié),主機(jī)地址:2字節(jié))
192-223: C類(網(wǎng)絡(luò)地址:3字節(jié),主機(jī)地址:1字節(jié))
224-255: 保留
3、子網(wǎng)劃分
雖然基于類的地址系統(tǒng)對(duì)因特網(wǎng)服務(wù)提供商來說工作得很好,但它不能在一個(gè)網(wǎng)絡(luò)內(nèi)部做任何路由,其目的是使用第二層(橋接/交換)來導(dǎo)引網(wǎng)絡(luò)中的數(shù)據(jù)。在大型的A類網(wǎng)絡(luò)中,這就成了個(gè)特殊的問題,因?yàn)樵诖笮途W(wǎng)絡(luò)中僅使用橋接/交換使其非常難以管理。在邏輯上其解決辦法是把大網(wǎng)絡(luò)分割成若干小的網(wǎng)絡(luò),但在基于類的地址系統(tǒng)中這是不可能的。為了解決這個(gè)問題,出現(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)的各類地址的子網(wǎng)掩碼為:
A類:255.0.0.0
B類:255.255.0.0
C類:255.255.255.0
如果想把一個(gè)B類網(wǎng)絡(luò)的地址用作C類大小的地址,可以使用掩碼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書籍。
子網(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)類似的概念--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類網(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類網(wǎng)絡(luò)201.66.71.0到201.66.86.0就不能形成一個(gè)統(tǒng)一的網(wǎng)絡(luò)。不過這其實(shí)沒關(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)掩碼。例如:如果你按部門劃分網(wǎng)絡(luò),一些網(wǎng)絡(luò)的掩碼可以為