標籤:

有關ospf協議的一個問題?

學習碰到的一個問題,書上說路由器只根據下一跳地址發送數據包,而不知道整個路由路徑。可是ospf路由協議可以根據鏈路狀態庫知道整個網路的拓撲,根據迪傑斯特拉演算法計算最短路徑轉發發送數據包,最短路徑的計算不就是知道整個路由路徑了么?這兩者是矛盾的啊,網路小白丁,知道的朋友請幫我解釋一下,萬分感謝!


謝邀。

IP報文只攜帶一個目的IP地址,即使知道端到端路徑又如何,不可能把每一跳路由器的IP地址放在IP頭,IP報文的轉發,是依據目的IP查路由表,選擇下一跳,完全是每個路由器的獨立決策的過程,OSPF路由協議只是保證,所有路由器的獨立決策是朝著一個相同的方向、相同的目的地,最終IP報文才會到達目的地。

之所以OSPF鏈路狀態協議優於RIP等距離矢量協議,是因為OSPF擴散鏈路狀態變化更快,所以路由收斂更快,大大減少由於鏈路狀態更新不及時,而造成的用戶流量白白丟失。


簡單的說路由器轉發報文只看路由表。
不管你有沒有OSPF,路由器都可以轉發,所以,路由器是不知道全拓撲的。

OSPF協議知道「全網」拓撲,但是他只是講計算的結果寫到路由表裡面,許可權僅限如此。

當然你路由表裡面還有RIP,BGP,靜態,直連等路由協議,數據包走哪個還不一定呢。所以OSPF知道了並沒有什麼*用。


都對。路由器轉發確實是只看路由表中的下一跳,它不知道整個拓撲。

而路由器如果運行了ospf進程的話,ospf自己心裡能算出來整個拓撲,然後還是把結果寫入路由表,如果路由器允許的話。

路由器就好像是一個大佬,ospf是大佬手下的多個幕僚中的一個,比較受重視的那個,大家都可以給大佬出主意,大佬自己決定聽誰的。


好多書都只說是什麼,而不說為什麼。通信類教材問題尤甚。
講OSPF一上來就一堆LSA,LSDB,好多domain。對於初學者實在是不友好,容易陷入細節的海洋,不能自拔。
後來看了數據結構里的圖,BFS,一下豁然開朗。
好書不易得,看對的書,省好多事。


只能說書很垃圾,我不針對某本書,而是指所有學校的教材。

很多東西都是抄來抄去,編者自己都沒有理解,全是乾巴巴的東西。

題主要真摳字眼,不暈才怪。rip的路由是全網傳來傳去,OSPF能算出全拓樸及路由,路由器如果不知道?它怎麼決定下一跳?沒聽說過哪個路由協議在不知道全網路由的情況下,直接決定下一跳的,運行的路由協議不屬於路由器嗎?

教材上的這種話直接跳過就好了


一台路由器得出的「最短路徑」只是這一台路由器認為的最短路徑

其它的路由器認為的「最短路徑」可能和上一跳認為的一樣,也可能不一樣

每台路由器是獨立決策

不同路由器的決策結果可能一致,也可能不一致

渣圖湊活看一下吧

就這個圖中,從A到B,所有鏈路為百兆乙太網

從上帝視角,走1/2/5/10這個是最短路徑

1的視角,走2/5/10到B是最短路徑,好,轉給2

但是2是個倔熊,2認為4/7/10是最短路徑,好,給4

路徑就出現了偏差

1計算出的最短路徑就不再是實際的路由路徑

至於2為啥計算的和1不一樣,天知道,你就當他CPU有病就行了

大致就這個意思吧,不是太嚴謹


這兩個說法其實都沒有錯。「路由器根據下一跳轉發」,那麼這個「下一跳」究竟怎麼跳,路由器是如何得知的?這就要說控制面和數據轉發麵的區別了。路由器分為控制面和數據轉發麵。控制面主要是通過各種路由協議生成一張路由表。在這個時候,我們可以說路由器是通過路由協議「得知」一部分路由路徑的(需要說明的是,這只是一部分,而且還是從其他路由器道聽途說來的)。生成路由表後,路由表包含下一跳信息,數據轉發麵就可以根據路由錶轉發數據包,這時我們可以說路由器是只根據下一跳轉發的。


你需要知道ospf是一個路由協議,他的功能是收集其他人告訴它的路由,準確的說應該叫鏈路狀態描述LSA,收集完這些LSA就會建立自己的LSDB(描述鏈路狀態的資料庫),之後根據 dijkstra演算法計算出自己的ospf路由表,再將ospf路由表放入ip 路由表。這個路由表的每一項就是一條路由,而路由器就是根據路由表中的路由條目來進行轉發和選路的,給你在網上找了一張關於路由表的圖:

這是H3C(一個國產的牌子類似cisco)路由器的路由表。

可以看到 2.2.2.2/32 和3.3.3.3/32這兩條主機路由就是通過ospf收集lsa計算出的,而這兩個條目可以清楚的看到他的有兩列是nexthop和interface。這樣他就知道到2.2.2.2這個ip會從對應的介面出去,介面出去後的那個人是誰,編碼的幀是mac還是ppp。nexthop下一跳很關鍵,因為如果出介面的二層協議是乙太網,那麼為了封裝其報文要知道nexthop的mac地址來作為幀的目的mac地址,所以在報文轉發的時候有一個十分重要的特性就是源目的ip是不變的,而幀的源目的mac每經過一台路由器都會改變(當然不考慮nat等等情況了)。扯遠了

由此可見,路由協議是我們幫助我們學習路由和建立路由表的,真正指導轉發的是路由器的路由表,ospf是一個很好的路由協議。


可以理解為兩個方向的概念:運行ospf的路由器,可以收到「全網」鏈路狀態資料庫,而正是這個LSDB就是ospf宣稱的擁有全網的信息,但是這台路由器的路由信息仍是簡單的:目標網路-下一跳;這正是題主所說路由器只能根據下一跳來轉發數據包。
總結來說運行ospf的路由器計算出來的路由表和其他路由協議並無二樣,所謂的根據迪傑斯特拉演算法知道全網拓撲只是在路由實現之前的一種協議本身演算法。


路由器和OSPF。

一個是三層物理設備。

一個是路由協議。

一個是基於IP轉發數據包的物理設備,一個是基於演算法計算路由的協議。

兩碼事。


數據包是逐跳轉發的,是根據路由表來選擇最佳路徑。根據目的地址查找fib轉發表來獲取下一跳出介面。ospf了解網路的整個拓撲,並基於這個拓撲進行spf運算獲取到各個目的的最短路徑,注意這只是ospf的最短路徑,是否添加進路由表還要跟不同的協議去比較


路由器根部下一跳地址轉發數據是對的,利用ospf協議可以得知整個去區域內的拓撲信息也是對的。樓主的疑問我估計是把路由器的轉發和路由器上的協議弄混了吧。ospf的作用是生成路由信息然後導入到路由表,讓路由器看路由表決定這個包從哪個埠出下一跳去哪裡。的確不會關心整個網路的拓撲。如果你把ospf換成rip還能理解不,rip不知道網路的拓撲。
路由器是通過下一跳地址發送數據包,但是下一跳地址的獲取可以通過路由協議獲取(計算出來)。


如果報文按照預設的一條路徑轉發,那就跟電路交換差不多了,問題是鏈路狀態資料庫更新沒那麼快,萬一鏈路上某個節點出了問題,報文就沒法轉發了,所以路由器不如只管下一跳。但這樣也帶來了問題,路由轉發沒有全網概念,流量的負載均衡效果不好,所以最新的架構是SDN,SDN的控制器就有全網概念了


大家的回答都差不多了,我來補充一下。
不知道題主你看的是哪本書,『路由器不知道所有路由路徑』這樣的說法要看怎麼理解。
若一個網路中全部路由器只使用OSPF且沒有劃分區域,那麼肯定是【可以】知道整個網路的所有路由路徑的。

注意我說的「可以」,實際上路由器並沒有特別想要這個信息,就算是OSPF,雖然路由計算過程中,確實能得到這個信息,但卻作為中間產物丟掉了,留下來的只有路由表。


OSPF的原理各位大大都說的很清楚了, 這裡就題主問題解答.


" 最短路徑的計算 -&> 知道整個路由路徑"

是正確的, 當前路由器的確可以通過Dijkstra演算法知道整個路由路徑, 那又如何呢? 路由器會選擇位於 "目的IP最短路徑" 上的埠進行轉發, 這不就是路由表所維護的信息么? 而每個路由器只是路由鏈路上的一個轉發環節, 所以, 它不需要"知道"整個轉發路由路徑.


"路由器不知道整個路由路徑"

這句話應該這麼解讀. 這是針對 "數據包的路由路徑" 這個結果的描述, OSPF協議中, lsa是變化的, 路由表也是要更新的, 所以沒法保證這個數據包還會按某個路由器轉發時計算的最優路徑那樣走, 每個路由器轉發時只能保證自己的轉發環節是當前全局狀態最優的, 不能保證這個包轉發之後會走哪裡.


路由器不需要"保存"整個轉發路徑, 只需要知道自己怎樣轉發最優就可以了.

路由器也不能保證這個數據包是根據自己算出的最優路徑走的.


好多答案文不對題,題主應該是要問 路由器只根據下一跳地址發送數據包,而不知道整個路由路徑。可是ospf路由協議可以根據鏈路狀態庫知道整個網路的拓撲,知道整個路由路徑 這兩句話是否衝突

重新排版了下希望能對題主有所幫助


-----------------------------------------

關於 路由器只根據下一跳轉發而不知道整個路由路徑
這裡的意思是說路由器只根據ip路由表進行轉發(當然再具體應該說是根據硬體轉發表),而路由表裡僅僅只有目標網路號、目標網路掩碼、下一跳地址和出介面這幾個關鍵信息。通過這幾個信息路由器只能得到去往目標網路的下一跳地址,而不能也不會考慮全網的拓撲/路由信息

關於 ospf可以根據資料庫獲得全網路由
ospf協議本身確實能夠通過交互報文獲得全網的拓撲和路由信息,但是這裡的 「獲得全網信息」 只是針對ospf協議自身而言的,最終ospf協議將計算生成的路由信息下載到ip路由表,這時體現給路由器使用的還是上面提到的那幾個關鍵信息。也就是說當路由器為了轉發數據而查詢路由表時,僅僅關心下一跳等信息。


綜上,對於路由器查錶轉發這個過程來說,它確實不關心全網的路由/拓撲信息;而ospf獲得的全網路由信息僅僅限於協議自身計算(與路由器轉發查表過程無關)。


http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Two/Home/Catalog/200911/655339_97665_0.htm

先給你推薦我司期刊,我覺得這裡面的知識可以幫到你!


推薦閱讀:

TCP 為什麼沒有基於 UDP 實現?
為什麼在不同網站查詢到自己的本機公網 IP 不一樣?
TCP連接中啟用和禁用TCP_NODELAY有什麼影響?
網路爬蟲相關畢業設計,有什麼比較合適的書籍推薦?
TCP/IP 和 HTTP 的區別和聯繫是什麼?

TAG:計算機網路 |