可以把整個網絡(一個自治系統AS)看成一個王國,這個王國可以分成幾個 區(area),現在我們來看看區域内的某一個人(你所在的機器root)是怎樣得到一張 世界地圖(routing table)的。
首先,你得跟你周圍的人(同一網段如129.102)建立基本聯系。你大叫一聲 “我在這!”(發HELLO封包),于是,周圍的人知道你的存在,他們也會大叫,這樣 你知道周圍大概有哪些人,你與他們之間建立了鄰居(neighbor)關系,當然,他們 之間也有鄰居關系。
在你們這一群人中,最有威望(Priority優先級)的人會被推薦為首領( Designated Router)首領與你之間是上下級關系(adjacency鄰接),它會與你建立 單線聯系,而不許你與其它鄰居有過多交往,他會說:“那樣做的話,街上太擠了 ”。
你隻好通過首領來知道更多的消息了,首先,你們互通消息,他告訴你他知 道的所有地圖的地名,你也會告訴他你現知道的地名,當然上也許隻有你一個點。 (Database Deion資料庫描述封包)
你發現地名表中有你缺少的或比你新的東西,你會問他要一份更詳細的資料 ,他發現你的地名表中有他需要的東西,他也會向你索求新資料。(Link State Request連接配接狀态請求封包)
當然,你們毫不猶豫地将一份詳細資料發送給對方。(Link State Update連 接狀态更新封包)
收到地圖後,互相緻謝表示收到了。(Link State Ack連接配接狀态響應封包)
現在,你已經盡你所能得到一份地圖(Link State DataBase連接配接狀态資料庫 ),你去查找地圖把到所有地方的路挑一條最近(shortest path最短路)的,記 為一張表格(routing table路由表),當然以後查這份表格就知道到目的地的一 條最近的路了。地圖也要收好,萬一表格上的某條路不通了可以通過圖去找一條新 的路。
其實跟你有聯系的,隻是周圍一群人,外面的消息要通過首領來知道。因為 你的地圖是跟首領的一緻,我們假設你是首領,你要去畫一份世界地圖。
你指令所有手下向你通報消息,你可以知道你這一群人的任何一點點小動靜 (event事件)。你手下還會有同時屬于兩群人的家夥(同一區内兩網段),他會 告訴你另一群人的地圖,當然也會把你們這一群人的地圖洩露,(不過,無所謂啦 )。這樣,整個區的地圖你知道了(對于不知道的那也沒辦法,我們盡力了)。
通過不停地交換地圖,現在,整個區的人都有同樣的地圖了,住在區邊境上 的人義不容辭地把這個區的地圖(精确到每一群人)發送到别的區,把别的區資訊 發送進來。國王會把這些邊境的人命名為骨幹(backbone area)。通過骨幹人士 的不懈努力,現在,整個國家的地圖你都了解得一清二楚了。
有些人“裡通外國”(AS Boundary Router自治系統邊界路由器) ,他們知 道一些“出國”(AS External route自治系統外部路由)的路,當然他們會把這些 秘密公之與衆(import 引入),通過資訊的傳遞,現在,你已經有一張完整的“ 世界地圖”了。
OSPF是這樣标記最短的路的:對于某個目的地,首先,考慮是否有同一區内 部到目的地的路(intra area區域内),如果有,則在其中取一條離你最近的(花 費最小),寫進你的表格中,這個目的地可能是到本群體某個人也可能是到其他群 體的,對于經過其他區域的路由,你會不予考慮,跟自己人(同區域)打交道總比 與外人(其他區域)打交道好;如果沒有本區的路,你隻好通過别的區域了(區域 間),你隻要在地圖上找最近的就是了;如果你發現目的地在國外,你也隻能先把 它标記到你的表格上,期待什麼時候王國擴張到那,你就可以把它标記到國内地圖 上了。
OSPF就是這樣,給你一份“世界地圖”,并且在上面标記了最短的路,如此 而已罷了
本文轉自loveme2351CTO部落格,原文連結:http://blog.51cto.com/loveme23/8102 ,如需轉載請自行聯系原作者