計算機在一個網絡中發送信息時,會將信息分割成一些小的片斷,稱為“數據包”或者“數據封”(Datagram),這些包都包含了目標地址。所以在它們進入網絡后,能到達正確的目標計算機。若目標計算機位于另一個網絡,就必須通過一個路由器,將其轉發(路由選擇)至正確的網絡。那么路由器是如何做的呢?它會檢查數據包中包含的地址,判斷應將這些包些向哪個網絡。
要了解路由器的工作原理,我們先得了解一些橋接與路由的基礎知識。
路由器準備處理一條消息之前,必須通過它的某個接口,以幀的形式,接收到這條消息(1號框)。如果是由LAN接口接收到幀,路由器就會檢查幀的目標MAC地址,判斷這個幀是否發給本網的某個主機(2號框)。如果幀確實應該進入本網,同時其中封裝數據的協議已在路由器上配置好了,路由器就會嘗試對其進行路由選擇(3號框)。如果這個幀不該由本網接收,同時已在路由器上配置好了橋接功能(4號框),而且路由器上尚未配置好封裝數據采用的協議(6號框),路由器就會試著對其進行橋接處理。如某個主機正在運行路由的協議,并希望從另一個網絡的另一個主機得到一條消息,主機通常會將幀發給路由器,今其路由出去。反之,假若主機正在運行的是一種橋接過的協議,那么主機就不會注意到一個網橋的存在。所以,主機永遠不會將一個幀直接發給網橋。
所謂“橋接”,是指依據網絡消息的第2層頭內的一個地址對其進行轉發的過程。網間網操作系統支持多種類型的橋接方式:
--透明橋接。
--封裝橋接。
--源路由橋接。
--源路由透明橋接。
--源路由轉換橋接。
為了理解橋接的過程,首先讓我們簡要討論一下透明橋接。之所以認為這種橋接是“透明”的,是由于主機同一個路由器的接口LAN連接之后,在那些主機的眼中,是“瞧不見”那個路由器的。注意在上圖的4號框中,只有在路由器收到一個并非發給自己(本網)的幀時,才會考慮橋接選項。如果路由器收到一個并非發結自己的幀,而且自己沒有配置橋接功能,就簡單地將那個幀“扔掉”(上圖7號框)。進行透明橋接的路由器(網橋)具有下述功能:
--調查主機位置。
--根據第2層地址,對幀進行擴散、轉發以及過濾處理。
網橋會處理所有接口上的所有幀,并實時調查每個主機的位置。若網橋在某個接口上收到一個幀,就會在其橋接表內置入一個條目(人口),顯示出始發主機和接收到幀的那個接口的MAC地址。利用這種技術,網橋就能完善自己的橋按表,以便正確決定路由。網橋不斷掌握每個主機的位置時,它會執行三個F,即Flooding(擴散)、Forwarding(轉發)及Filtering(過濾)。
網橋收到一個幀時,若發現其中的MAC地址不在自己的橋接表里,就會將這個幀擴散到每個接口(當然,最初接收的那個接口除外),如上圖的11號框所示。采取這樣的做法,有望使幀抵達自己的目的地,而無論目標主機的位置如何。目標主機對源主機作出回應以后,網橋就會更新自己的橋接表,加入新的位置。
幀經網橋轉發或過濾處理后,會在它們收到后被正確地發送出去。在圖2中,自與主機2連接的那個接口,幀被原封不動地轉發出去。注意網橋并未專門定址,它是“透明”的。主機1根本不知道那里存在一個網橋。也要注意的是,兩個LAN的網絡地址都是相同的。兩個物理LAN被作為一個統一的邏輯LAN對待。
現在,假定同一LAN內的兩個主機需要通信,網橋了解到它們都來自相同的接口。此時,網橋會將它從主機會話中收到的幀過濾掉(圖1的14號框)。換言之,網橋不會將幀傳給其他接口。這樣一來,就可保證會話通信任本地進行,防止本地會話干擾其他I‘AN網段上進行的會話。
當然,橋接也有缺點。首次引用一個MAC地址時,網橋肯定會對其進行擴散處理。但這還不是最嚴重的;最嚴重的問題是,網橋也會擴散所有廣播幀及所有多播幀。假若一個網絡應用嚴重依賴廣播或多播定址,就會造成可觀的網絡通信負擔,因為所有廣播及多播幀都會出現于所有LAN網段上。
路由
所謂“路由”、“路由選擇”、或者“路由發送”(Routing),是指依據網絡消息之第3層頭內的一個地址,對消息進行轉發的過程。然而,除了簡單地讀取那個第3層地址之外,此時要做的事情還很多。現在,讓我們逐步探討一個路由器轉發網絡消息時經歷的各個基本步驟。
若消息準備交給路由器處理,路由器必須先知道主機采用的是何種通信協議,才能決定如何對消息加以控制。在1.1.2小節中,我們已經提到過,每一層的頭都必須包含一些值,指出下一層封裝的是什么東西。路由器必須檢查幀頭的這些值,判斷幀內封裝的是何種協議。
在幀頭內,這要么是一個“協議類型”字段,要么是一個“服務接入點”(Service Access Point,SAP)字段。苦協議類型或SAP字段指出幀內包含的數據適用于正在由路由器路由的一種協議(圖1的3號框),路由器就會刪除幀頭,開始處理剩下的東西――用一個第3層頭起始的數據包(圖l的4,5號框)。在路由器上,針對其路由的每種協議,都運行著一個獨立的程序。我們將這種程序稱為“路由進程”(Routing Procss)。
路由進程會檢查包頭內的目標網絡地址(這是第3層),并在一張特殊的表格里查找相符的記錄(條目或入口)。這張表格就是“路由表”(Routing Table),如圖1的9號框所示。針對路由的每一種協議,路由器都會為其設置一張路由表。在路由表內,包含了路由器已知全部網絡及其方向的一個列表。若路由器未在路由表內發現與目標網絡地址相符的一個條目,就會將這個數據包丟棄(圖1的8號框)。反之,假若路由器找到了與目標網絡地址相符的一個表格條目,就會利用表中提供的信息,判斷將數據包轉發到哪個接口。
由于消息在網絡中必須以“幀”的形式出現,所以路由器現在必須對包加以封裝,親自創建一個幀。換句話說,路由器必須在包內放置一個新的幀頭和幀尾(圖1。4,12號框)。注意在圖1中,包本身的內容并不改變。由于存在著多種不同的幀頭格式,所以路由器要根據在路由表中找到的接口名以及封裝方式,來決定包的新幀頭格式。
在圖3中,數據包打算轉發到一個LAN接口。所以,路由器必須在幀頭內設置目標及源MAC地址。在準備經由LAN自路由器傳到主機2的新幀內, 目標MAC地址是D,即主機2的地址;而源MAC地址是C,即路由器負責發送的接口。 也許會覺得奇怪,路由器怎樣來了解其他網絡的情況,從而完善自己的路由表呢?當然,路由表是不能憑空捏造的。事實上,路由器有三種方式可以了解到目標網絡的情況:
1)路由器直接同網絡相連。
2)我們告訴路由器有關網絡的情況。
3)一個路由器從其他路由器那兒了解網絡的情況。
路由器直連的網絡會在路由表中自動出現,用不著我們操心。而路由器從我們(操作人員)處了解到的網絡稱為“靜態路由”,其實就是由我們在路由表中人工輸入的一些條目。我們告訴路由器數據包的路由方向,直至到達一個目標網絡。
通過正確的配置,路由器相互間可以通信,共享與網絡有關的資料。也就是說,路由器相互間可以“交談”。通過配置路由器,使其能從其他路由器那里了解網絡情況以后,路由表的構建便不用我們操心,現在將完全交由路由器負責。我們的工作只是監視路由表的變化.
確定各個路由器沒有“混亂”。由路由器使用并共享網絡信息的協議稱為“路由協議”(Routing Protocol)。而那些負責傳送真正的數據,而且已由路由器“路由’’的協議,我們稱其為“路由的協議”(Routed Protocol)。對于可在路由器上配置的每種“路由的協議”(如IP),它們至少都有一個對應的“路由協議”(如RIP和OSPF)。路由協議的配置是10S配置中一個相當有趣的方面。
根據需要,可運行任意數量的“路由的協議”,只要路由器夠“勁”,而且內存足夠多。對于正在運行的每一種路由的協議,I0S都會為其創建一張路由表。路由協議共有兩種主要類型:
1)距離方位。
2)鏈接狀態。
至于網絡中具體采用哪一種則取決于多方面的因素,包括網絡需求、業務標準甚至個人的喜好等等。關于它們的詳細內容,這里就不細說了,你可以從相關的書上找到很多這方面的資料。