日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

网络层核心:路由和路由生成算法

發(fā)布時(shí)間:2023/12/20 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络层核心:路由和路由生成算法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、路由和路由算法簡(jiǎn)介:

路由就是通過(guò)互連的網(wǎng)絡(luò)把信息從源地址傳送到目的地址的活動(dòng)。路由發(fā)生在OSI網(wǎng)絡(luò)參考模型的第三層即網(wǎng)絡(luò)層。

路由引導(dǎo)封包轉(zhuǎn)送,經(jīng)過(guò)一些中間的節(jié)點(diǎn)后,到達(dá)目的地。把該功能做成硬件的話稱為路由器。路由通常根據(jù)路由表來(lái)引導(dǎo)封包轉(zhuǎn)送。因此為了有效率的轉(zhuǎn)送封包,建立存儲(chǔ)在路由器內(nèi)存的路由表是非常重要的。路由與橋接的不同在于,路由假設(shè)地址相似的結(jié)點(diǎn)距離相近。這使得路由表中的一項(xiàng)紀(jì)錄可以表示到一組地址的路徑。


二、路由的基本原理:

1、路由的內(nèi)涵:

? ? ? 路由包含兩個(gè)基本動(dòng)作:確定最佳路徑和通過(guò)網(wǎng)絡(luò)傳輸信息。

? ?(1)路徑選擇:metric是路由算法用已確定到達(dá)目的地最佳路徑的計(jì)量標(biāo)準(zhǔn),如路徑長(zhǎng)度。路由算法根據(jù)許多信息來(lái)填充路? ??由表,目的/下一跳地址對(duì)告知路由器到達(dá)目的的最佳方式是把分組發(fā)送給代表 “下一跳” 的路由器,當(dāng)路由器收到一個(gè)分 ? ? ? ? ? ? ? ? ? 組,他就檢查其目標(biāo)地址,嘗試將此地址與其 “下一跳” 相聯(lián)系。

? ?(2)交換:交換算法相對(duì)比較簡(jiǎn)單,對(duì)于大多數(shù)路由協(xié)議而言是相同,多數(shù)情況下,某主機(jī)向另一個(gè)主機(jī)發(fā)送數(shù)據(jù),通過(guò)某 ? ? ? ? ? ? ?些方法獲得路由器地址后,源主機(jī)發(fā)送指向該路由器的物理地址的數(shù)據(jù)包,其協(xié)議地址指向目的主機(jī)。

2、路由算法的基本類型:

? ?(1)靜態(tài)與動(dòng)態(tài):靜態(tài)算法嚴(yán)格意義很難算得上是算法,只不過(guò)是開始路由器前由網(wǎng)管建立的表映射。此算法容易設(shè)計(jì),在 ? ? ? ? ? ? ?網(wǎng)絡(luò)通信可預(yù)測(cè)及簡(jiǎn)單的網(wǎng)絡(luò)中工作的很好,但不能適應(yīng)網(wǎng)絡(luò)狀態(tài)變化。?動(dòng)態(tài)路由算法可以適當(dāng)?shù)囊造o態(tài)算法作為補(bǔ)充, ? ? ? ? ? ? ? ?可適應(yīng)網(wǎng)絡(luò)狀態(tài)變化但開銷大、復(fù)雜。

? ?(2)單路徑與多路徑。

? ?(3)平坦與分層.。

? ?(4)主機(jī)智能與路由器智能。

? ?(5)域內(nèi)與域間。

? ?(6)鏈接狀態(tài)與距離向量。


三、幾種常見的路由算法:

1、最短路徑優(yōu)先算法------Dijstra算法:

迪杰斯特拉(Dijkstra)算法是典型最短路徑算法,用于計(jì)算一個(gè)節(jié)點(diǎn)到其他節(jié)點(diǎn)的最短路徑。?

它的主要特點(diǎn)是以起始點(diǎn)為中心向外層層擴(kuò)展(廣度優(yōu)先搜索思想),直到擴(kuò)展到終點(diǎn)為止。

基本思想

???? 通過(guò)Dijkstra計(jì)算圖G中的最短路徑時(shí),需要指定起點(diǎn)s(即從頂點(diǎn)s開始計(jì)算)。

???? 此外,引進(jìn)兩個(gè)集合S和U。S的作用是記錄已求出最短路徑的頂點(diǎn)(以及相應(yīng)的最短路徑長(zhǎng)度),而U則是記錄還未求出最短路徑的頂點(diǎn)(以及該頂點(diǎn)到起點(diǎn)s的距離)。

???? 初始時(shí),S中只有起點(diǎn)s;U中是除s之外的頂點(diǎn),并且U中頂點(diǎn)的路徑是"起點(diǎn)s到該頂點(diǎn)的路徑"。然后,從U中找出路徑最短的頂點(diǎn),并將其加入到S中;接著,更新U中的頂點(diǎn)和頂點(diǎn)對(duì)應(yīng)的路徑。 然后,再?gòu)腢中找出路徑最短的頂點(diǎn),并將其加入到S中;接著,更新U中的頂點(diǎn)和頂點(diǎn)對(duì)應(yīng)的路徑。 ... 重復(fù)該操作,直到遍歷完所有頂點(diǎn)。


操作步驟

(1)?初始時(shí),S只包含起點(diǎn)s;U包含除s外的其他頂點(diǎn),且U中頂點(diǎn)的距離為"起點(diǎn)s到該頂點(diǎn)的距離"[例如,U中頂點(diǎn)v的距離為(s,v)的長(zhǎng)度,然后s和v不相鄰,則v的距離為∞]。

(2)?從U中選出"距離最短的頂點(diǎn)k",并將頂點(diǎn)k加入到S中;同時(shí),從U中移除頂點(diǎn)k。

(3)?更新U中各個(gè)頂點(diǎn)到起點(diǎn)s的距離。之所以更新U中頂點(diǎn)的距離,是由于上一步中確定了k是求出最短路徑的頂點(diǎn),從而可以利用k來(lái)更新其它頂點(diǎn)的距離;例如,(s,v)的距離可能大于(s,k)+(k,v)的距離。

(4)?重復(fù)步驟(2)和(3),直到遍歷完所有頂點(diǎn)。

單純的看上面的理論可能比較難以理解,下面通過(guò)實(shí)例來(lái)對(duì)該算法進(jìn)行說(shuō)明。

迪杰斯特拉算法圖解


以上圖G4為例,來(lái)對(duì)迪杰斯特拉進(jìn)行算法演示(以第4個(gè)頂點(diǎn)D為起點(diǎn))。

初始狀態(tài):S是已計(jì)算出最短路徑的頂點(diǎn)集合,U是未計(jì)算除最短路徑的頂點(diǎn)的集合!?

第1步:將頂點(diǎn)D加入到S中。?

????此時(shí),S={D(0)}, U={A(∞),B(∞),C(3),E(4),F(∞),G(∞)}。 ????注:C(3)表示C到起點(diǎn)D的距離是3。

第2步:將頂點(diǎn)C加入到S中。?

????上一步操作之后,U中頂點(diǎn)C到起點(diǎn)D的距離最短;因此,將C加入到S中,同時(shí)更新U中頂點(diǎn)的距離。以頂點(diǎn)F為例,之前F到D的距離為∞;但是將C加入到S之后,F到D的距離為9=(F,C)+(C,D)。?

????此時(shí),S={D(0),C(3)}, U={A(∞),B(23),E(4),F(9),G(∞)}。

第3步:將頂點(diǎn)E加入到S中。?

????上一步操作之后,U中頂點(diǎn)E到起點(diǎn)D的距離最短;因此,將E加入到S中,同時(shí)更新U中頂點(diǎn)的距離。還是以頂點(diǎn)F為例,之前F到D的距離為9;但是將E加入到S之后,F到D的距離為6=(F,E)+(E,D)。?

????此時(shí),S={D(0),C(3),E(4)}, U={A(∞),B(23),F(6),G(12)}。

第4步:將頂點(diǎn)F加入到S中。?

????此時(shí),S={D(0),C(3),E(4),F(6)}, U={A(22),B(13),G(12)}。

第5步:將頂點(diǎn)G加入到S中。?

????此時(shí),S={D(0),C(3),E(4),F(6),G(12)}, U={A(22),B(13)}。

第6步:將頂點(diǎn)B加入到S中。?

????此時(shí),S={D(0),C(3),E(4),F(6),G(12),B(13)}, U={A(22)}。

第7步:將頂點(diǎn)A加入到S中。?

????此時(shí),S={D(0),C(3),E(4),F(6),G(12),B(13),A(22)}。

此時(shí),起點(diǎn)D到各個(gè)頂點(diǎn)的最短距離就計(jì)算出來(lái)了:A(22) B(13) C(3) D(0) E(4) F(6) G(12)

(Dijkstra算法(一)之 C語(yǔ)言詳解)

2、擴(kuò)散算法(Flooding)

 另一種靜態(tài)算法是擴(kuò)散法 (flooding), 它把收到的每一個(gè)分組,從除了分組到來(lái)的線路外的所有輸出線路上發(fā)出。顯然擴(kuò)散要產(chǎn)生大量的重

復(fù)分組,事實(shí)上有可能是無(wú)窮多個(gè)分組,除非采用一些措施抑制這種過(guò)程。一種措施是讓每個(gè)分組頭包含站點(diǎn)計(jì)數(shù)器,每經(jīng)過(guò)一個(gè)站點(diǎn),計(jì)數(shù)器

減1,當(dāng)計(jì)數(shù)器值為0時(shí),就扔掉分組。理想的情況是計(jì)數(shù)器設(shè)置初值為從源端到目的端的路徑長(zhǎng)度。如果發(fā)送者不知道路徑的長(zhǎng)度,它可以按

最糟糕的情況,即子網(wǎng)的直徑來(lái)設(shè)置初值。


  另一種方法是記錄下分組擴(kuò)散的路徑,防止它第二次再擴(kuò)散到已擴(kuò)散的路徑中。達(dá)到這一目的的一種方法是讓源端路徑器在所接收的來(lái)自

主機(jī)的每一個(gè)分組中設(shè)置一個(gè)序號(hào),每個(gè)路徑器對(duì)應(yīng)于每個(gè)源端路由器有一張表,用來(lái)指明已見到的是源端生成的哪個(gè)序號(hào),如果進(jìn)入的分組

已在表中,則不再擴(kuò)散。?

為了防止該表無(wú)限制地增長(zhǎng),每個(gè)表應(yīng)加一個(gè)計(jì)數(shù)器k作為參數(shù),表示直到k的序號(hào)都已看見。 當(dāng)一個(gè)分組進(jìn)入時(shí),就能容易查出此分組是否為

復(fù)制品;如果是,則扔掉此分組。而且, 低于k的表項(xiàng)都不再需要,因?yàn)閗已有效地綜合了各種因素。

  擴(kuò)散法的一個(gè)稍為實(shí)際的變種是選擇性擴(kuò)散法(selective flooding)。在這種算法中,路由器并不將每一進(jìn)來(lái)的分組從每一條輸出線路上發(fā)出

,而是僅發(fā)送到與正確方向接近的那些線路上。不太可能將一個(gè)應(yīng)該向西傳送的分組傳送到向東的線路上去,除非拓?fù)浣Y(jié)構(gòu)極為奇特。

  擴(kuò)散法在很多應(yīng)用中都未實(shí)際采用,但它還是有一些用處的。例如,在軍事應(yīng)用中,大批的路由器隨時(shí)都可能被炸毀得所剩無(wú)幾,所以非常希

望采用具有很結(jié)實(shí)的擴(kuò)散方式。在分布式數(shù)據(jù)庫(kù)應(yīng)用中,有時(shí)需要并行地更新所有數(shù)據(jù)庫(kù),在這種情況下,擴(kuò)散就非常有用。第三種可能的用途

是把它作為一種尺度來(lái)衡量其他路由選擇算法。擴(kuò)散總是選擇最短路徑,因?yàn)樗⑿械剡x擇每一條可能的路徑。所以,沒有其他算法能產(chǎn)生一個(gè)

更短的延遲(如果我們忽略掉擴(kuò)散過(guò)程本身產(chǎn)生的開銷)。


3、距離向量路由算法(Distance Vector Routing):

距離矢量路由算法(Distance?Vector?Routing,DV)是ARPANET網(wǎng)絡(luò)上最早使用的路由算法,也稱Bellman-Ford路由算法和Ford-Fulkerson算法,主要在RIP(Route?Information?Protocol)協(xié)議中使用。Cisco的IGRP和EIGRP路由協(xié)議也是采用DV這種路由算法的。?
????“距離矢量路由算法”的基本思想如下:每個(gè)路由器維護(hù)一個(gè)距離矢量(通常是以延時(shí)是作變量的)表,然后通過(guò)相鄰路由器之間的距離矢量通告進(jìn)行距離矢量表的更新。每個(gè)距離矢量表項(xiàng)包括兩部分:到達(dá)目的結(jié)點(diǎn)的最佳輸出線路,和到達(dá)目的結(jié)點(diǎn)所需時(shí)間或距離,通信子網(wǎng)中的其它每個(gè)路由器在

表中占據(jù)一個(gè)表項(xiàng),并作為該表項(xiàng)的索引。每隔一段時(shí)間,路由器會(huì)向所有鄰居結(jié)點(diǎn)發(fā)送它到每個(gè)目的結(jié)點(diǎn)的距離表,同時(shí)它也接收每個(gè)鄰居結(jié)點(diǎn)發(fā)來(lái)的距離表。這樣以此類推,經(jīng)過(guò)一段時(shí)間后便可將網(wǎng)絡(luò)中各路由器所獲得的距離矢量信息在各路由器上統(tǒng)一起來(lái),這樣各路由器只需要查看這個(gè)距

離矢量表就可以為不同來(lái)源分組找到一條最佳的路由。?
??? ? 鏈路狀態(tài)路由協(xié)議是目前使用最廣的一類域內(nèi)路由協(xié)議。它采用一種“拼圖”的設(shè)計(jì)策略,即每個(gè)路由器將它到其周圍鄰居的鏈路狀態(tài)向全網(wǎng)的其他路由器進(jìn)行廣播。這樣,一個(gè)路由器收到從網(wǎng)絡(luò)中其他路由器發(fā)送過(guò)來(lái)的路由信息后,它對(duì)這些鏈路狀態(tài)進(jìn)行拼裝,最終生成一個(gè)全網(wǎng)的拓?fù)湟晥D,

近而可以通過(guò)最短路徑算法來(lái)計(jì)算它到別的路由器的最短路徑。運(yùn)行鏈路狀態(tài)路由協(xié)議的路由器,?每臺(tái)路由器公在其接口的狀態(tài)發(fā)生變化時(shí),才將變化后的狀態(tài)發(fā)送給其他所有路由器,每臺(tái)路由器都使用收到的信息重新計(jì)算前往每個(gè)網(wǎng)絡(luò)的最佳路徑,然后將這些信息存儲(chǔ)到自己的路由選擇表中。?

鏈路狀態(tài)路由算法背后的思想非常簡(jiǎn)單,可以用5個(gè)基本步驟加以描述。?

1、發(fā)現(xiàn)他的鄰接點(diǎn),并知道其網(wǎng)絡(luò)的地址。?

2、測(cè)量到各鄰接點(diǎn)的延遲或開銷。?

3、構(gòu)造一個(gè)分組,分組中包含所有他剛剛收到的信息。

4、將這個(gè)分組發(fā)送給其他的路由器。?

5、計(jì)算出到每一個(gè)其他路由器的最短路徑。例如,每個(gè)路由器運(yùn)行Dijkstra算法就可以找從它到每一個(gè)其他路由器的最短路徑。


4、鏈路狀態(tài)路由算法(Link State Routing):

鏈路狀態(tài)算法以圖論作為理論基礎(chǔ),用圖來(lái)表示網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),并利用圖論中的最短路徑算法來(lái)計(jì)算網(wǎng)絡(luò)間的最佳

路由,因此鏈路狀態(tài)算法又被稱作最短路徑優(yōu)先算法SPF。


鏈路狀態(tài)選路算法的工作原理如下 (1)在參與鏈路狀態(tài)選路的路由器集合中,每個(gè)路由器都需要通過(guò)某種機(jī)制來(lái)了解自己所連接的鏈路及其狀態(tài)。 (2)各路由器都能夠?qū)⑵渌B接的鏈路的狀態(tài)信息通知給網(wǎng)絡(luò)中的所有其他路由器,這些鏈路信息包括鏈路狀態(tài)、費(fèi)用以及鏈路兩端的路由器等。 (3)鏈路狀態(tài)信息的通過(guò)鏈路狀態(tài)分組(LSP)來(lái)向整個(gè)網(wǎng)絡(luò)發(fā)布。一個(gè)LSP通常包含源路由器的標(biāo)識(shí)符、相鄰路由器的標(biāo)識(shí)符,以及而知之間鏈路的費(fèi)用。每一個(gè)LSP都將被 網(wǎng)絡(luò)中的所有的路由器接收,并用于建立網(wǎng)絡(luò)整體的統(tǒng)一拓?fù)鋽?shù)據(jù)庫(kù)。由于網(wǎng)絡(luò)中所有的路由器都發(fā)送LSP,經(jīng)過(guò)一段時(shí)間以后,每一個(gè)路由器都保持了一張完整的網(wǎng)絡(luò)拓?fù)鋱D, 再在這個(gè)拓?fù)鋱D上,利用最短通路算法(例如Dijkstra算法等),路由器就可以計(jì)算出從任何源點(diǎn)到任何目的地的最佳通路。 這樣,每一個(gè)路由器都能夠利用通路最短的原則建立一個(gè)以本路由器為根、分支到所有其他路由器的生成樹,依據(jù)這個(gè)生成樹就可以很容易地計(jì)算出本路由器的路由表

四、路由表查看:

使用下面的 route 命令可以查看 Linux 內(nèi)核路由表。

# route

Destination ?Gateway ? ? ?Genmask ? ? ? ? ?Flags Metric Ref Use Iface

192.168.0.0 ? * ? ? ? ? ? ? ? ? 255.255.255.0 ?U ? ? ? ?0 ? ? ? ? 0 ? ? 0 ? ?eth0

169.254.0.0 ? * ? ? ? ? ? ? ? ? 255.255.0.0 ? ? ?U ? ? ? ?0 ? ? ? ? 0 ? ? 0 ? ?eth0

default ? ? ? ?192.168.0.1 ? 0.0.0.0 ? ? ? ? ? ? ?UG ? ? 0 ? ? ? ? 0 ? ? 0 ? ?eth0

route 命令的輸出項(xiàng)說(shuō)明

輸出項(xiàng) ? ? ? ? ? ? 說(shuō)明?

Destination ? ? ?目標(biāo)網(wǎng)段或者主機(jī)?

Gateway ? ? ? ? ?網(wǎng)關(guān)地址,”*” 表示目標(biāo)是本主機(jī)所屬的網(wǎng)絡(luò),不需要路由 ? ?

Genmask ? ? ? ? 網(wǎng)絡(luò)掩碼?

Flags ? ? ? ? ? ? ? 標(biāo)記


一些可能的標(biāo)記如下:

?U — 路由是活動(dòng)的

?H — 目標(biāo)是一個(gè)主機(jī)

?N?— 目標(biāo)時(shí)某個(gè)網(wǎng)段

?G — 路由指向網(wǎng)關(guān)?

?R — 恢復(fù)動(dòng)態(tài)路由產(chǎn)生的表項(xiàng)?

?D — 由路由的后臺(tái)程序動(dòng)態(tài)地安裝?

?M — 由路由的后臺(tái)程序修改

?! — 拒絕路由?

Metric 路由距離,到達(dá)指定網(wǎng)絡(luò)所需的中轉(zhuǎn)數(shù)(linux 內(nèi)核中沒有使用)。?

Ref 路由項(xiàng)引用次數(shù)(linux 內(nèi)核中沒有使用)。

Use 此路由項(xiàng)被路由軟件查找的次數(shù) 。

Iface 該路由表項(xiàng)對(duì)應(yīng)的輸出接口 。


總結(jié)

以上是生活随笔為你收集整理的网络层核心:路由和路由生成算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。