天天看點

《Internet 路由結構(第2版•修訂版)》一第7章 備援、對稱和負載均衡7.1 備援

本節書摘來自異步社群《internet 路由結構(第2版•修訂版)》一書中的第7章,第7.1節,作者【美】sam halabi,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

internet 路由結構(第2版•修訂版)

本章包括如下主題。

備援——鍊路故障發生時,通過備用路由來保障網絡的穩定是路由架構中最為重要的設計目标之一。

設定預設路由——配置預設路由是建立備援連接配接的基本方法。存在多條預設路由時,就需要通過優先級來“排定座次”。

對稱——設定路由,確定流量及其回報流量從同一點進出as,這往往也是路由架構的設計目标之一。

負載均衡——讓多條鍊路同時分擔流量,以擷取最優的網絡性能。

具體的場景——針對備援、對稱及負載均衡,深入剖析了幾個具有代表性的網絡設計。還提供了在幾個不同場景中,實作上述設計目标的屬性配置示例。

要實施高吞吐量的internet連接配接,備援、對稱和負載均衡是每個網絡工程師必須面對的關鍵問題。internet服務提供商(isp)和其客戶都需要對流量進出各自as的過程充分加以控制。

要實作備援,通常的做法是以多條電路接入一個或多個as,進而得到多條傳遞流量的備用路徑。對稱是指從某個出口點流出as的流量,(其回報流量)還能從同點傳回1。負載均衡是指在多條鍊路上合理分擔流量的能力。要想将三者合而為一,以實作最為理想的路由選擇解決方案,難度之大可想而知。

不可能事事都政由己出。在internet上,對于穿越任何as流量的操縱和控制掌握在多家提供商手中。沿途的任何提供商都能引導流量。多個實體間的協作才是均衡流量之道。

如何将備援、對稱和負載均衡發揮到極緻,這對每個網絡來說都是永恒的設計問題。然而,具體的解決方案則取決于每一特定網絡的配置和需求。本章會在具體的網絡配置背景下探讨此類共性設計問題。雖然讀者不能照搬配置示例,但配置示例中所展現的共性問題和實施方法,仍然可以作為讀者分析和設計路由選擇需求時的參考模型。

在深入研究具體的網絡場景之前,讀者首先需要建立起某些關于備援的基本概念,并熟悉相關定義。

1作者的表達太過随意,讓我們來打個比方,比如說as内某使用者ping某個internet站點,icmp的echo request資料包從as的a點流出,其回報流量,即該internet站點的echo reply資料包也應從a點傳回,這樣才算流量對稱。是以,譯者在括号内添加了“回報流量”。——譯者注

盡管無論哪家公司或提供商都不願意自己的網絡中斷,不過網絡連通性問題總是會因這樣或那樣的原因紛至沓來。連通性問題取決于諸多因素。一條接入internet的鍊路會涉及路由器、csu/dsu、電源、電纜連接配接、實體接入線路以及衆多運維人員——每個因素對鍊路的影響都各不相同。任何時候,人為失誤、軟硬體故障或自然災害(比如惡劣的天氣或電力中斷)都有可能會導緻網絡中斷。

正因如此,對網絡來說,備援是不可或缺的。然而,最為關鍵的是必須在備援和對稱之間找到平衡。在網絡設計方面,備援和對稱似乎是天生的冤家:網絡的備援程度越高,流量的進出點就越不可預測。若某客戶有多條連接配接——一條接入san francisco pop(呈現點),另一條接入new york pop——從san francisco“出發”的流量,(其回報流量)很可能會從new york“回家”1。要是再新增一條到dallas pop的鍊路,肯定會讓網絡連通性更為可靠,但也同樣給流量對稱制造了更多的麻煩。是以,網絡管理者在實施路由政策時必須權衡取舍。

除了可靠性因素之外,地理方面的壓力也迫使公司必須實作網絡備援。許多現代化的公司都是那種國際性、全國性或跨國性的大公司。這些公司的自治系統是跨越多個不同實體位置的邏輯實體。對于一個擁有跨越多個地點as的公司來說,既可以從單提供商購買服務,也可以從位于不同區域的不同提供商購買服務。如圖7-1所示,as1位于san francisco的辦事處連接配接到isp1的san francisco pop,new york辦事處連接配接到isp2的new york pop。在這種情況下,通路internet的流量可以就近選擇pop,采用較短路徑抵達目的地。

對于一個網絡來說,備援指的是除了主用鍊路以外,還有一條“後路”也能傳遞進進出出的流量,這會轉化成需要儲存在路由表中的額外路由資訊。為了避免額外的路由開銷,預設路由正是給自己網絡留“後路”的實用工具。主鍊路故障時,預設路由可以為我們的網絡開啟後路(備用路由)。下一節會定義預設路由的方方面面,并展示如何在最簡單的路由場景中應用預設路由。

《Internet 路由結構(第2版•修訂版)》一第7章 備援、對稱和負載均衡7.1 備援

按預設路由轉發流量是一項非常強大的技術,既能将路由器必須學習的路由條數降至最低,又能在發生故障或連通性中斷時為網絡提供備援。cisco把預設路徑稱為最後求助網關(gateway of last resort)。了解預設路由如何運作非常重要。預設路由配置得當,可以省心省力;可一旦配置有誤,則會讓網絡工程師深陷泥潭。

根據定義,預設路由是ip轉發表中的一條路由,一旦資料包目的網絡無法與路由條目比對,路由器就啟用之2。換言之,路由器在依仗ip轉發表中的精确路由條目無法轉發資料包時,預設路由就成了最後一根救命稻草。

動态學得的預設路由

衆所周知,預設路由往往以網絡/掩碼組合0.0.0.0/0.0.0.0來表示(也可以0/0來表示)。預設路由可以在路由器之間以動态通告的方式來交換。任何系統隻要通告這種路由,就是向其他系統表明:“我是你們的最後求助網關”。圖7-2所示為預設路由的動态通告。

動态預設路由(0/0)既能通過bgp也能通過igp學得,這取決于網域間所運作的路由協定。出于備援并盡量避免潛在故障的目的,應該從多個源接收預設路由。在bgp中,可為預設路由賦予本地優先值,以令主備用預設路由分别具有不同的優先級。若主用預設路由失效,備用預設路由會取而代之。

《Internet 路由結構(第2版•修訂版)》一第7章 備援、對稱和負載均衡7.1 備援

圖7-2左例所示為單台路由器通過兩條鍊路将as1和as2互連。若as1隻願意從as2接收最少量的路由,那麼as1可以隻接受預設路由0/0。在本例中,as1從兩條鍊路學得0/0,并為從主用鍊路學到的0/0路由設定了本地優先值100,為備用鍊路學得的0/0路由設定了本地優先值50。正常情況下,這台路由器的最後求助網關一定會被設定為1.1.1.1。

在多路由器的場景中(如圖7-2右例所示),隻要as1内運作了ibgp,上述行為也同樣适用——利用在ibgp路由器間交換的本地優先值,來确定主備用鍊路。

提示:

請參見第12章的“動态學得的預設路由”一節。

靜态設定的預設路由

為了避免不可預料的流量轉發行為,許多網絡管理者都會選擇對動态學得的預設路由進行過濾。是以,對as來說,可以靜态設定屬于自己的預設路由0/0。通過靜态的方式設定預設路由可以更好地控制路由選擇的行為,原因是管理者可以親手定義自己的最後求助網關,而不是任由外部實體強行設定。

請參見第12章的“靜态設定的預設路由”一節。

管理者可以設定靜态預設路由令其指向:

下一跳網關的ip位址;

一個特定的路由器接口;

一個網絡号。

圖7-3所示為前兩種情況。左圖所示為路由器将自己的預設路由0/0指向ip位址1.1.1.1,右圖所示為路由器将自己的預設路由0/0指向以太網接口。對于後一種情況,路由器還需額外的操作,以推斷出應将流量轉發給以太網段上的具體裝置(下一跳路由器)。這樣的操作往往是:路由器以發送arp(位址解析協定)資料包的方式,來确定下一跳路由器的實體位址。

《Internet 路由結構(第2版•修訂版)》一第7章 備援、對稱和負載均衡7.1 備援

一個系統還可以根據從另一個系統學到的網絡号來設定自己的預設路由。圖7-4所示為as1從as2動态學到路由192.213.0.0/16。若as1将自己的預設路由指向192.213.0.0/16,那麼網絡192.213.0.0/16便會自動成為as1的最後求助網關。該方法利用遞歸路由查找去發現下一跳網關的ip位址。在本例中,經過遞歸路由查找,as1确定網絡(路由)192.213.0.0/16學自下一跳1.1.1.1,流量也會被相應地轉發到下一跳網關1.1.1.1。

《Internet 路由結構(第2版•修訂版)》一第7章 備援、對稱和負載均衡7.1 備援

如果預設路由所指向的網絡消失,預設路由也會自動消失,這一點十分重要。對于cisco的實作來說,靜态定義的預設路由存在的依據是,其所指向的路由條目必須存在。例如,若預設路由指向了某個網絡号,但該網絡已不可通路(與該網絡相關的路由在路由表中消失),那麼這條預設路由也會從ip路由表中消失。這一行為在配置了多條預設路由的情況下必不可少——可讓一條預設路由作為主用,另一條作為備用,主用路由一旦失效,備用路由取而代之。

選擇“預設路由所指向的網絡”時,應盡量選擇靠近internet的上遊網絡(離本as越遠越好),因為這樣的網絡能夠反映出:本as到nap或其他提供商之間互連的整條鍊路(而非局部)的狀況。若為本方提供服務的as隻有單條鍊路通往nap,這一點就非常重要。如圖7-4所示,as1在設定預設路由時,可以選擇将其指向字首128.213.11.0/24或超網192.213.0.0/16。将預設路由指向128.213.11.0/24,隻能令預設路由本身依賴于部分環節(從as1到as2),而非直到nap的所有環節(從as1直到as3)的穩定性。若as2和as3之間的鍊路故障,as1仍然會向as2發送流量,而不會遵循備用預設路由将流量發送給其他提供商(假定as1還連接配接到了其他提供商)。更為合理的選擇是,将預設路由指向超網192.213.0.0/16,原因是這一超網的存在能夠更全面反映出從本as到nap的整條鍊路,而不再對任何中間環節有所依賴。

選擇“預設路由所指向的網絡” 3時,應盡量避免選擇精确的子網。子網的翻動可能會造成本方路由表中的預設路由“時有時無”。最好将預設路由指向能夠全面反映出提供商整體穩定性(而非特定鍊路穩定性)的主要聚合網絡或超網。

可以同時配置多條靜态預設路由。其中一個方法就是,設定多條靜态預設路由,令它們分别指向多個不同的網絡(出于穩定性的考慮,應盡量指向聚合網絡),并利用bgp本地優先屬性為學到的聚合網絡設定不同的優先級。這種做法适用于單台路由器通過多條鍊路連接配接提供商,或as内多台邊界路由器運作ibgp的場景。圖7-5所示為這兩種場景。以上兩種場景也與圖7-4所示的場景類似,唯一的差别就在于,客戶(as1)是手動設定自己的預設路由,而不依賴于提供商通告預設路由0/0。在本例中,客戶(as1)會為從上下兩條鍊路學到的路由128.213.0.0/16分别設定本地優先值100和50。這樣的話,上下兩條鍊路分别為主備用鍊路,若主用鍊路故障,下面那條鍊路會取而代之。

《Internet 路由結構(第2版•修訂版)》一第7章 備援、對稱和負載均衡7.1 備援

設定靜态預設路由的另一種方法需要使用cisco距離參數(如第6章中的表6-1所述)來建立優先級。由于路由器之間不會交換距離參數,是以這種方法隻适用于單台路由器通過多鍊路連接配接提供商的場景。

若為兩條靜态預設路由分别賦予不同的距離值,路由器會優選距離值較低的那條路由。若距離值較低的那條路由失效,路由器會選擇使用另外一條預設路由。若為兩條靜态預設路由配置了相同的距離值,根據由網絡裝置的底層交換模型所提供的機制,流量會在兩條預設路徑上負載均衡。

圖7-6所示為設定多條靜态路由時,距離參數的運用。as1通過2條鍊路接入as2,并自行手動設定指向as2的預設靜态路由。as1通過将兩條靜态預設路由的距離值分别設定為50和60,進而分别標明了主備用鍊路。如果主用鍊路發生故障,流量會切換到備用鍊路。

《Internet 路由結構(第2版•修訂版)》一第7章 備援、對稱和負載均衡7.1 備援

讀者需要了解:如果一條路由與路由器接口相關聯,在接口故障之後,這條路由也一定會失效。例如,預設情況下,用來封裝接口的cisco hdlc協定會在鍊路上交換keepalive消息。在指定時間間隔内,如果沒有收到keepalive消息,接口的線協定會down。路由器也會删除相應的路由條目。話又說回來,對于像幀中繼或atm這樣的虛電路,路由器之間并不交換keepalive消息。這也就是說,如果虛電路故障,接口仍會處于激活狀态,相關的路由條目也就不會失效。

1作者的表達極為不嚴謹,“回報流量”是必須要加的,否則就形成了環路。——譯者注

2原文是“by definition, a default route is a route in the ip forwarding table that is used if a routing entry for a destination does not exist.”譯者認為,作者的文字表達能力太差,如果不懂何為預設路由的讀者,讀完這段文字後估計還是一頭霧水,故譯文酌改。另外,ip轉發表和ip路由表是不是一回事,還很難說。因為,ip路由表屬于控制層面,而轉發表則應屬于資料層面。這裡就姑且将ip轉發表看作是ip路由表吧。——譯者注

3原文是“default network”,作者的文字表達能力實在令人“贊歎”。——譯者注