路由器交換方式和負載均衡

Cisco路由器轉發數據包時常用的五種交換方式

進程交換(Process Switching)

這是一種最基本的交換模式,在這種模式下,一條數據流(Flow)中的第一個包(Packet)將被置入系統緩存(System Buffer)。其目的地址將會拿到路由表中去查詢比對,路由器的處理器(CPU or Processer)同時將進行CRC校驗,檢查包是否正確。然後數據包的二層MAC地址將會被重寫,替換爲下一跳接口的MAC地址。對這條數據流(Flow)中的第2個、第3個數據包……將會繼續這樣相同的操作,包括查詢路由表、重寫MAC地址,CRC校驗等。這種方式無疑是延遲最大的,因爲它要利用System Buffer以及Processor去處理每個收到的包。但是我們仍然有機會使用這種交換方式,比如在進行基於數據包的負載均衡,或是debug ip packet時。因爲默認情況下,思科路由器會啓用Fast Switching或Optimum Switching或是CEF Switching,而不是Process Switching,所以我們只能通過:no ip route-cache來禁用Fast Switching,這在另一種意義上正是開啓Process Switching

命令:R1(config-if)#no ip route-cache        //啓用進程交換(禁用快速交換)

注意:命令debug ip packet僅允許觀察進程交換的數據包,將啓用進程交換,所有數據包都被送至進程記錄,CEF交換、快速交換等的數據包將不被顯示出來。

快速交換(Fash Switching)/路由緩存交換(Route-Cache Switching)

快速交換要優於Process Switching,它採用了路由緩存(Route Cache)來存儲關於某條數據流(Flow)的特定信息,當然會包括諸如目的MAC地址,目的接口等內容。這時我們只需要對一條數據流(Flow)中的第一個包做Process Switching,並把信息存入Cache,所有後續數據包,可以不必再中斷System Processor去執行查詢等操作,直接從Cache中提取目的接口,目的MAC地址等,這樣大大加速了包轉發速度。Fast Switching在某些資料上可能被稱爲Route-Cache Switching。思科1600170025002600系列路由器的Ethernet、Fast Ethernet、Serial接口默認採用的就是Fast Switching

命令:R1(config-if)#ip route-cache        //啓用快速交換

      R1#show ip cache        //查看快速交換

最優交換(Optimum Switching) 和 分佈式交換(Distributed Switching)

這兩種交換模式,從原理上來講都與Fast Switching極爲相似,比如Optimum Switching其實採用了一種經過優化的交換緩存(Optimumed Switching Cache),它的速度要較平常Cache要快。Distributed Switching需要使用Versatile Interface Card這種硬件卡,又稱VIP Card。它會自已保存一份Route Cache,這樣查詢時就不必等待使用共享的系統緩存(Shared System Buffer)了,無論相對於Fast Switching還是Optimum Switching來講,都是比較快的。這兩種模式一般只在思科高端設備上有所應用,比如7200系列的路由器或12000系列的路由器。

命令:R1(config-if)#ip route-cache optimum         //啓用最優交換

     R1(config-if)#ip route-cache distributed        //啓用分佈式交換

     R1#show ip cache optimum       //查看最優交換

Netflow交換(Netflow Switching)

這種模式是最值得參考的,它完全基於其它Switching Mode,重點在於對流經的數據包進行計費、監控、網管。但值得提的是,這種模式也要存儲相關信息,據統計大致65536條數據流(Flow)會耗費4MB的System Buffer

命令:R1(config-if)#ip route-cache flow        //啓用Netflow交換

     R1#show ip cache flow        //查看Netflow交換緩存

     R1(config)#ip flow-export        //Netflow審計的數據包轉發到指定設備

Cisco特快交換(Cisco Express Forwarding)

Cisco CEF是最爲高效的一種三層協議,很多人容易對CEF產生誤解,所以我們仍然要說明它的來原。CEF採用了基於硬件的平臺,它不僅僅是將數據都存入System Buffer,而是將整個路由表、拓撲表,以及所有的下一跳地址、MAC地址全部進行預存”,只要路由表、拓撲表中存在的條目,無論是否有數據請求發往其目的地址,都會提前預讀取,預設置緩存。具體來說它是通過全用轉發信息表(FIB)和鄰接表來實現的,它事先從路由表中獲取信息並把信息存儲在轉發信息庫(FIB)中,當任何數據包需要這些信息時可以立即使用。FIB包括路由表中的所有目標網絡,它們可以隨着網絡拓撲的變化而調整。CEF使用一個單獨的數據表--鄰接關係表,爲FIB的每個表項維護第二層轉發信息。鄰接關係表由第二層信息構成,(這些信息可以由IP、ARP或IPv6鄰居發現協議學習到)。FIB和鄰接表是在數據包轉發之前建立的,當有新的數據請求發送時,就不需要CPU去查詢路由錶轉發一次後把信息存入緩存,或查詢目的接口,目的MAC地址等信息,而是直接從緩存中讀取,從而使轉發速度得以大大提高。

IPv4、IPv6關於負載均衡和CEF的說明:

1.對於IPv4,CEF支持基於目標網絡的負載均衡和基於數據包的負載均衡;
  對於IPv6,CEF僅支持基於目標網絡的負載均衡。

2.IPv4缺省的交換模式是CEF

  Ipv6缺省的交換模式是Process Switching。
2.針對IPv4可以使用ip cef激活CEF;

  而對IPv6,必須先啓用ip cef ,再使用ipv6 cef激活CEF。
3.可以通過show ip cef / show ipv6 cef 查看路由器是否啓用CEF。

命令:R1(config)#ip cef        //用來爲所有接口激活CEF(全局配置命令)

     R1(config-if)#no ip route-cache cef        //可以選擇性地在某些接口上屏蔽CEF(接口子命令)

     R1#show ip cef        //查看路由器是否啓用CEF,CEF全部信息

     R1#show ip cef detail        //查看CEF全部詳細信息

     R1#show ip cef int se0/0        //查看CEF特定接口信息

     R1#show ip cef int se0/0 detail        //查看CEF特定接口詳細信息

     R1#show cef int        //查看使用了哪一種負載均衡模式,CEF全部功能信息

     R1#show cef int s0/0        //查看使用了哪一種負載均衡模式,CEF特定接口功能信息

注意:(no) ip cef是一個全局命令,當在接口下使用(no) ip cef時,自動跳轉爲全局命令。當使用no ip cef時,則關閉了所有接口的CEF,ip route-cache cef不起作用。

路由器交換方式和負載均衡

 

負載均衡

負載均衡的兩種分類

等價負載均衡(Equal-Cost Load Sharing):是將流量均等地分佈到多條度量相同的路徑上;

非等價負載均衡(Unequal-Cost Load Sharing):是將報文分佈到不同度量的多條路徑上。各條路徑上分佈

     的流量和路由開銷成反比。開銷越低的路徑分配的流量越多。

說明:只有EIGRP支持非等價負載均衡,最多支持對6條路徑的非等價負載均衡;可以通過差異變量(Variance)來確定哪些路由在非等價負載均衡中是可以使用的;並且可以通過設置最大路徑數決定使用某幾條鏈路。

負載均衡的兩種方式:

基於目標網絡的負載均衡 ip load-sharing per-destination;

基於數據包的負載均衡 ip load-sharing per-packet。

基於目標網絡的負載均衡 ip load-sharing per-destination

基於目標網絡的負載均衡允許路由器使用多條路徑來負載均衡,它是根據目標網絡中的目的地址分配負載量的。並且它可以確保數據包總是使用相同的路徑,並按照它們發送的順序到達目的地址。這種方式的負載均衡最適用於需要數據包按照某種順序到達的應用。例如,有兩個網絡A、B,A-B間存在兩條路徑,那麼從A去往B地的第一個目標的報文走第一條路徑,去往B的第二個目標的報文走第二條路徑,去B的第三個目標的報文走第一條路徑,依此類推……隨着目標網絡地址數量的增加,負載均衡會變得更加有效。大多情況下路由器都採用這種負載均衡方式,並且它也是Cisco CEF使用的缺省負載均衡方式。

基於目標網絡的負載均衡和Cisco CEF準確來講,CEF是按照源、目的地址對(Hash出一個值)進行負載均衡。相同源、目的地址對的流量都會從同一個接口出站,而不同源、目的地址對的流量可能會從下一個接口出站。

命令:R1(config-if)#ip load-sharing per-destination        //基於目標網絡的負載均衡

基於數據包的負載均衡 ip load-sharing per-packet

使用基於數據包的負載均衡的路由器可以在多條鏈路上連續發送數據包,而不用考慮主機或用戶的具體情況。這種負載均衡採用輪轉機制來確定每個數據包走哪條路徑到達目的地址。缺點是不能確保每一個數據包遵循相同的路徑,將導致數據包無序到達。這對某些應用來說是不能接受的(如VoIP)。假設去往某一目標網絡的報文走的第一條鏈路,當路由器又收到去往該網絡的報文後,將從第二條鏈路上發送,依此類推……(假設各條鏈路是等價的),如果鏈路代價不同的話,路由器將會按照代價比例來分配各鏈路的流量分配。例如,在一條高代價鏈路上發送一個報文,可能低代價的鏈路上就會發送三個報文。當路由器採用非默認交換方式時,即處於進程交換模式時,將採用這種負載均衡。通過使用此方式在不均衡的數據流量需要在多條路徑上進行負載均衡是非常重要的。

命令:R1(config-if)#ip load-sharing per-packet        //基於數據包的負載均衡

 
負載均衡和Cisco CEF

1.CEF缺省的負載均衡方式是基於目的網絡的負載均衡,IPv4缺省的交換模式是CEF,Ipv6缺省的交換模式是

  Process Switching。

2.CEF事先從路由表中獲取信息並把信息存儲在轉發信息表中(FIB),當數據包需要這些信息時可以立即使用。

  FIB包括路由表中的所有目標網絡,如果路由表穩定且不發生改變,那麼FIB也不會變化。

3.CEF使用一個單獨的數據表--鄰接關係表,爲FIB的每個表象維護第二層轉發信息。鄰接關係表由第二層信息構

  成,例如,這些信息可以通過ARP或IPv6鄰居發現協議學習到。

4.FIB和鄰接關係表是在數據包轉發之前建立的。

5.CEF在缺省的情況下是基於目標進行負載均衡,這實際上是按照源目地址對進行負載均衡。所有發往特定目標

  地址的流量只要源地址相同都會從相同的接口出站,而不同源地址對的流量可能從下一個接口出站。

6.基於數據包的負載均衡是交換IPv4數據包的另一種方式。

7.對於IPv6,CEF僅支持基於目標網絡的負載均衡方式。

8.基於數據包的負載均衡方式意味着在不同的鏈路上發送數據包,即使在路徑等代價、目標相同的情況下也是

  樣。如果路徑代價不同,那麼可能會在高、低代價路徑上按照代價比例進行分流。

9.基於數據包的負載均衡方式可以更加均勻地分佈流量。但是數據包選擇不同的路徑去往目標網絡會引起非順序

  到達。對於某些應用來說,這是不能接受的,例如VoIP.

10.爲了確定CEF功能是否在路由器上被全局開啓,可以使用命令show ip cef和show ipv6 cef。如果缺省情況下

   CEF沒有被打開,針對IPv4可以使用命令ip cef ,而對IPv6來說,必須先打開IPv4的CEF,然後使用命令

   ipv6 cef打開此功能。

11.在IPv4下,命令ip load-sharing per-packet可以打開基於數據包的負載均衡功能,如果需要打開基於目標

   地址的負載均衡,可以使用ip load-sharing per-destination命令。你可以使用命令show cef interface來

   檢查使用了哪一種負載均衡模式,該命令可以給出在這個接口上配置的CEF信息。

12.路由器通常根據入站接口和源與目的地址類型確定是否使用CEF交換。對於考慮使用CEF的路由器來說,出站

   接口交換模式必須配置爲CEF,如果接口上配置了CEF,那麼CEF將嘗試交換數據包。否則,CEF會把數據包交

   付給僅次於最好的可用交換方法去處理。對於IPv4,這種方法是快速交換,而在IPVv6中叫進程交換

   (Process Switching)。

13.你可以使用命令show cef interface {interface}和show ipv6 cef {interface} detail來驗證在接口上CEF

   功能是否被打開。

 

基於目標網絡的負載均衡和快速交換

1.IOS在配置快速交換的出站接口上執行基於目標網絡的負載均衡,某路由器上IOS的缺省交換模式是快速交換。

2.快速交換的工作方式如下:

  1>當路由器爲第一個去往特定目標的數據包進行交換處理時,路由器將執行路由表查詢並選擇出站接口;

  2>然後獲取有關被選接口的數據鏈路信息(如ARP表),最後封裝數據包併發送;

  3>前面獲取的路由和數據鏈路信息被輸入到快速交換的高速緩衝中;

  4>一旦去往相同目的地的後續數據包進入路由器,高速緩衝中的信息使路由器不必查找路由表和ARP高速衝,

    就可以立即交換數據包。

3.快速交換意味着所有去往指定目的地址的數據包都從相同的接口被髮送出去,因此交換時間和處理器的佔用率

  會大大降低。當去往相同網絡內不同主機的數據包進入路由器且還存在一條可選路由時,路由器會在另一條路

  徑(非可選路由,也就是原來的那條)上發送數據包到目的地。因此路由器能夠做得最好的就是基於目標網絡的

  負載均衡。

 

基於數據包的負載均衡和進程交換

進程交換(Process Switching)即使對於每個數據包,路由器都要進行路由表查詢和接口選擇,然後再查詢數據鏈路信息。因爲每一個爲數據包確定路由的進程都是相互獨立的,所以不會強制去往相同目標網絡的所有數據包使用相同的接口。正如許多設計選擇一樣,基於數據包的均分負載也是要付出代價的。這種方式雖然使流量的分佈比前一種方式更均勻,但是快速交換的較低交換時間和處理器佔用的優點也隨之喪失了。爲了在接口上打開進程交換功能,可以在IPv4下使用命令no ip route-cache。對於IPv6什麼也不需要做,因爲缺省情況下該功能是打開的。

 

哪一種交換方法會被用到?

1.IOS首先基於入站接口的配置和源與目的地址類型來決定交換模式;如果接口上配置了CEF,不管出站接口上配

  置是什麼,數據包都會被CEF交換;

2.如果入站接口上沒有配置CEF,那麼IOS會處理並轉發數據包,並根據出站接口的配置,後續的數據包或者被快

  速交換,或者被進程交換。

3.如果入站接口的CEF功能被打開,IOS將只使用CEF交換數據包。否則出站接口的配置會確定交換方法。注意,

  如果在出站接口上打開CEF功能的同時又在入站接口上配置進程交換或快速交換,那麼快速交換將被使用。

4.只有在入站接口上配置了CEF,它纔會起作用。對於IPv4,儘管出站接口上打開了CEF功能,但是起作用的還是

  快速交換。

5.有些時候後即使打開了CEF,但是並沒有使用CEF交換數據包(例如訪問列表的日誌功能被打開和數據包將被記錄

  下來)。那麼數據包將被送交僅次於最快的交換方法,例如IPv4下使用快速交換,在IPv6下使用進程交換。

路由器交換方式和負載均衡路由器交換方式和負載均衡

網上這方面的知識比較少,本人手頭上的資料有限,忙了兩天,實驗一直做不清楚,累死了~不詳之處請見諒!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章