張 潔,羅志成,李明春
(1.武漢郵電科學(xué)研究院,湖北武漢 430074;2.烽火通信科技股份有限公司,湖北武漢 430074)
隨著網(wǎng)絡(luò)技術(shù)的快速發(fā)展,網(wǎng)絡(luò)中部署的業(yè)務(wù)量不斷增多[1-2]。以太網(wǎng)鏈路聚合將多個物理接口綁定為一個邏輯接口,有效提高了設(shè)備之間鏈路的可靠性和數(shù)據(jù)傳輸能力[3-5]。以太網(wǎng)通常使用環(huán)形拓?fù)錇榫W(wǎng)絡(luò)提供冗余保護,但存在廣播風(fēng)暴等故障現(xiàn)象,生成樹協(xié)議(Spanning Tree Protocol,STP)將環(huán)形網(wǎng)絡(luò)修剪成一個無環(huán)的樹型網(wǎng)絡(luò),但是網(wǎng)絡(luò)收斂時間在秒級,無法滿足高服務(wù)質(zhì)量要求的業(yè)務(wù)[6-7]。與STP協(xié)議相比,ERPS 通過阻塞特定的端口達(dá)到消除環(huán)路的目的[8-10],收斂時間在50 ms 以內(nèi),可滿足電信級可靠性。
文中設(shè)計和實現(xiàn)了基于以太網(wǎng)鏈路聚合開啟ERPS 協(xié)議,正常情況下,用戶流量完好;當(dāng)鏈路聚合組中出現(xiàn)鏈路故障時,可以通過備份鏈路保證鏈路帶寬;當(dāng)整個聚合組不工作時,ERPS 協(xié)議發(fā)生保護倒換,放開RPL 端口恢復(fù)通信,故障中斷時間控制在50 ms以內(nèi)。
以太網(wǎng)鏈路聚合是將多個物理端口匯聚在一起,形成一個邏輯端口,以實現(xiàn)出入流量吞吐量在各成員端口的負(fù)載分擔(dān)。如高速公路上的單車道,擴建為雙向八車道,那么高速公路的通過能力將變得更強[11-12]。
兩臺設(shè)備之間通過多條物理鏈路連接,稱為鏈路聚合組(Trunk),被捆綁在一起的每一個物理接口稱為該鏈路聚合組的成員接口,其中用來轉(zhuǎn)發(fā)數(shù)據(jù)的接口為活動接口,處于選中(Selected)狀態(tài),而非活動接口不參與數(shù)據(jù)的轉(zhuǎn)發(fā),處于非選中(Unselected)狀態(tài)。
以太網(wǎng)鏈路聚合根據(jù)是否啟用鏈路聚合控制協(xié)議(Link Aggregation Control Protocol,LACP)分為手工鏈路聚合和LACP 鏈路聚合。手工鏈路聚合只能在同廠商設(shè)備上使用,而LACP 鏈路聚合方式符合國際標(biāo)準(zhǔn),因此可以實現(xiàn)不同廠商之間的互通。
ERPS 是ITU_T 定義的二層破環(huán)協(xié)議,通過環(huán)自動保護倒換協(xié)議數(shù)據(jù)單元(Ring Auto Protection Switching Protocol Data Unit,R-APS PDU)與對端交互。由一個主節(jié)點和若干個普通節(jié)點組成的ERPS環(huán)是ERPS 協(xié)議的基本組成單位,其中主節(jié)點是ERPS 的主要決策和控制節(jié)點,每個環(huán)上有且僅有一個,除此之外的節(jié)點為普通節(jié)點(Common)。每個節(jié)點最多僅有兩個端口加入同一個ERPS 環(huán),在ERPS協(xié)議中,需要指定主節(jié)點上其中一個端口角色為RPL,在正常狀態(tài)下RPL 端口狀態(tài)為阻塞(Blocking),只處理協(xié)議報文,不轉(zhuǎn)發(fā)數(shù)據(jù)報文,除此之外的端口角色為Common,端口狀態(tài)為轉(zhuǎn)發(fā)(Forwarding),此狀態(tài)下端口既可轉(zhuǎn)發(fā)數(shù)據(jù),也可以接收和轉(zhuǎn)發(fā)協(xié)議報文。傳輸協(xié)議報文和數(shù)據(jù)報文的虛擬局域網(wǎng)(Virtual Local Area Network,VLAN)需要映射在保護實例中,同一個ERPS 環(huán)上的設(shè)備配置相同的控制VLAN,控制VLAN 用于傳輸ERPS 協(xié)議報文,數(shù)據(jù)VLAN 用于轉(zhuǎn)發(fā)用戶流量[13-14]。
設(shè)備A~C 組成一個ERPS 環(huán),設(shè)備A 為主節(jié)點,PA1 的端口角色為RPL,其他設(shè)備為普通節(jié)點,端口角色為Common。正常狀態(tài)下,主節(jié)點A 將端口PA1的狀態(tài)置為Blocking,不參與用戶數(shù)據(jù)的轉(zhuǎn)發(fā),在物理成環(huán)的情況下阻塞端口達(dá)到破環(huán)的目的,保護用戶數(shù)據(jù);當(dāng)環(huán)路發(fā)生故障,如設(shè)備B-C 間鏈路故障,則主節(jié)點A 打開阻塞端口PA1,端口狀態(tài)變?yōu)镕orwarding,可參與用戶數(shù)據(jù)的轉(zhuǎn)發(fā),實現(xiàn)了對用戶數(shù)據(jù)的切換;故障恢復(fù)后,重新阻塞主節(jié)點A 的端口PA1,避免網(wǎng)絡(luò)成環(huán)。
基于以太網(wǎng)鏈路聚合實現(xiàn)ERPS 協(xié)議在OLT 設(shè)備上的運行,需要在命令行增加鏈路聚合組的配置和查詢,保證ERPS 協(xié)議可以基于鏈路聚合組對普通端口進行操作。另外是兩個協(xié)議之間的互相通告,如鏈路聚合組中成員端口的添加(ADD)和刪除(DEL)、鏈路聚合組的連接(up)/斷開(down)事件,需要通知ERPS 協(xié)議模塊作處理,ERPS 協(xié)議運行后的結(jié)果也需要通知以太網(wǎng)鏈路聚合模塊,更新鏈路聚合組的狀態(tài)[15-16]。上述事件的處理和完成要求收斂速度足夠快,達(dá)到電信級可靠性。
配置命令為erps ring <ring-id>primary-linkaggregation <trunkid>role [common|rpl-port]和erps ring <ring-id>secondry-link-aggregation <trunkid>role [common|rpl-port],查詢命令為show erps ring <ring-id>trunk <trunkid>。其中,ring-id 是環(huán)ID,根據(jù)環(huán)ID 區(qū)分不同的邏輯環(huán),trunkid 代表鏈路聚合組號,端口角色有兩種:common 和rpl-port,由用戶自行設(shè)置,確保環(huán)中設(shè)備上有一個端口為rpl-port。
配置命令的實現(xiàn)流程圖如圖1 所示。設(shè)備開啟ERPS 協(xié)議時會進行模塊初始化,創(chuàng)建一個ERPS 協(xié)議的輪詢?nèi)蝿?wù)erp_task,這個任務(wù)中根據(jù)消息類型觸發(fā)狀態(tài)機的運轉(zhuǎn)?;谝蕴W(wǎng)鏈路聚合配置ERPS協(xié)議時,首先需要檢查命令行中輸入?yún)?shù)的合法性,當(dāng)輸入?yún)?shù)合法且鏈路聚合組存在的情況下,將配置信息寫入數(shù)據(jù)庫,遍歷聚合組內(nèi)普通端口,設(shè)置端口狀態(tài)并刷新端口的轉(zhuǎn)發(fā)數(shù)據(jù)表(Forwarding Data Base,F(xiàn)DB)。
圖1 命令行配置流程
查詢命令的實現(xiàn)與配置命令類似,當(dāng)命令中有輸入?yún)?shù)時先判斷參數(shù)的合法性,參數(shù)合法時判斷聚合組是否存在,若存在則從數(shù)據(jù)庫中獲取聚合組的信息并顯示。
Trunk 組內(nèi)成員的變動,包括成員添加或者刪除,ERPS 協(xié)議模塊設(shè)置一個鉤子函數(shù),當(dāng)Trunk 組內(nèi)成員變動時,注冊的鉤子函數(shù)將通知ERPS 模塊進行處理,處理流程如圖2 所示。
圖2 Trunk組成員變動處理流程
在ERPS 輪詢?nèi)蝿?wù)中,若刪除Trunk 組中成員,如Trunk 組中某一條鏈路故障或者人為刪除Trunk組中某一條鏈路,此時需要將端口信息(端口默認(rèn)轉(zhuǎn)發(fā)狀態(tài)、速率、雙工模式等)恢復(fù)為默認(rèn)值。若Trunk組中添加成員,如鏈路帶寬不足需要增加帶寬,那么新加入的鏈路端口信息需要與鏈路聚合組保持一致,因此,需要先查詢新端口加入鏈路聚合組的信息,并根據(jù)該信息對新端口進行設(shè)置,設(shè)置后新端口將更新自己的端口狀態(tài)并刷新FDB 表。
Trunk 組up/down 的處理流程涉及到報文交互和定時器的設(shè)計,IDLE 表示正常狀態(tài),Protection 表示保護狀態(tài),設(shè)備A 是主節(jié)點RPL Owner。
Trunk 組故障時的操作如圖3 所示,步驟如下。
圖3 鏈路故障時的操作
A:正常狀態(tài);
B:節(jié)點B 和節(jié)點C 之間鏈路故障;
C:節(jié)點B 和C 檢測到本地信號故障,打開Holdoff Timer 定時器,阻塞故障端口并執(zhí)行刷新FDB 操作;
D:當(dāng)SF (Signal Failed)條件存在的情況下,節(jié)點B 和C 周期性地發(fā)送SF R-APS 報文,為了快速進行保護倒換,前3 個報文的發(fā)送間隔為3.3 ms;
E:所有節(jié)點接收到SF R-APS 報文后刷新FDB表,主節(jié)點接收到SF R-APS 報文后,放開RPL 端口并刷新FDB;
F、G:環(huán)上SF 信號穩(wěn)定存在時,不會觸發(fā)進一步操作。
Trunk 組鏈路恢復(fù)時的操作如圖4 所示,步驟如下。
圖4 故障恢復(fù)
A:穩(wěn)定的SF 條件;
B:鏈路故障恢復(fù);
C:節(jié)點B 和C 檢測到本地SF 條件清除,啟動Guard Timer 定時器,并周期性向外發(fā)送NR(No Request)R-APS 報文;
D:當(dāng)主節(jié)點接收到NR 報文后,啟動WTR(Wait to Restore)timer 定時器;
E:當(dāng)節(jié)點B 和C 上Guard Timer 超時后,就可接收新的R-APS 報文;
F:主節(jié)點上的WTR timer 超時后,阻塞RPL 端口,并發(fā)送NR、RB(No Request,RPL Blocked) R-APS報文,刷新FDB。
G:當(dāng)節(jié)點B 和C 收到NR、RB R-APS 報文后,將放開阻塞的端口并停止發(fā)送NR 報文。
根據(jù)上述原理與方案設(shè)計,在OLT 上開發(fā)實現(xiàn)了基于以太網(wǎng)鏈路聚合的環(huán)網(wǎng)保護倒換。使用3 臺OLT 和一臺流量測試儀(TestCenter)搭建圖5 所示的網(wǎng)絡(luò)拓?fù)鋱D進行測試。
圖5 測試拓?fù)鋱D
設(shè)備A 為主節(jié)點,設(shè)備A 的Trunk 組2 的角色為RPL,其他設(shè)備為普通節(jié)點,Trunk 組的角色為Common。正常收斂狀態(tài)下,由測試儀口1 向口2 模擬發(fā)送用戶數(shù)據(jù),測試儀口2 可以正常接收,說明環(huán)路中設(shè)備運行正常,各端口狀態(tài)正確。依次斷開AC、BC、AB 間鏈路聚合組中成員端口,然后重新連接,依次將AC、BC、AB 間鏈路聚合組斷開連接后再重新連接,觀察環(huán)路中的鏈路切換,記錄流量測試儀的丟包數(shù)。測量多組數(shù)據(jù)后取平均值,如表1 所示,流量測試儀的發(fā)包速率為1 000 Frames/s。
表1 測試結(jié)果
正常狀態(tài)下,數(shù)據(jù)流向為:儀表口1-A-B-C-儀表口2,從表1 可以看出,AC 之間鏈路的改變不會造成丟包,BC 和AB 之間鏈路的改變、保護倒換時間均在50 ms 以內(nèi),因此可知,方案設(shè)計合理,該機制切實可行。
文中提出了將以太網(wǎng)鏈路聚合與ERPS 協(xié)議相結(jié)合,在普通端口的基礎(chǔ)上增加對聚合組的操作,不僅拓寬了網(wǎng)絡(luò)帶寬,增加了數(shù)據(jù)的傳輸能力,而且實現(xiàn)了環(huán)網(wǎng)的保護倒換,提高了網(wǎng)絡(luò)的可靠性。