王小玫,任海蘭
(武漢郵電科學研究院光纖通信技術和網絡國家重點實驗室,湖北 武漢430074)
隨著互聯網上數據量的日益增長,運營商對采用以太網技術的數據接入設備的帶寬和可靠性提出了越來越高的要求。在傳統技術中,最直接的解決辦法就是更換高速率設備來提高網絡帶寬,但這需要耗費大量人力和物力,且設備更換的開銷也讓運營商難以承受,因此該方法并不可取。鏈路聚合技術(Link Aggregation)通過將多個物理端口綁定為一個邏輯端口來增加鏈路帶寬,同時采用備份鏈路的機制,有效地提高設備之間鏈路的可靠性,而且大大節約了成本。在不進行設備更換的條件下很好地解決鏈路帶寬和連接可靠性問題,因此是一種很實用的技術。手工鏈路聚合是鏈路聚合的一種聚合模式,應用比較廣泛,大多數運營級網絡設備均支持該特性,當需要在兩個直連設備間提供一個較大的鏈路帶寬而對端設備又不支持LACP協議時,可以使用手工鏈路聚合。
MSAP(多業務接入平臺)是定位于城域網邊緣接入層,基于成熟的SDH技術,采用先進的GFP,VCAT,LCAS技術,融合以太網交換技術和ATM交換技術,實現TDM業務、以太網業務和ATM業務的綜合傳輸平臺[1]。MSAP支持多種業務,配置靈活,能夠提供PDH、V.35、以太網的光連接和大量E1、語音接口以及多個SDH上聯光接口,具有強大的組網能力。MSAP可以通過點對點透傳、L2匯聚加透傳和以太共享環這3種方式處理以太網業務,其中匯聚加透傳是指MSAP可以在系統內部提供二層交換功能,即在一個或多個用戶以太網接口與一個或多個獨立的網絡鏈路之間,提供基于以太網數據鏈路層的交換,實現虛擬網橋(Virtual Bridge)功能,匯聚后的數據流再通過點對點透傳至MSTP網的終結點[2]。MSAP提升了接入網的組網能力和設備的集成度,實現了傳輸與接入設備的統一管理,降低了建網和運維成本[3]。MSAP尤其適合對帶寬和業務質量有較高要求的高端企業用戶。
鏈路聚合也稱為端口匯聚(Port Trunking),該技術是將多個端口匯聚在一起形成一個匯聚組,實現出/入負荷在匯聚組中各個成員端口的負載均衡。傳統的數據通信物理接口帶寬容量主要是1 000/100/10(Mbit·s-1)[4],通過鏈路聚合將端口捆綁在一起成倍地增加鏈路帶寬,如果鏈路使用中一個端口出現故障,網絡傳輸的數據流可以動態地快速轉向鏈路中其他工作正常的端口進行傳輸,這樣,鏈路聚合技術在點到點鏈路上提供了固有的、自動的冗余性,實現了鏈路備份和系統容錯[5]。
手工聚合的匯聚組由用戶配置,不允許系統自動添加或刪除匯聚組中的端口。聚合組中的端口有Selected(選中)和Unselected(未選中)兩種狀態。成員端口兩種狀態的確定主要依賴于參考端口,參考端口根據端口的雙工模式和速率大小從成員端口中選出,成員端口雙工速率的變化可能會影響參考端口的變化。聚合鏈路的總帶寬等于所有處于選中狀態端口的流量總和,并且聚合鏈路的流量會分擔到各個成員端口上。這種聚合模式穩定性較好,不易受網絡環境的影響。
MSAP的網絡拓撲如圖1所示,一端接PTN傳輸網,另一端接SDH傳輸網。MSAP設備主要的板卡有匯聚卡、業務卡、上聯卡、網管盤及2M16卡,業務卡由于本身硬件條件及應用環境的限制不能實現聚合功能,經創新設計通過匯聚卡實現聚合功能。將業務卡向匯聚卡匯聚,在匯聚卡上配置聚合組,數據流從聚合組中處于選中狀態的成員端口轉發,這里的成員端口主要是匯聚卡的2個千兆口。業務卡的業務通過背板總線的交換口向匯聚卡匯聚,不同槽號業務卡通過網管界面配置向匯聚卡匯聚,使得業務卡的上聯口連接到Marvell6097的百兆口,然后業務通過Marvell6097的千兆口輸出到PTN傳輸網上進行傳輸。業務卡通過交叉連接盤配置交叉業務,然后通過2M16板卡下2M業務,經過E1協轉和光纖收發器接到用戶端。

圖1 MSAP設備網絡連接圖
手工聚合在MSAP上的實現框架如圖2所示,主要包括配置模塊和實現模塊。實現模塊主要包括初始化、創建/刪除聚合組、添加/刪除聚合端口、端口狀態檢測、配置同步、流量負載分擔、靜態選擇以及驅動讀寫。

圖2 鏈路聚合總體框架圖
配置模塊和聚合實現模塊的主要內容如下:
1)配置模塊。配置模塊主要包括SNMP mib以及網管界面,該模塊負責解析和處理用戶輸入的相應命令,是用戶與鏈路聚合模塊的接口。
2)初始化。初始化主要是為鏈路聚合的運行作準備,如全局變量的初始化、命令注冊以及聚合組狀態的確定(這里聚合組都初始化為無效狀態,無成員端口)。
3)端口狀態監測。它主要負責不停地讀取端口在聚合組中的Select/Unselect狀態,然后根據端口的狀態重新將流量分配到各個處于選中狀態的端口上。
4)創建/刪除聚合組。創建聚合組就是將聚合組狀態標識位置1,表示該聚合組現在有效;當聚合組中沒有成員才可以將該聚合組刪除,將聚合組狀態標識位置0,即該聚合組無效,不能再對該聚合組進行操作。
5)向聚合組添加/刪除端口。向一個聚合組中添加/刪除成員端口。
6)配置同步。在對聚合接口進行配置時,聚合組中的所有成員端口的配置要進行自動同步,而且這些配置會保存在端口上,即使聚合組被刪除,這些端口的配置仍然會保存。
7)負載均衡。主要是通過負載分擔表的填寫和hash算法來將流量盡可能均勻地分配到聚合組中處于選中狀態的端口上。
8)靜態選擇。靜態選擇主要是進行聚合組中參考端口的選擇以及成員端口Select/Unselect狀態的確定。
9)驅動讀寫。將邏輯上算好的值寫入芯片或從芯片中獲取當前值,這里主要是操作Marvell6097提供的API函數。
實現MSAP上的手工聚合功能最主要的部分就是確定端口的Selected/Unselected狀態,根據端口狀態來填寫負載均衡表。涉及到的關鍵技術是靜態選擇邏輯(參考端口的選擇和成員端口狀態的確定)和負載均衡技術。
3.3.1 靜態選擇邏輯
靜態選擇模塊包括參考端口的選擇和成員端口Selected/Unselected狀態的確定。
參考端口的選擇規則如下:當聚合組內有處于UP狀態的端口時,先比較端口的聚合優先級,優先級數值最小的端口作為參考端口;如果優先級相同,再按照端口的全雙工/高速率→全雙工/低速率→半雙工/高速率→半雙工/低速率的優先次序,選擇優先次序更高、且第二類配置與對應聚合接口相同的端口作為該聚合組的參考端口;如果優先次序相同,則選擇端口號最小的端口作為參考端口。
聚合組中成員端口Selected/Unselected狀態的確定流程如圖3所示。

圖3 成員端口狀態確定流程圖
另外,聚合組中端口的選擇遵循非搶占原則[6]。當一個聚合組中處于選中狀態的端口已經達到聚合組所支持的最大端口數時,如果再添加的端口也符合選中條件,此時端口號越小越優的原則將會失效,已經處于選中狀態的端口優先。這樣就可以避免某個正在轉發流量的端口突然中斷。
3.3.2 負載均衡及動態備份
在聚合組下設置驅動后,鏈路聚合系統會根據特定的算法把通過聚合接口發送的報文分配到各個處于選中狀態的成員端口上進行轉發,以此實現流量的負載均衡。這里的負載均衡采用的是hash算法。當聚合組中成員端口的Link狀態發生變化時,會影響到該端口在聚合組中的Select/Unselect狀態,則需重新填寫負載分擔表。硬件算法得出一個hash值,然后根據該hash值和負載均衡表來確定報文從哪個端口進行轉發。
匯聚卡的兩個千兆口(下面簡稱G01,G02)屬于同一個聚合組,當兩個端口都屬于選中狀態時,負載均衡表配置如圖4a所示,如果hash值為0,2,4,6,流量從G01轉發,hash值為1,3,5,7,流量從G02轉發,通過每個端口的報文數比例為1∶1。如果聚合組中端口的Selected/Unselected(未選中)發生變化,那么均衡表的值會隨之改變,如果G02因某種原因變為未選中狀態,那么負載均衡表如圖4b所示,報文全部從G01進行轉發,當G02再次從Unselect狀態變為Select狀態后,報文會再次均衡到兩個千兆口上進行轉發。

圖4 負責均衡表配置
Marve7ll6097用到的hash算法主要采用源MAC地址和目的MAC地址異或的方法[4]。取源MAC和目的MAC的最后3 bit進行異或運算,得到的值在0~7之間,然后再根據負載分擔表決定流量應該通過哪條鏈路進行轉發。如源MAC為00-00-00-00-0F-01,目的MAC為00-00-00-00-0F-63,最后3 bit進行異或后的結果為2,則該流量將從G01轉發。
調用Marvell6097提供的API函數,根據用戶對聚合組的設置,對聚合組、聚合組成員端口及負載均衡表做不同的設置:
u_longLAG_SetMar6095Trunk(TRUNKING_MEMBER*tm)
{
…/*找出聚合組中的成員端口*/
gprtSetTrunkPort(dev,port,GT_TRUE,trunkld);/*開啟端口的聚合功能*/
gprtSetTrunkRouting(dev,trunkId,tm→TrunkPortList);/*將聚合組的成員下發硬件*/
…/*軟件求出均衡表的值*/gprtSetTrunkMaskTable(dev,i,mask)/*填寫負載均衡表*/
…
}
手工鏈路聚合功能測試環境如圖5所示,用到的主要設備有MSAP、以太網測試儀、E1協轉、光纖收發器。以太網測試儀的一端用于接匯聚卡的千兆口,另一端接光纖收發器。

圖5 手工鏈路聚合功能測試環境
通過MSAP網管界面將業務板卡(如EOS/EOP)的匯聚模式配置為向上匯聚(向匯聚卡匯聚),保證兩個千兆口都處于up狀態,并將匯聚卡的兩個千兆口加入到同一個聚合組,然后通過交叉盤配置交叉連接,業務將通過2M16卡下到一個E1協轉,然后到光纖收發器。
以太網測試儀從光纖收發器端發送源MAC為00-00-0F-00-FF-00,目的MAC是從00-00-0F-00-00-00到00-00-0F-0F-42-40的連續的1 000 000個報文,G01和G02兩個端口分別收到500 000個數據包。然后再次開始發送數據的同時將G02狀態設置為link down,鏈路L2將不再轉發數據報文,G01上收到998 580個數據包,少量掉包。
根據hash算法算出的hash值為0~7,然后根據負載分擔表將流量分配到各個成員端口上,兩個端口都處于up狀態時,測試結果與理論結果一致。在一個端口狀態發生變化時,重新設置負載均衡表,在這個過程中出現少量掉包屬于正常現象,可以很快恢復正常通信。
鑒于鏈路帶寬和可靠性對網絡服務的限制以及MSAP業務卡本身的局限性,本文在了解與掌握鏈路聚合(Link Aggregation)原理的基礎上,通過對聚合組中成員端口的配置同步、數據流的負載分擔以及動態備份,實現了MSAP上手工聚合功能,該功能已經在本作者所屬單位的MSAP-622設備上成功運行,功能的實現增加了MSAP-622設備的鏈路帶寬,同時鏈路動態備份提高了鏈路可靠性,達到測試標準,可滿足用戶需求。
[1]李永成,喬廬峰.多業務接入平臺(MSAP)的技術特點及實現[J].電視技術,2009,33(S1):103-105.
[2]徐蓓,肖萍萍.QinQ在MSAP中的設計與實現[J].電視技術,2012,36(9):78-79.
[3]劉寶慶,黃華,夏健剛.基于MSAP的邊緣接入網設計方案研究[J].西華大學學報:自然科學版,2009,28(3):24-25.
[4]金星亮.基于MSTP鏈路聚合的研究與實現[D].成都:電子科技大學,2011.
[5]劉立.交換機鏈路聚合的原理與實驗研究[J].信息安全與技術,2010(9):54-56.
[6]鄭濤.以太網鏈路聚合的研究與實現[D].杭州:杭州電子科技大學,2011.