控制平面作為一種網(wǎng)絡(luò)范圍的邏輯,不僅控制沿著從源主機到目的主機的端到端路徑間的路由器如何轉(zhuǎn)發(fā)數(shù)據(jù)報,而且控制網(wǎng)絡(luò)層組件和服務(wù)如何配置和管理
傳統(tǒng)上,控制平面功能與數(shù)據(jù)平面的轉(zhuǎn)發(fā)功能在一起實現(xiàn),在路由器中作為統(tǒng)一的整體
5.1概述
在網(wǎng)絡(luò)層:數(shù)據(jù)平面中有轉(zhuǎn)發(fā)表(基于目的地轉(zhuǎn)發(fā)的場景中)和流表(在通用轉(zhuǎn)發(fā)的場景中)是鏈接網(wǎng)絡(luò)層的數(shù)據(jù)平面和控制平面的首要元素。這些表定義了一臺路由器的本地數(shù)據(jù)平面轉(zhuǎn)發(fā)行為
本章包括這些轉(zhuǎn)發(fā)表和流表是如何計算、維護和安裝的
有兩種方法:
①每臺路由器控制:在每臺路由器中運行一種路由選擇算法的情況,每臺路由器中都包含轉(zhuǎn)發(fā)和路由選擇功能。每臺路由器有一個路由選擇組件,用于與其他路由器中的路由選擇組件通信,以計算器轉(zhuǎn)發(fā)表的值
②邏輯集中式控制:邏輯集中式控制機器計算并分發(fā)轉(zhuǎn)發(fā)表以供每臺路由器使用。通用的“匹配加轉(zhuǎn)發(fā)”抽象允許執(zhí)行傳統(tǒng)的IP轉(zhuǎn)發(fā)以及其他功能,這些功能原本是在單獨的中間盒中實現(xiàn)的。
該控制器通過一種定義良好的協(xié)議與每臺路由器中的一個控制代理(CA)進行交互,以配置和管理該路由器的轉(zhuǎn)發(fā)表。CA一般具有最少的功能,其任務(wù)是與控制器通信并且按照控制器的命令運行
每臺路由器控制與邏輯集中式控制之間的關(guān)鍵差異:CA既不能直接相互交互,也不能主動參與計算轉(zhuǎn)發(fā)表
5.2 路由選擇算法
路由選擇算法的目的:從發(fā)送方到接收方的路徑中選擇一條通過路由器網(wǎng)絡(luò)的最低開銷路徑
可以將路由選擇問題用圖來表示,圖G=(N,E)是一個N個節(jié)點和E條邊的集合,其中每條邊是取自N的一對節(jié)點。在網(wǎng)絡(luò)層路由選擇環(huán)境中,圖中的節(jié)點表示路由器,這是做出分組轉(zhuǎn)發(fā)決定的點;連接這些節(jié)點的邊表示這些路由器之間的物理鏈路;邊上的數(shù)字就是這條邊的權(quán)值,表示物理鏈路的開銷(長度、速度等)
?在圖中給定任何兩個節(jié)點x和y,在這兩個節(jié)點之間可能有多路徑,每個路徑都有相應(yīng)的開銷。這些路徑中的一條或多條是最低開銷路徑(least-cost path)
?如果一個圖中所有的邊具有相同的開銷,則最低開銷路徑也就是最短路徑,即在源和目的地之間有最少鏈路數(shù)量的路徑
路由選擇算法按集中式與分散式分類
①集中式路由選擇算法:用完整的、全局性的網(wǎng)絡(luò)制式計算出從源到目的地之間的最低開銷路徑。集中式算法具有關(guān)于連通性和鏈路開銷方面的完整信息。具有全局狀態(tài)信息的算法常被稱作鏈路狀態(tài)(Link State,LS)算法,因為該算法必須i知道網(wǎng)絡(luò)中每條鏈路的開銷
②分散式路由選擇算法:路由器以迭代、分布式的方式計算出最低開銷路徑。沒有節(jié)點擁有關(guān)于所有網(wǎng)絡(luò)鏈路開銷的完整信息,每個節(jié)點僅有與其直接相連鏈路的開銷。
路由選擇算法按動靜態(tài)分類
①靜態(tài)路由選擇算法:路由隨時間的變化非常緩慢,通常是人工進行調(diào)整
②動態(tài)路由選擇算法:隨著網(wǎng)絡(luò)流量負載或拓撲發(fā)生變化而改變路由選擇路徑。一個動態(tài)算法可周期性的運行或直接響應(yīng)拓撲或隨著鏈路開銷的變化而運行。雖然可對網(wǎng)絡(luò)的變化出現(xiàn)反應(yīng),但是可能出現(xiàn)路由選擇循環(huán)、路由震蕩等問題
路由選擇算法按負載敏感程度分類
①負載敏感算法:鏈路的開銷會動態(tài)的變化以反映出底層鏈路的當前擁塞水平
②負載遲鈍算法:鏈路的開銷不明確地反應(yīng)其當前的擁塞水平
5.2.1 鏈路狀態(tài)路由選擇算法
通過讓每個節(jié)點向網(wǎng)絡(luò)中的所有其他節(jié)點廣播鏈路狀態(tài)分組來完成,其中每個鏈路狀態(tài)分組包含它所連接的鏈路的標識和開銷。實踐中,一般有鏈路狀態(tài)廣播算法來完成上述內(nèi)容
下面所示的鏈路狀態(tài)路由選擇算法叫做迪杰斯特拉(dijkstra)算法
在圖--單源最短路徑章節(jié)中有詳細實例分析與代碼實現(xiàn),下面的例子作為一個簡述
定義如下符號:
·D(v):到本次迭代,從源節(jié)點到目的節(jié)點v的最低開銷路徑的開銷
·p(v):從源到v沿著當前最低開銷路徑的前一個節(jié)點
·N’:節(jié)點子集,如果從源到v的最低開銷路徑已經(jīng)知道,則將v放入N‘中
?以上圖為例,如果兩節(jié)點之間沒有直接路徑連接則開銷為無限大
①在初始化步驟,從u到預(yù)期直接相鄰的鄰居v,x,w的當前已知最低開銷路徑分別初始化為2、1和5。到w的開銷被設(shè)置為5,這是從u到w的一跳鏈路開銷
②在第一次迭代中,觀察還未加入N’的節(jié)點,并找出再簽一次迭代結(jié)束時具有最低開銷的節(jié)點。節(jié)點為x,開銷為1,因此x被加入集合N‘。更新所有節(jié)點的D(),產(chǎn)生表格中步驟一的結(jié)果。到v的路徑開銷未改變,從x到w的路徑開銷更新為更短的4,p(w)更新為4
③在第二次迭代中,此時u到v和到y(tǒng)的開銷都是2,因此在N’中可以改變?nèi)我獯涡驅(qū)y加入。若先加入y節(jié)點,則此時還未在N‘中的節(jié)點包括v、w、z,更新它們的D()p()
④以此類推
當LS算法終止時,對于每個節(jié)點都知道從源節(jié)點到該節(jié)點的最低開銷路徑。因此對每個節(jié)點存儲從源到目的地最低開銷路徑的下一跳節(jié)點
?在第一次迭代中,需要遍歷所有的n個節(jié)點;在第二次迭代中,需要遍歷n-1個節(jié)點;以此類推,在迭代中需要搜尋的節(jié)點總數(shù)未n(n+1)/2,因此最壞情況下迪杰斯特拉算法的時間復(fù)雜度為O(n^2)。如果采用堆的數(shù)據(jù)結(jié)構(gòu)實現(xiàn),可以將時間復(fù)雜度縮短至對數(shù)時間
擁塞敏感的路由選擇的振蕩
在下面的例子中,鏈路開銷是非對稱的(即同一條鏈路上兩個方向的開銷不同)
①節(jié)點z產(chǎn)生發(fā)往w的的一個單元的流量,節(jié)點x也產(chǎn)生發(fā)往w的一個單元的流量,并且節(jié)點y也產(chǎn)生發(fā)往w的一個數(shù)量為e的流量
②當LS算法再次運行時,節(jié)點y確定順時針到w的路徑開銷為1嗎,而逆時針到w的路徑開銷為1+e。因此y到w的最低開銷路徑為順時針。x到w的最低開銷路徑也是順時針
③當LS算法運行時,xyz都檢測到一條到w的逆時針方向的零開銷路徑,因此流量都為逆時針方向
④LS算法運行,xyz將流量都引導(dǎo)至順時針方向
?對于上述有兩種解決方法
第一種方案是強制鏈路開銷不取決于所承載則流量,但這樣違背了路由選擇避開擁塞鏈路的原理
第二種方案是保障并非所有的路由器都同時運行LS算法。路由器初始時以同一周期但是不同時刻執(zhí)行算法,算法執(zhí)行的時機最終會在路由器上變成同步并保持。解決這種自同步問題的方法是讓每臺路由器發(fā)送鏈路通告的時間隨機化
5.2.2 距離向量路由選擇算法
距離向量算法是一個異步的、迭代的、自我終止的、分布式的算法
令是從節(jié)點x到節(jié)點y的最低開銷路徑的開銷,則該最低開銷與著名的Bellman-Ford方程相關(guān),即?
距離向量路由選擇算法的基本思想如下:
每個節(jié)點x以為開始,對在N中的所有節(jié)點y,估計從x到y(tǒng)的最低開銷路徑的開銷
使用DV算法,每個節(jié)點x維護下列路由選擇信息:
·對于每個鄰居v,從x到直接相鄰鄰居v的開銷為c(x,v)
·節(jié)點x的距離向量,即,包含了x到N中所有目的地y的開銷估計值
·它的每個鄰居的距離向量,即對x的每個鄰居v,有
在該分布式、異步算法中,每個節(jié)點不時地向它的每個鄰居發(fā)射它的距離向量副本。當節(jié)點x從它的任何一個鄰居v接收到一個新的距離向量,它保存v的距離向量,然后使用上面的Bellman-Ford方程更新它自己的距離向量如下:
分布式DV算法中,節(jié)點具有的唯一信息使它到直接相連鄰居的鏈路開銷和它從這些鄰居接收到的信息
如圖所示顯示了DV算法的使用,應(yīng)用場合是該圖頂部有三個節(jié)點的簡單網(wǎng)絡(luò)。算法以同步的方式顯示,其中所有的節(jié)點同時從鄰居接收報文,計算其新距離向量,如果距離向量發(fā)生了變化則通知其鄰居(這里以同步的方式實現(xiàn),實際上異步可以在任意時刻出現(xiàn)節(jié)點計算與更新的產(chǎn)生/接收)
最左側(cè)一列標識各個路由器的初始路由選擇表,每個路由器僅知道自己與其他直接相連鄰居的鏈路開銷,對其他路由器的信息并不知道,因此初始化為無窮大
隨后每個節(jié)點向它的兩個鄰居發(fā)送其距離向量,在接收到該更新后,每個節(jié)點重新計算他自己的距離向量,下圖為x的距離向量更新,yz與其類似
中間一列顯示了各個節(jié)點的新距離向量與從鄰居接收到的距離向量。此時相較于初始路由選擇表,xz的路由選擇表發(fā)生了改變。因此它們再次向直接相鄰鄰居發(fā)生更新的信息。由于y并未改變,因此y并不發(fā)送更新信息。在接收到更新后,這些節(jié)點重新計算他們的距離向量并更新路由選擇表,如第三列所示
此時無更新報文發(fā)送,將不會出現(xiàn)進一步的路由選擇表計算,該算法進入靜止狀態(tài)
1.距離向量算法:鏈路開銷改變與鏈路故障
考慮兩種鏈路開銷改變的情況,鏈路開銷變大與鏈路開銷變小
鏈路開銷變小:好消息傳播快
如圖所示,從y到x的鏈路開銷從4變成1。接下來考慮y與z到目的地x的變化
在t0時刻:y檢測到鏈路開銷變化,更新距離向量,并通知其鄰居z
在t1時刻:z接收到y(tǒng)的更新報文,并更新自己的距離表,計算出從z到x的最低開銷為2(從5減少為2),并向鄰居y發(fā)送它更新的距離向量
在t2時刻:y接收到z的更新報文,y的最低開銷未改變,并不向z發(fā)送更新報文。算法進入靜止狀態(tài)
鏈路開銷變大:壞消息傳播慢
如圖所示,從y到x的鏈路開銷從4變成60。接下來考慮y與z到目的地x的變化
在鏈路開銷變化之前,???
①在t0時刻,y檢測到鏈路開銷變化,y重新計算到x的最低開銷路徑值為
此時從全局的視角來看,這個最低開銷路徑是錯誤的。但是DV算法的特征就是節(jié)點并不知道全局信息,此時就會產(chǎn)生路由選擇環(huán)路,也就是y選擇通過z路由到達x,z路由要通過y到達x。當分組到達y或z后,會在兩個節(jié)點間不間斷的來回反復(fù)
此時y已經(jīng)計算出到達x的最低開銷路徑為6,因此他將在t1時刻發(fā)送更新報文給直接相鄰鄰居
②在t1時刻,z接受到y(tǒng)的更新報文,即,z更新它到x的最低開銷為
此時z已經(jīng)計算出到達x的最低開銷路徑為7,因此它將在t2時刻發(fā)送更新報文給直接相鄰鄰居
③在t2時刻,y接收到z的更新報文……依此類推
該循環(huán)將持續(xù)44次迭代,直到z最終計算出它通過y到達x的路徑開銷大于50為止。此時z的最低開銷路徑為直接從z到x而不途徑y(tǒng)
假設(shè)x與y之間的鏈路開銷為無窮大,那么將進行無數(shù)次循環(huán)迭代,變成無窮計數(shù)問題
2.距離向量算法:增加毒性逆轉(zhuǎn)
毒性逆轉(zhuǎn)(poisoned reverse):如果一個節(jié)點z到達一個節(jié)點x途徑鄰居節(jié)點y,則z將會通報該鄰居節(jié)點到達目的地的距離為無限遠
即如果z通過y到達目的地x,則z傳遞給y的響應(yīng)報文將會令(即使z實際上的)
毒性逆轉(zhuǎn)并不能徹底解決無窮計數(shù)問題
無窮計數(shù)解決辦法:①設(shè)置最大跳轉(zhuǎn)距離②防止選擇環(huán)路,每個路由器都記錄所經(jīng)過的的路由③水平分割:不向某條路由對應(yīng)的出接口通告該路由信息
3.LS與DV路由選擇算法的比較
DV和LS算法采用互補的方法來解決路由選擇計算問題。在DV算法中,每個節(jié)點僅與它直接相連的鄰居交談,但它為其鄰居提供了從它自己到網(wǎng)絡(luò)中的所有其他節(jié)點的最低開銷估計。LS算法需要全局信息,因此在每臺路由器中實現(xiàn)時,需要先經(jīng)廣播與所有其他節(jié)點通信,但僅告訴它們與它直接相連鏈路的開銷
以N為節(jié)點(路由器)的集合,E是邊(鏈路)的集合
·報文復(fù)雜性: | ·收斂速度: | ·健壯性: | |
LS算法 | LS算法要求知道網(wǎng)絡(luò)中每條鏈路的開銷,因此需要發(fā)送O( |N| |E| )個報文,每當有一個鏈路的開銷發(fā)生改變,都需要向所有節(jié)點發(fā)送新的鏈路開銷; |
LS算法是一個要求O( |N| |E| )個報文的O( |N| ^2)算法 | 當一臺路由器發(fā)生故障、行為錯亂或被蓄意破壞時。LS算法中路由器能夠向其鏈接得鏈路廣播不正確的開銷,每個節(jié)點僅計算自己的轉(zhuǎn)發(fā)表,自行處理收到的LS廣播分組。路由計算在某種程度上是分離的,提供了一定的健壯性; |
DV算法 | DV算法要求在每次迭代時,兩個直接相鄰鄰居之間交換報文,只有當鏈路開銷改變影響與該鏈路相連節(jié)點最低開銷路徑發(fā)生變化時,才傳播以改變的鏈路開銷 | DV算法收斂較慢,且在收斂時會遇到路由選擇環(huán)路與無窮計數(shù)問題 | DV算法下,一個節(jié)點可向任意或所有目的節(jié)點通告其不正確的最低開銷路徑(DV算法中一個不正確的節(jié)點計算值會擴散到整個網(wǎng)絡(luò)) |
5.3 因特網(wǎng)中自治系統(tǒng)內(nèi)部的路由選擇:OSPF
前面的研究中都把網(wǎng)絡(luò)看作一個互聯(lián)路由器的集合,所有的路由器都執(zhí)行相同的路由選擇算法,各個路由器實際上很難相互區(qū)分,這帶來了兩個問題
問題一:規(guī)模。隨著路由器數(shù)量的增加,設(shè)計路由選擇信息的通信、計算和存儲的開銷極大。所有路由器之間廣播連通性和鏈路開銷更新的負擔巨大,在如此巨大的量級下,距離向量(DV)算法永遠無法收斂,因此必須采取一定的措施減少大型網(wǎng)絡(luò)路由計算的復(fù)雜性
問題二:管理自治。因特網(wǎng)是ISP的網(wǎng)絡(luò),每個ISP都有自己的路由器網(wǎng)絡(luò)。ISP通常希望按自己的意愿運行路由器,或?qū)ν獠侩[藏其網(wǎng)絡(luò)的內(nèi)部組織面貌。理想情況下,一個組織應(yīng)該能夠按照自己的愿望運行和管理其網(wǎng)絡(luò),還要能與外部網(wǎng)絡(luò)連接
?這兩個問題可以通過將路由器組織進自治系統(tǒng)(Autonomous System,AS)來解決,其中每個AS有一組通常在相同管理控制下的路由器組成。一個自治系統(tǒng)由其全局唯一的AS號(ASN)來標識
在相同AS中的路由器都運行相同的路由選擇算法并且有彼此的信息。在一個自治系統(tǒng)內(nèi)運行的路由選擇算法叫做自治系統(tǒng)內(nèi)部路由器選擇協(xié)議(intra-autonomous system routing protocol)
開放最短路優(yōu)先(OSPF)
OSPF路由選擇及其關(guān)系密切的IS-IS協(xié)議都廣泛用于AS內(nèi)部路由選擇
OSPF是一種鏈路狀態(tài)協(xié)議,它使用洪泛鏈路狀態(tài)信息和Dijkstra最低開銷路徑算法。每臺路由器在本地運行Dijkstra最短路徑算法,以確定一個以自身為根節(jié)點到所有子網(wǎng)的最短路徑樹
每條鏈路的開銷是由網(wǎng)絡(luò)管理員配置的。管理員可以使所有鏈路開銷設(shè)為1,因而實現(xiàn)了最少條數(shù)路由選擇;或者選擇將鏈路權(quán)值用鏈路開銷反比設(shè)置,從而鼓勵流量使用低帶寬鏈路
OSPF中,路由器向自治系統(tǒng)內(nèi)所有其他路由器廣播路由選擇信息,而不是僅僅向其相鄰路由器廣播。每當一條鏈路的狀態(tài)發(fā)生變化時,路由器就會廣播鏈路狀態(tài)信息。即使鏈路狀態(tài)為發(fā)生變化,它也要周期性的廣播鏈路狀態(tài)(至少間隔30min一次)
優(yōu)點
? ·安全:能夠鑒別OSPF路由器之間的交換。依靠鑒別,只有受信任的路由器能夠參與一個AS內(nèi)的OSPF協(xié)議,因此可以防止惡意入侵者將不正確的信息注入路由器表內(nèi)。①如果使用簡單的鑒別方式,則每臺路由器配置相同的口令。但一臺路由器發(fā)送一個OSPF分組時,將會以明文的方式包括口令,這樣并不是十分安全。②使用MD5鑒別基于配置在路由器上的共享秘密密鑰。對每個OSPF分組路由器都會對該附加了秘密密鑰的分組內(nèi)容計算MD5散列值,將該計算值與路由器攜帶的散列值比較,從而嚴重分組真實性
? ·多條相同開銷的路徑:當?shù)竭_某目的地的多條路徑具有相同的開銷時,OSPF允許使用多條路徑(無須選擇單一路徑承載所有流量)
? ·對單播與多播路由選擇的綜合支持:多播OSPF(MOSPF)提供對OSPF的簡單擴展,以提供多播路由選擇,MOSPF為現(xiàn)有的OSPF鏈路狀態(tài)廣播機制增加了一種新型的鏈路狀態(tài)通告
? ·支持在單個AS中的層次結(jié)構(gòu):一個OSPF自治系統(tǒng)能夠?qū)哟位呐渲枚鄠€區(qū)域,每個區(qū)域都運行自己的OSPF鏈路狀態(tài)路由選擇算法,區(qū)域內(nèi)的每臺路由器都向該區(qū)域內(nèi)的所有其他路由器廣播其鏈路狀態(tài)。每個區(qū)域內(nèi),由一臺或多臺區(qū)域邊界路由器負責(zé)為流向該區(qū)域以外的分組提供路由選擇。
在AS中只有一個OSPF區(qū)域會被配置成主干區(qū)域。主干區(qū)域的主要作用是為該AS中其他區(qū)域之間的流量提供路由選擇。主干總是包含本AS中的所有區(qū)域邊界路由器,并且可能包含一些非邊界路由器
AS中,區(qū)域間路由選擇要求分組先路由至一個區(qū)域邊界路由器(通過區(qū)域內(nèi)路由選擇),然后通過主干路由到達位于目的區(qū)域的邊界路由器,在到達最終目的地
5.4 ISP之間的OSPF路由選擇:BGP
OSPF是一個AS內(nèi)部路由選擇協(xié)議。在相同AS內(nèi)的源和目的地之間進行分組選路時,分組遵循的路徑完全由AS內(nèi)路由選擇協(xié)議所決定
當分組跨越多個AS進行路由時,需要一個自治系統(tǒng)間路由選擇協(xié)議(inter-autonomous system routing protocol)。由于AS間路由選擇協(xié)議設(shè)計多個AS之間的協(xié)調(diào),所以AS通信必須運行相同的AS間路由選擇協(xié)議。在因特網(wǎng)中,所有的AS運行相同的AS間路由選擇協(xié)議,稱為邊界網(wǎng)關(guān)協(xié)議(Broder Gateway Protocol,BGP)
BGP是一種分布式和異步的協(xié)議?
5.4.1 BGP的作用
?在BGP中,分組并不是路由到一個特定的目的地址,而是路由到CIDR化的前綴,其中每個前綴標識一個子網(wǎng)或一個子網(wǎng)的集合。
在BGP中,一個目的地可以采用138.16.68/22的形式,對于這個例子來說包括1024個IP地址。因此一臺路由器的轉(zhuǎn)發(fā)表將會具有形式為(x,I)的表項,其中x是一個前綴(如138.16.68/22),I是該路由器接口之一的接口號
BGP為每臺路由器提供一下功能:
1)從鄰居AS獲取前綴的可達信息。BGP允許每個子網(wǎng)向因特網(wǎng)的其余部分通告自己的存在。BGP確保因特網(wǎng)中的所有AS知道該子網(wǎng)。如果沒有BGP則每個子網(wǎng)將是隔離的孤島
2)確定到該前綴的“最好的”路由。一臺路由器可能知道兩條或更多條到特定前綴的不同路由,路由器將在本地運行一個BGP路由選擇過程,用于確定最好的路由
5.4.2 通告BGP路由信息
對于每個AS,每臺路由器要么是一個網(wǎng)關(guān)路由器(gateway router),要么是一個內(nèi)部路由器(internal router)?。網(wǎng)關(guān)路由器是位于AS邊緣的路由器,它直接連接到在其他AS中的一臺或多臺路由器。內(nèi)部路由器僅連接自己所在AS中的主機和路由器
?以上圖為例,對圖中所有的路由器通告對于前綴x的可達性信息。首先,AS3向AS2發(fā)送一個BGP報文,告知x位于AS3中;將該報文表示為“AS3 x”。然后,AS2向AS1發(fā)送一個BGP報文,告知x存在,并且可以通過AS2進入AS3從而到達x;將該報文表示為“AS2 AS3 x”。以這種方式每個自治系統(tǒng)不僅知道x的存在,還知道通向x的自治系統(tǒng)的路徑
雖然通告BGP的報文能大致知道穿越路徑,但是對于實際發(fā)送報文而言是不準確
在BGP中,每對路由器通過使用179端口的半永久TCP連接交換路由選擇信息。每條直接連接并且所有通過該連接發(fā)送的BGP報文稱為BGP連接。
跨越兩個AS的BGP連接稱為外部BGP(eBGP)連接;在相同AS中的兩臺路由器之間的BGP會話稱為內(nèi)部BGP(iBGP)連接
在每個AS中的路由器之間有多條iBGP連接。iBGP之間是TCP連接,也就意味著iBGP鄰居采用的是邏輯連接的方式,兩個IBGP連接不一定存在實際的物理鏈路
5.4.3 確定最好的路由
從一個給定的路由器到達一個目的子網(wǎng)可能有多條路徑,因此需要在路徑間進行選擇并且相應(yīng)的配置轉(zhuǎn)發(fā)表
當路由器通過BGP連接通告前綴時,它在前綴中包括一些BGP屬性(BGP attribute)。前綴及其屬性稱為路由(route)。兩個較重要的屬性是AS-PATH和NEXT-HOP
AS-PATH屬性包含了已經(jīng)通過的AS的列表,當一個前綴通過某個AS,該AS將其ASN加入AS-PATH中的現(xiàn)有列表。BGP路由器使用AS-PATH屬性來檢測和防止通告環(huán)路。如果一臺路由器在路徑列表中看到包含了自己的AS,將拒絕該通告。
NEXT-HOP是AS_PATH其實路由器接口的IP地址
?以上圖為例子,從AS1到子網(wǎng)x有兩條路:其中一條使用AS-PATH“AS2 AS3”;另一條使用AS-PATH“AS3”。對于從AS1通過AS2到達x的路由“AS2 AS3 x”,其屬性NEXT-TOP是路由器2a左邊接口的IP地址。對于從AS1繞過AS2到達x的路由“AS3 x”,其NEXT-TOP屬性是路由器3d最左邊接口的IP地址
總的來說,在這個例子中,AS1中的每臺路由器都知道了前綴x的兩臺BGP路由:
路由器2a的最左側(cè)接口的IP地址:AS2 AS3;x
路由器3d的最左側(cè)接口的IP地址:AS3;x
在這里每條BGP路由包括三個組件:NEXT-TOP、AS-PATH、目的前綴
1.熱土豆路由選擇
在熱土豆路由選擇中,(從所有可能的路由中)選擇的路由到開始該路由的NEXT-TOP路由器具有最小開銷
簡單來說:熱土豆路由選擇中,當一個分組到來時,節(jié)點必須盡快脫手,將其放入輸出列最短的方向上排隊,而不管該方向通向何方
熱土豆路由選擇是自私的算法,因為它只考慮自己在AS中的開銷,而忽略了在AS之外端到端開銷的其他部分。在熱土豆路由選擇中,對于在相同AS中的兩臺路由器,可能對相同的前綴選擇不同的AS路徑
2.路由器選擇算法
?對于任何給定的目的地前綴,進入BGP的路由選擇算法的輸入是某前綴的所有路由的集合
如果只有一條路由,則選擇該路由。如果到相同的前綴又兩條或多條路由,則順序地調(diào)用下列消除規(guī)則直至剩余一條路由:
1)路由被指派一個本地偏好值作為其屬性之一。一條路由的本地偏好可能由該路由器設(shè)置,或者從在相同AS中的另一臺路由器學(xué)到。本地偏好屬性的值是一種策略決定,取決于該AS的網(wǎng)絡(luò)管理員
2)在剩余的具有相同最高本地偏好值的路由中,選擇具有最短AS-PATH的路由。如果該規(guī)則是路由選擇的唯一規(guī)則,則BGP講使用距離向量算法決定路徑,其中距離測量使用AS跳的跳數(shù),而不是路由器跳的跳數(shù)
3)在剩余所有具有相同的本地偏好值和相同的AS-APTH長度的路由中,使用熱土豆路由選擇,即選擇具有最靠近NEXT-HOP路由器的路由
4)如果仍然剩余多條路由,則該路由器使用BGP標識符來選擇路由
?舉一個例子,我們再次考慮圖5-10中的路由器1b。前綴x有兩條BGP路由,一條通過AS2而另一條繞過AS2。如果它使用自己的熱土豆路由選擇,則BCP將通過AS2向前綴x路由分組。但在上面的路由選擇算法中,在規(guī)則3之前應(yīng)用了規(guī)則2,導(dǎo)致BGP選擇繞過AS2的那條路由,因為該路由具有更短的AS-PATH。因此我們看到使用上述路由選擇算法,BGP不再是一種自私的算法,即它先查找具有短AS路徑的路由(因而很可能減小端到端時延)。
5.4.4 IP任播
IP任播就是將一個IP廣播到多個服務(wù)器上,一個IP地址對應(yīng)多個服務(wù)器,聽起來跟我們一個域名解析到多臺服務(wù)器差不多
除了作為因特網(wǎng)AS間路由選擇協(xié)議外,BGP還常被用于實現(xiàn)IP任播,該服務(wù)常用于DNS中。
存在以下情況:①在許多分散的不同地理位置,,替換不同服務(wù)器上的相同內(nèi)容②讓每個用戶從最靠近的服務(wù)器訪問內(nèi)容
一個CDN能夠更換位于不同國家、不同服務(wù)器上的視頻和其他對象。DNS系統(tǒng)能夠在全世界的DNS服務(wù)器上復(fù)制DNS記錄。當一個用戶要訪問該復(fù)制的內(nèi)容,可以將用戶指向具有該復(fù)制內(nèi)容的“最近的”服務(wù)器
在IP任播配置階段,CDN公司為多臺服務(wù)器指派相同的IP地址,并且在每臺服務(wù)器使用標準的BGP來通告IP地址。當某臺BGP路由器收到對于該IP地址的多個路由通告,它將這些通告處理為對相同物理位置提供不同的路徑。當配置其路由選擇表時,每臺路由器間本地化地使用BGP路由選擇算法來選擇最好的路由路徑
比如,一個BGP路由離該路由器僅有一AS跳的距離,并且所有其他BGP路由時兩AS跳或更多跳,則該BGP路由器將選擇把分組路由到一AS跳遠的位置
在初始BGP地址通告階段后,CDN能夠進行其分發(fā)內(nèi)容搞得主要任務(wù)
實踐中,IP任播廣泛用于將DNS請求指向最近的根DNS服務(wù)器。當前根DNS服務(wù)器有13個IP地址,但是具有多個DNS服務(wù)器,也就是具有多個不同的物理地址。當一個DNS請求向這13個IP地址發(fā)送時,使用IP任播將該請求路由到負責(zé)改地址的最近的DNS根服務(wù)器?
5.4.5 路由選擇策略
?上圖顯示了6個互聯(lián)網(wǎng)的自治系統(tǒng):A、B、C、W、X和Y。其中A、B、C、W、X和Y是AS,而不是路由器。
假設(shè)自治系統(tǒng)W、X和Y是接入ISP,而A、B和C是主干提供商網(wǎng)絡(luò)。A、B和C直接向彼此發(fā)送流量,并且向它們的客戶網(wǎng)絡(luò)提供全部的BGP信息。所有進入一個接入ISP網(wǎng)絡(luò)的流量必定是以該網(wǎng)絡(luò)為目的地,所有離開一個結(jié)入ISP網(wǎng)絡(luò)的流量必定源于該網(wǎng)絡(luò)
顯然W和Y是接入ISP,X是一個多宿接入ISP(multi-homed stub network),因為它是經(jīng)由兩個不同的提供商連接到網(wǎng)絡(luò)的其余部分。X與W和Y一樣,自身一定實進入\離開X的所有流量的源\目的地。
這種樁網(wǎng)絡(luò)的行為是如何實現(xiàn)和強制實現(xiàn)的呢?X如何防止轉(zhuǎn)發(fā)B與C之間的流量呢?
通過控制BGP路由的通告方式可以容易的實現(xiàn)。X如果向B和C通告它自身沒有通向任何其他目的地的路徑,那么X將起一個接入ISP作用。也就是說即使X知道通過XCY可以到達網(wǎng)絡(luò)Y,X也不會將該路徑通告給B。因此B也不會通過X轉(zhuǎn)發(fā)目的為Y的流量
目前并沒有強制主干ISP之間如何路由選擇的官方標準。然而,商業(yè)運行的ISP們都遵守的一個經(jīng)驗法則是:任何穿越某ISP主干網(wǎng)的流量必須是其源或目的位于該ISP的某個客戶網(wǎng)絡(luò)中;不然這些流量將會免費搭車通過該ISP的網(wǎng)絡(luò)
為什么會有不同的AS間和AS內(nèi)部路由選擇協(xié)議?
AS內(nèi)與AS間的路由選擇目標之間存在本質(zhì)差別:
·策略。在AS之間,策略問題起主導(dǎo)作用。一個給定的AS產(chǎn)生的流量不能穿過冷一個特定的AS。BGP承載了路徑屬性,并提供路由選擇信息的受控分布,以便能進行路由選擇決策。然而,在一個AS內(nèi)部,一切都是管理員的控制下執(zhí)行同一個BGP協(xié)議,因此策略問題并不影響AS內(nèi)部的選擇路由·規(guī)模。如何擴展一個路由選擇算法及其數(shù)據(jù)結(jié)構(gòu)以處理大量網(wǎng)絡(luò)或大量網(wǎng)絡(luò)之間的路由選擇能力是AS間路由選擇的一個關(guān)鍵問題。在一個AS內(nèi)部,可擴展性并不是關(guān)注的焦點。如果單個ISP變得過大,可以將其分為兩個AS,并且在兩個新的AS之間執(zhí)行AS間的路由選擇
·性能。AS間路由選擇是面向策略的,因此路由質(zhì)量是次要關(guān)心問題(一條更長或開銷更高的路由也許由于滿足某些策略條件而被采用,即使有更短開銷更少的不滿足條件的路由存在)在一個AS內(nèi)部,更關(guān)心一條路由的性能,而不是策略的執(zhí)行情況
5.4.6 拼裝在一起:在因特網(wǎng)中呈現(xiàn)
下面將舉一個例子,用于描述IP地址、DNS和BGP
假設(shè)有一個具有若干服務(wù)器的小型公司網(wǎng)絡(luò),包括一臺描述公司產(chǎn)品和服務(wù)的公告Web服務(wù)器,一臺員工獲取電子郵件報文的電子郵箱服務(wù)器和一臺DNS服務(wù)器。并且希望全世界都可以訪問Web站點來獲取產(chǎn)品和服務(wù),并且希望員工能向遍布世界的客戶發(fā)送和接收電子郵件
為了實現(xiàn)上述功能,首先需要獲得因特網(wǎng)連接,也就是與本地ISP簽訂合同并進行連接。公司需要一臺網(wǎng)關(guān)路由器,該路由器將與本地ISP的一臺路由器相連。本地ISP將提供一個IP地址范圍(比如由256個地址組成的一個/24地址范圍)。當擁有了物理連接和IP地址范圍之后,需要在該地址范圍內(nèi)分配IP地址:一個給Web服務(wù)器,一個給電子郵件服務(wù)器,一個給DNS服務(wù)器,一個給網(wǎng)關(guān)路由器,并且將IP地址分配給公司中的其他服務(wù)器和網(wǎng)絡(luò)設(shè)備
其次,需要與一個因特網(wǎng)注冊機構(gòu)簽訂合同,來為公司獲取一個域名。由于外接將聯(lián)系公司的DNS服務(wù)器獲取該服務(wù)器的IP地址,所以還需要向注冊機構(gòu)提供DNS服務(wù)器的IP地址。此后注冊公司將會在.com頂級域名服務(wù)器中為公司的DNS服務(wù)器設(shè)置一個表項(域名和對應(yīng)的IP地址)。此后知道域名(比如 baidu.com)的用戶就可以經(jīng)過DNS系統(tǒng)獲取公司的DNS服務(wù)器IP地址
為了使人們能夠發(fā)現(xiàn)Web服務(wù)器的IP地址,需要在DNS服務(wù)器中加入一個將Web服務(wù)器的主機名映射到IP地址的表項。并且為公司中其他的公共可用服務(wù)器設(shè)置類似的表項,包括電子郵件服務(wù)器等。如果一個用戶要瀏覽Web服務(wù)器,則DNS系統(tǒng)將聯(lián)系DNS服務(wù)器,找到Web服務(wù)器的IP地址,并將其返回給用戶。從而用戶可以與Web服務(wù)器創(chuàng)建一個直接的TCP連接
假設(shè)用戶已經(jīng)知道Web服務(wù)器的IP地址,并且向該IP地址發(fā)送一個IP數(shù)據(jù)報。該數(shù)據(jù)報將通過互聯(lián)網(wǎng)進行路由,經(jīng)歷了在許多不同自治系統(tǒng)中的一系列路由器,并最終到達公司的Web服務(wù)器。當任何一個路由器收到該數(shù)據(jù)報時,將去它的轉(zhuǎn)發(fā)表中尋找一個表項來確定轉(zhuǎn)發(fā)該數(shù)據(jù)報的外出端口。因此每一臺路由器都需要知道公司的/24前綴
一臺路由器如何知道公司的前綴呢?通過BGP獲得該前綴。當公司與本地ISP簽訂合同并獲得了分配的前綴時,本地ISP將使用BGP向與其連接的ISP通告你的前綴,從而使得能夠?qū)?shù)據(jù)報適當?shù)霓D(zhuǎn)發(fā)到正確的Web和電子郵件服務(wù)器
5.5 SDN控制平面
SDN指軟件定義網(wǎng)絡(luò),本節(jié)中包括控制分組在網(wǎng)絡(luò)SDN使能設(shè)備中轉(zhuǎn)發(fā)的網(wǎng)絡(luò)范圍邏輯,以及這些設(shè)備和服務(wù)的配置與管理
網(wǎng)絡(luò)的轉(zhuǎn)發(fā)設(shè)備稱為“分組交換機”,能夠根據(jù)網(wǎng)絡(luò)層源\目的地址、鏈路層源\目的地址以及運輸層、網(wǎng)絡(luò)層和鏈路層中分組首部字段做出轉(zhuǎn)發(fā)決定
SDN體系結(jié)構(gòu)的關(guān)鍵特征
基于流的轉(zhuǎn)發(fā)。SDN控制的交換機的分組轉(zhuǎn)發(fā)工資,能夠基于運輸層、網(wǎng)絡(luò)層或鏈路層首部中任意數(shù)量的首部字段值進行。傳統(tǒng)方法中IP數(shù)據(jù)報的轉(zhuǎn)發(fā)僅依據(jù)數(shù)據(jù)報的目的IP地址進行。而SDN控制平面的工作是計算、管理和安裝所有網(wǎng)絡(luò)交換機中的流表項
數(shù)據(jù)平面與控制平面分離。數(shù)據(jù)平面由網(wǎng)絡(luò)交換機組成,交換機是相對簡單的設(shè)備,該設(shè)備在流表中執(zhí)行“匹配加動作的規(guī)則”??刂破矫嬗煞?wù)器以及決定和管理交換機流表的軟件組成
網(wǎng)絡(luò)控制功能:位于數(shù)據(jù)平面交換機外部。控制平面自身由兩個組件組成:一個SDN控制器,以及若干網(wǎng)絡(luò)控制應(yīng)用程序。控制器維護準確的網(wǎng)絡(luò)狀態(tài)信息,為運行在控制平面中的網(wǎng)絡(luò)控制應(yīng)用程序提供這些信息;應(yīng)用程序同通過控制器提供的方法監(jiān)視、編程和控制下面的網(wǎng)絡(luò)設(shè)備
可編程的網(wǎng)絡(luò)。通過運行在控制平面中的網(wǎng)絡(luò)控制應(yīng)用程序,該網(wǎng)絡(luò)是可編程的。應(yīng)用程序使用了由SDN控制器提供的API來定義和控制網(wǎng)絡(luò)設(shè)備中的數(shù)據(jù)平面
5.5.1 SDN控制平面:SDN控制器和SDN網(wǎng)絡(luò)控制應(yīng)用程序
SDN控制平面分為兩個部分:SDN控制器和SDN網(wǎng)絡(luò)控制應(yīng)用程序
SDN控制器的功能包括三個層次:
通信層:SDN控制器和受控網(wǎng)絡(luò)設(shè)備之間的通信。SDN控制器控制設(shè)備的運行,需要一個協(xié)議來傳送控制器與這些設(shè)備之間的信息。并且設(shè)備需要能夠向控制器傳遞本地觀察到的事件(比如報文指示鏈路的激活或停用,設(shè)備加入網(wǎng)絡(luò)等)OpenFlow是一種提供這種通信功能的特定協(xié)議
網(wǎng)絡(luò)范圍狀態(tài)管理層。SDN控制平面做出控制決定,需要依靠控制器對有關(guān)網(wǎng)絡(luò)的主機、鏈路、交換機和其他SDN控制設(shè)備的狀態(tài)信息。控制平面的最終目標是決定各個設(shè)備上的流表,控制器可以維護這些流表的拷貝
對于網(wǎng)絡(luò)控制應(yīng)用程序?qū)拥慕涌冢?/strong>控制器通過接口與網(wǎng)絡(luò)控制層應(yīng)用交互。該API接口允許網(wǎng)絡(luò)控制應(yīng)用程序在管理狀態(tài)層之間讀\寫網(wǎng)絡(luò)狀態(tài)和流表。當狀態(tài)改變時,應(yīng)用程序能夠注冊進行通告
5.5.2 OpenFlow協(xié)議
OpenFlow是一種網(wǎng)絡(luò)通信協(xié)議,應(yīng)用于SDN架構(gòu)中控制器和轉(zhuǎn)發(fā)器之間的通信。SDN的一個核心思想就是“轉(zhuǎn)發(fā)、控制分離”,要實現(xiàn)轉(zhuǎn)、控分離,就需要在控制器與轉(zhuǎn)發(fā)器之間建立一個通信接口標準,允許控制器直接訪問和控制轉(zhuǎn)發(fā)器的轉(zhuǎn)發(fā)平面
OpenFlow引入了“流表”的概念,轉(zhuǎn)發(fā)器通過流表來指導(dǎo)數(shù)據(jù)包的轉(zhuǎn)發(fā)??刂破髡峭ㄟ^OpenFlow提供的接口在轉(zhuǎn)發(fā)器上部署相應(yīng)的流表,從而實現(xiàn)對轉(zhuǎn)發(fā)平面的控制。
OpenFlow協(xié)議運行在SDN控制器和SDN控制的交換機或其他實現(xiàn)OpenFlow API設(shè)備之間。OpenFlow協(xié)議運行在TCP之上,使用6653的默認端口號
從控制器到受控交換機流動的重要報文包括:
配置。該報文允許控制器查詢并設(shè)置交換機的配置參數(shù)
修改狀態(tài)。該報文有控制器所使用,以增加/刪除或修改交換機流表中的表項,并且設(shè)置交換機端口特性
讀狀態(tài)。該報文被控制器用于從交換機的流表和端口手機統(tǒng)計數(shù)據(jù)和計數(shù)器值
發(fā)送分組。該報文被控制器用于在受控交換器的特定端口發(fā)送一個特定報文
從受控交換機到控制器流動的重要報文包括:
流刪除。該報文通知控制器已經(jīng)刪除一個流表項,例如由于超時,或作為收到“修改狀態(tài)”報文的結(jié)果
端口狀態(tài)。交換機通過該報文項控制器通知端口狀態(tài)的變化
分組入。一個分組到達交換機端口,并且不能與任何流表項匹配,那 么這個分組將被發(fā)送給控制器進行額外處理,匹配的分組也被發(fā)送給控制器,作為 匹配時所采取的一個動作 “分組入“報文被用于將分組發(fā)送給控制器
5.5.3 數(shù)據(jù)平面和控制平面交互的例子
下圖中的的每臺路由器中都執(zhí)行Dijkstra算法,并且在所有網(wǎng)絡(luò)路由器中洪泛鏈路狀態(tài)更新
假設(shè)
1)Dijkstra算法作為一個單獨的程序來執(zhí)行,位于分組交換機的外部
2)分組交換機向SDN控制器發(fā)送鏈路更新并且交換機之間不互相發(fā)送
3)假設(shè)交換機中s1和s2之間的鏈路斷開
①交換機s1由于與s2之間的鏈路故障,使用OpenFlow“端口狀態(tài)”報文向SDN控制器通報該鏈路狀態(tài)的更新
②SDN控制器接收到s1的鏈路狀態(tài)更新的OpenFlow報文,并且通告鏈路狀態(tài)管理器,有管理器更新鏈路狀態(tài)庫
③實現(xiàn)Dijkstra鏈路狀態(tài)路由選擇的網(wǎng)絡(luò)控制應(yīng)用程序在之前進行了注冊,當鏈路狀態(tài)更新時將會得到通告。引用程序接受該鏈路狀態(tài)更新的通告
④鏈路狀態(tài)路由選擇應(yīng)用程序與鏈路狀態(tài)管理器相互作用,得到更新的鏈路狀態(tài)。同時參考狀態(tài)管理層中的其他組件,計算新的最低開銷路徑
⑤鏈路狀態(tài)路由選擇應(yīng)用與流表管理器交互,流表管理器決定更新后的流表內(nèi)容
⑥流表管理器使用OpenFlow協(xié)議受影響交換機s1、s2和s4的流表項,其中s1此時將通過s4向s2發(fā)送報文,s4此時也必須轉(zhuǎn)發(fā)來自s1且目的地為s2的分組
?
?通過上面這個例子可以得出,使用SDN的服務(wù)器能夠更容易的將最低開銷路徑的路由選擇轉(zhuǎn)變?yōu)楦悠蚨ㄖ频穆酚蛇x擇。由于控制器可以隨意改變流表,所以可以實現(xiàn)任何形式的轉(zhuǎn)發(fā),并且只通過改變它的應(yīng)用控制程序
這與傳統(tǒng)的情況不同,傳統(tǒng)情況必須改變所有路由器中的軟件,而路由器是由不同的廠商提供給ISP的
5.5.4 SDN的過去和未來
在SDN早期,采用單一的SDN協(xié)議和單一的SDN控制器。此后SDN控制器的數(shù)量得到了很大的增長,其中有些SDN控制器是公司特有和專用的
OpenDaylight控制器
?
ODL控制器組件的主要部分與前文中的結(jié)構(gòu)完全對應(yīng)。網(wǎng)絡(luò)服務(wù)應(yīng)用程序用于決定數(shù)據(jù)平面轉(zhuǎn)發(fā)和其他服務(wù)如何在交換機中完成。
與之前規(guī)范的控制器不同,ODL控制器具有兩個接口,通過這兩個接口,應(yīng)用程序可以與原生的控制器服務(wù)通信以及彼此之間進互相通信、
外部應(yīng)用程序使用REST請求-響應(yīng)API與控制器模塊通信,通信運行在HTTP上
內(nèi)部應(yīng)用程序經(jīng)過服務(wù)抽象層(SAL)互相通信
ODL的基本網(wǎng)絡(luò)服務(wù)功能是該控制器的核心,決定網(wǎng)絡(luò)范圍狀態(tài)管理能力。SAL是控制器的神經(jīng)中樞,允許控制器組件和應(yīng)用程序互相調(diào)用服務(wù)并且記錄它們產(chǎn)生的事件。它也在通信層次對特定的底層通信協(xié)議提供了統(tǒng)一的抽象接口,包括OpenFlow和SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)OVSDB是用于管理數(shù)據(jù)中心交換的協(xié)議,而數(shù)據(jù)中心交換是SDN基數(shù)的一個重要應(yīng)用領(lǐng)域
ONOS控制器
?ONOS控制器中有三個層次:
1)北向抽象和協(xié)議。ONOS的一個獨有特征框架是允許應(yīng)用程序請求高層服務(wù),而不必知道該服務(wù)的執(zhí)行細節(jié)。以同步或異步的方式通過北向API向網(wǎng)絡(luò)控制的應(yīng)用程序提供狀態(tài)信息
2)分布式核。ONOS的分布式核中維護了網(wǎng)絡(luò)的鏈路、主機和設(shè)備的狀態(tài)。ONOS被部署為在一系列互聯(lián)的服務(wù)器上的一種服務(wù),每臺服務(wù)器都運行著ONOS軟件的相同副本,增加服務(wù)器的數(shù)量就會增加服務(wù)能力。ONOS核提供了在實例之間服務(wù)復(fù)制和協(xié)同的機制,這種機制為上層應(yīng)用程序和下層網(wǎng)絡(luò)設(shè)備提供了邏輯上幾種的核服務(wù)抽象
3)南向抽象和協(xié)議。南向抽象屏蔽了底層主機、鏈路、交換機和協(xié)議的異構(gòu)性,允許分布式核對設(shè)備核協(xié)議不知情
5.6 ICMP:因特網(wǎng)控制報文協(xié)議
因特網(wǎng)控制報文協(xié)議ICMP(Internet Control Message Protocol)是一個差錯報告機制,是TCP/IP協(xié)議簇中的一個重要子協(xié)議,通常被IP層或更高層協(xié)議(TCP或UDP)使用,主要用于在主機和路由器之間傳遞控制消息,報告主機是否可達、路由是否可用等。
ICMP通常被認為是IP的一部分,但從體系結(jié)構(gòu)上件它位于IP之上,因為ICMP報文時承載在IP分組之中的
為什么需要ICMP?
在數(shù)據(jù)傳輸?shù)倪^程中,IP提供盡力而為的服務(wù),指為了把數(shù)據(jù)包發(fā)送到目的地址盡最大努力。它并不對目的主機是否收到數(shù)據(jù)包進行驗證,無法進行流量控制和差錯控制。因此在數(shù)據(jù)包傳輸過程中,產(chǎn)生各種錯誤在所難免
為了更有效地轉(zhuǎn)發(fā)IP數(shù)據(jù)包和提高數(shù)據(jù)包交付成功的機會,ICMP應(yīng)運而生。使用ICMP,當網(wǎng)絡(luò)中數(shù)據(jù)包傳輸出現(xiàn)問題時,主機或設(shè)備就會向上層協(xié)議報告差錯情況和提供有關(guān)異常情況的報告,使得上層協(xié)議能夠通過自己的差錯控制程序來判斷通信是否正確,以進行流量控制和差錯控制,從而保證服務(wù)質(zhì)量
ICMP報文有一個類型字段和一個編碼字段,并且包含引起該ICMP報文首次生成的IP數(shù)據(jù)報的首部和的前8個字節(jié)。如下圖所示,可以看出ICMP實際上并不僅是用于差錯報告
ICMP報文中的源抑制報文,起初目的是執(zhí)行擁塞控制,即使得擁塞的路由器向一臺主機發(fā)送一個ICMP報文,強制該主機減少發(fā)送速率。但由于TCP在運輸層具有自己的擁塞控制機制,所以不需要利用網(wǎng)絡(luò)層中的反饋信息,也就不需要使用ICMP的源抑制報文
5.6.1 ICMP工作方式
當數(shù)據(jù)包處理過程出現(xiàn)差錯時,ICMP向數(shù)據(jù)包的源端設(shè)備報告這個差錯,它既不會糾正這個差錯,也不會通知中間的網(wǎng)絡(luò)設(shè)備。因為ICMP報文被封裝在IP數(shù)據(jù)包內(nèi)部,作為IP數(shù)據(jù)包的數(shù)據(jù)部分通過互聯(lián)網(wǎng)傳遞。IP數(shù)據(jù)包中的字段包含源端和最終的目的端,并沒有記錄報文在網(wǎng)絡(luò)傳遞中的全部路徑(除非IP數(shù)據(jù)包中設(shè)置了路由記錄選項)。因此當設(shè)備檢測到差錯時,它無法通知中間的網(wǎng)絡(luò)設(shè)備,只能向源端發(fā)送差錯報告
源端在收到差錯報告后,它雖然不能判斷差錯是由中間哪個網(wǎng)絡(luò)設(shè)備所引起的,但是卻可以根據(jù)ICMP報文確定發(fā)生錯誤的類型,并確定如何才能更好地重發(fā)傳遞失敗的數(shù)據(jù)包
ICMP常被用于ping程序和Traceroute程序。在網(wǎng)絡(luò)管理和監(jiān)測中,網(wǎng)絡(luò)質(zhì)量分析NQA計數(shù)更加充分應(yīng)用了ICMP
·ping程序。最常見的用于檢測IPv4和IPv6網(wǎng)絡(luò)設(shè)備是否可達的調(diào)試手段,使用ICMP的echo(回顯)信息來確定遠程設(shè)備是否可達、與遠程主機通信的來回延遲、報文的丟失情況
·Traceroute程序。主要用于查看數(shù)據(jù)報從源端到目的端的路徑信息。從而檢查網(wǎng)絡(luò)連接是否可用。當網(wǎng)絡(luò)出現(xiàn)故障時,可以用該命令定位故障點
5.7 網(wǎng)絡(luò)管理和SNMP
網(wǎng)絡(luò)是由許多硬件和軟件部件組成的,即包括構(gòu)成網(wǎng)絡(luò)的物理部件的鏈路、交換機、路由器、主機和其他設(shè)備,也包括控制和協(xié)調(diào)這些設(shè)備的許多協(xié)議
什么是網(wǎng)絡(luò)管理?
網(wǎng)絡(luò)管理包括了硬件、軟件和人類元素的設(shè)置、綜合和協(xié)調(diào),用以監(jiān)視、測試、輪詢、配置、分析、評價和控制網(wǎng)絡(luò)及網(wǎng)元資源,用合理的成本滿足實時性、運營性能和服務(wù)質(zhì)量的要求
5.7.1 網(wǎng)絡(luò)管理框架
管理服務(wù)器(managing server)是一個應(yīng)用程序,通常有人的參與,并運行在網(wǎng)絡(luò)運營中心(NOC)的集中式網(wǎng)絡(luò)管理工作站上。管理服務(wù)器是執(zhí)行網(wǎng)絡(luò)管理活動的地方,控制網(wǎng)絡(luò)管理信息的收集、處理、分析和顯示。在管理服務(wù)器中進行控制網(wǎng)絡(luò)行為的動作,人類網(wǎng)絡(luò)管理員與網(wǎng)絡(luò)設(shè)備打交道
被管設(shè)備(managed device)是網(wǎng)絡(luò)裝備的一部分,位于被管理的網(wǎng)絡(luò)中。被管設(shè)備可以是一臺主機、路由器、交換機、中間盒、調(diào)制解調(diào)器或其他聯(lián)網(wǎng)設(shè)備。在一個被管設(shè)備中有幾個被管對象,這些被管對象是被管設(shè)備中硬件的實際部分(比如,網(wǎng)卡只是主機中的一個組件)和用于這些硬件及軟件組件的配置參數(shù)
管理信息庫(Management Information Base,MIB)用于收集一個被管設(shè)備中的每個被管對象的關(guān)聯(lián)信息。定義被管理對象的一系列屬性,包括:對象的名字、訪問權(quán)限、數(shù)據(jù)類型。MIB指明了網(wǎng)絡(luò)元素所維護的變量,即能夠被NMS查詢和設(shè)置的信息,給出了一個網(wǎng)絡(luò)中所有可能的被管理對象的集合的數(shù)據(jù)結(jié)構(gòu)
網(wǎng)絡(luò)管理代理(network management agent)是運行在被管設(shè)備中的一個進程,用于與管理服務(wù)器通信,在管理服務(wù)器的命令和控制下在被管設(shè)備中采取本地操作
網(wǎng)絡(luò)管理協(xié)議(network management protocol)運行在管理服務(wù)器和被管設(shè)備之間,允許管理服務(wù)器查詢被管設(shè)備的狀態(tài),并通過代理間接的在設(shè)備上執(zhí)行操作。代理能夠通過網(wǎng)絡(luò)管理協(xié)議向管理服務(wù)器通知異常事件。網(wǎng)絡(luò)管理協(xié)議并不能管理網(wǎng)絡(luò),但它為網(wǎng)絡(luò)管理員提供了管理網(wǎng)絡(luò)的能力
5.7.2 簡單網(wǎng)絡(luò)管理協(xié)議
網(wǎng)絡(luò)管理協(xié)議(Simple Network Management Protocol)版本2(SNMPv2)是一個應(yīng)用層協(xié)議,用于在管理服務(wù)器和代表管理服務(wù)器執(zhí)行的代理之間傳遞網(wǎng)絡(luò)管理協(xié)議和信息報文
SNMP協(xié)議分為三個版本:SNMPv1、SNMPv2c和SNMPv3。
- SNMPv1是SNMP協(xié)議的最初版本,提供最小限度的網(wǎng)絡(luò)管理功能。SNMPv1基于團體名認證,安全性較差,且返回報文的錯誤碼也較少。
- SNMPv2c也采用團體名認證。在SNMPv1版本的基礎(chǔ)上引入了GetBulk和Inform操作,支持更多的標準錯誤碼信息,支持更多的數(shù)據(jù)類型(Counter64、Counter32)。
- SNMPv3主要在安全性方面進行了增強,提供了基于USM(User Security Module)的認證加密和基于VACM(View-based Access Control Model)的訪問控制。SNMPv3版本支持的操作和SNMPv2c版本支持的操作一樣
SNMP最常使用的是請求響應(yīng)模式,其中SNMP管理服務(wù)器向SNMP代理發(fā)送一個請求,代理接收請求后執(zhí)行操作,并對該請求發(fā)送一個響應(yīng)。請求通常用于查詢或修改與某被管設(shè)備關(guān)聯(lián)的MIB對象值
SNMP第二被使用的是代理向管理服務(wù)器發(fā)送的一種非請求報文,該報文稱為陷阱報文(trap message)。陷阱報文用于通知管理服務(wù)器,一個異常情況已經(jīng)導(dǎo)致了MIB對象值得改變
?上圖所示SNMPv2定義得7種類型的報文,這些報文一般稱為協(xié)議數(shù)據(jù)單元(PDU)
?GetReques、GetNextReques、GetBulkRequest PDU 都是管理服務(wù)器向代理發(fā)送的, 以請求位于該代理所在的被管設(shè)備中的一個或多個 MIB 對象值。其值被請求的 MIB 對象的對象標識符定義在該 PDU 的變量綁定部分。GetRequest、GetNextRequest和GetBulkRequest的差異在于它們的數(shù)據(jù)請求粒度。GetRequest 能夠請求MIB值的任意集合;多個GetNextRequest 能用于順序地讀取 MID對象的列表或表格;GetBulkRequest 允許讀取大塊數(shù)據(jù),能夠避免因發(fā)送多個 GetRequest或 GetNextRequest 報文可能導(dǎo)致的額外開銷。在所有的三種情況下,代理用包括該對象標識符和它們相關(guān)值的 Response PDU 行響應(yīng)
? 管理服務(wù)器使用 SetRequest PDU 來設(shè)置位于被管設(shè)備中的一個或多個MIB對象的值。代理用帶有“noError”差錯狀態(tài)的 Response PDU 進行應(yīng)答,以證實該值的確已被設(shè)置
? 管理服務(wù)器使用 lnformRequest PDU 來通知另 一個 MIB 信息管理服務(wù)器,后者對于接收服務(wù)器是遠程的文章來源:http://www.zghlxwxcb.cn/news/detail-654314.html
? Response PDU 通常從被管設(shè)備發(fā)送給管理服務(wù)器,以響應(yīng)來自該服務(wù)器的請求報文,返回所請求的信文章來源地址http://www.zghlxwxcb.cn/news/detail-654314.html
到了這里,關(guān)于《計算機網(wǎng)絡(luò):自頂向下方法》第五章--網(wǎng)絡(luò)層:控制平面的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!