韋 文, 師 進, 王 欣, 周宇暉
(1.北京全路通信信號研究設計院集團有限公司,北京 100070;2.北京市高速鐵路運行控制系統(tǒng)工程技術研究中心,北京 100070)
軟件定義網(wǎng)絡(Softw are Defined Netw ork,SDN)技術誕生于2006 年,是一種新型網(wǎng)絡創(chuàng)新架構,是一種實現(xiàn)網(wǎng)絡虛擬化的方式。SDN 架構的核心思想是將網(wǎng)絡設備的控制面與數(shù)據(jù)面分離開,設備開放可編程的控制接口,由位于中心的SDN 控制器對整個網(wǎng)絡設備進行集中控制,功能豐富的控制器將較大地拓展網(wǎng)絡能力,實現(xiàn)網(wǎng)絡功能的靈活控制和調(diào)度,使網(wǎng)絡作為管道變得更加智能,為核心網(wǎng)絡及應用創(chuàng)新提供良好的平臺。
隨著SDN 技術的發(fā)展成熟,SDN 已在數(shù)字中心互連、軟件定義的廣域網(wǎng)(Softw are Defined-Wide Area Network,SD-WAN)、行業(yè)專用網(wǎng)絡等場景中應用,并將應用于方興未艾的5G 移動通信網(wǎng)絡領域。
軌道交通通信系統(tǒng)作為行業(yè)專用網(wǎng)絡系統(tǒng),對網(wǎng)絡的首要要求是高可靠、高安全。傳統(tǒng)網(wǎng)絡技術主要采用冗余保護、網(wǎng)絡安全技術提供相關特性。SDN 的出現(xiàn)為行業(yè)專用網(wǎng)絡的構建提供了新的思路,如何為軌道交通通信專用網(wǎng)絡開發(fā)專用SDN 控制器已成為目前相關領域的研究熱點之一。本文將研究如何進行SDN 控制器的開發(fā),并主要研究如何采用業(yè)界成熟SDN 開源軟件項目進行定制化開發(fā)方法。該開發(fā)方式既可快速構建和部署與業(yè)界主用SDN 控制器軟件框架一致的控制器,又可融合具有行業(yè)特色的用戶定制軟件功能,滿足軌道交通通信等行業(yè)的特殊應用需求。
控制器軟件可完全自主開發(fā),也可參考部分成熟開源項目。即使自主開發(fā),開源項目也可提供良好的參考。目前業(yè)界最典型的兩種開源控制器軟件為Open Daylight(簡稱ODL)和Open Netw ork Operating System(簡稱ONOS)。
ODL 是由Linux 基金會推出的一個開源項目,集聚了行業(yè)中領先的供應商和Lin ux 基金會的一些成員。ODL 的目標是建立一套標準化軟件,幫助用戶以此為基礎開發(fā)出具有附加值的應用程序。
ONOS 是由斯坦福、伯克利等知名大學聯(lián)合了運營商、設備制造商等發(fā)起的非營利性開源社區(qū)組織,其目標是創(chuàng)建一個運營商級的開源SDN 網(wǎng)絡操作系統(tǒng),滿足運營商網(wǎng)絡遷移到SDN 的需求。
在近幾年的快速發(fā)展中,兩種開源控制器項目相互取長補短,包括在整體軟件架構上也相互模仿,接口類型支持全面,它們的開源社區(qū)參與者中有很大部分是重合的廠商,因此兩種開源控制器目前都是業(yè)界主流項目,用戶在具體項目開發(fā)中可針對更細致的比較項進行對比挑選,如表1 所示。
表1 典型開源控制器軟件比較Tab.1 Comparison of typical open-source controllers
本文主要以ONOS 為例對控制器定制化開發(fā)方法進行說明。
ONOS 作為一個控制器開發(fā)平臺,其底層運用了Karaf 平臺。Karaf 是一個Java 的輕量級的開放服務網(wǎng)關協(xié)議(Open Service Gateway Initiative,OSGi)容器平臺,其特點是支持各組件和應用的熱部署、動態(tài)配置,并集成了多種日志處理系統(tǒng)、可編程擴展控制臺、安全認證機制等。因此ONOS 采用的是一個Java 動態(tài)化、模塊化的系統(tǒng)軟件框架。
ONOS 整個框架結構如圖 1 所示。
圖1 ONOS框架結構圖Fig.1 ONOS framework structure
ONOS 的分層結構完整覆蓋了SDN 網(wǎng)絡從底層網(wǎng)元設備到頂層用戶應用組件的各層次,內(nèi)核層已提供SDN 控制器所需的所有必要組件,而且ONOS為各層解耦開發(fā)提供了良好的機制,包括:服務發(fā)布(Provider)-調(diào)用,服務監(jiān)聽(Listener)-通知,服務注冊(Registry)-響應等。傳統(tǒng)Java 開發(fā)中組件調(diào)用依賴關系被轉變?yōu)榉找蕾囮P系,組件間呈現(xiàn)松耦合狀態(tài)。
因此,通?;贠NOS 定制化開發(fā)控制器時,主要集中考慮應用組件的定制開發(fā)即可,有時涉及南向接口中網(wǎng)元硬件私有協(xié)議或驅動的開發(fā)。
ONOS 應用組件有兩種常用的開發(fā)方式。
第一種方式是直接修改ONOS 開源代碼。由于ONOS 底層為K ar af 容器平臺,各應用組件可封裝成Bundle 或Feature(即多個Bundle 及配置的集合)動態(tài)加載,ONOS 自身還提供了稱為App的可選封裝方式。因此該方式是以模塊化的方式對ONOS 進行修改或添加,其優(yōu)點是方便快捷,缺點是依賴整個ONOS 代碼,當ONOS 定期發(fā)布升級版本時,定制化組件的代碼移植、重新編譯工作較繁瑣。
第二種方式是為應用組件創(chuàng)建獨立的Bu n d le、Feature 或App 代碼工程。Karaf 或ONOS 的容器管理都支持從外部安裝和動態(tài)部署應用組件,定制開發(fā)完成后,在運行階段而不是編譯階段將應用組件嵌入到ONOS 運行平臺中。該方式成功解耦了應用組件代碼的開發(fā)維護和ONOS 開源社區(qū)代碼的發(fā)展升級,因此是本文推薦的開發(fā)方式。下文采用該方式介紹一個定制ONOS 應用組件的開發(fā)示例。
在本示例中,假設用戶需為ONOS 控制器增添一個基于簡單網(wǎng)絡管理協(xié)議(Simp le Netw or k Management Protocol, SNMP)的鏈路告警應用組件,其功能為通過SNMP 協(xié)議自動接收網(wǎng)元上報的鏈路狀態(tài)信息,并在ONOS 控制臺界面上打印顯示告警信息。
鏈路告警應用組件的工作場景如圖 2 所示。
網(wǎng)元間鏈路互連組成SDN 網(wǎng)絡的數(shù)據(jù)面,控制器邏輯上與所有網(wǎng)元的管理口連接組成SDN 網(wǎng)絡的控制面,此外SNMP 報文也在控制面中傳送。網(wǎng)元監(jiān)測到數(shù)據(jù)面鏈路狀態(tài)變化時,將SNMP 報文上報給控制器的鏈路告警應用組件進行處理。
用代碼開發(fā)工具構建一個名為鏈路告警(Link A lar m)的應用組件代碼項目。推薦使用Mav en 或集成了Maven 插件的集成開發(fā)環(huán)境,因為Maven 提供了很多自動生成ONOS/Karaf 應用組件的模板。該代碼項目包含的模塊如下。
1)Link Alarm-suite:僅包含一個項目對象模型(Project Object Model,POM)文件,用于描述如何將該組件所有模塊組織為一個ONOS ap p,其總體依賴關系和參數(shù)等。
2)Link Alarm-apps:應用組件主模塊,這里封裝為Feature 并包含3 個典型的Bundle:
Link Alarm-main:定義組件主函數(shù)入口;
Link Alarm-cli:定義組件在ONOS 控制臺中新增的命令;
Link Alarm-api:定義組件的對外服務接口。3種Bundle 均可用對應的Maven 模板生成,注意在生成的POM 文件中使用了標簽
3)Pr oviders:SNMP 協(xié)議的服務模塊,包括兩個Bundle:
Device-prov:負責用SNMP 初始化網(wǎng)元設備;
Alarm-prov:負責用SNMP 協(xié)議接收網(wǎng)元設備上報的數(shù)據(jù),進行處理并輸出結果。
4)Dr iver s:SNMP 協(xié)議允許各網(wǎng)元設備廠商定義私有管理信息庫(Management Information Base,MIB),因此需要在Drivers 模塊中定義相應的私有MIB。用一個xml 文件和標簽
5)Pr otocols:實現(xiàn)標準的SNMP 通信協(xié)議,該部分可直接引用既有的第三方代碼或協(xié)議庫。
6)U tils:一些工具類實用功能模塊,如單元測試、異常處理等。
在告警應用組件中,主要功能邏輯體現(xiàn)在Alarm-prov 模塊中,其流程框如圖3 所示。
該流程主要分為兩大部分,一是為網(wǎng)元設備配置、建立SNMP 會話進行報文監(jiān)聽;二是接收網(wǎng)元設備上報的SNMP 報文后,根據(jù)廠商MIB 庫進行報文內(nèi)容翻譯,提取告警信息并輸出。
圖3 Alarm-prov模塊流程圖Fig.3 Flowchart of Alarm-prov module
按照本文所述開發(fā)方法設計實現(xiàn)了告警應用組件的演示程序。編譯通過后,在圖2 所示場景上運行、試驗過程如下:
1) 運行ONOS,安裝告警應用組件到ONOS中;
2) 用命令使能告警應用組件:ap p activ ate Link Alarm-suite;
3) 網(wǎng)元設備上設置SNMP 試驗參數(shù):上報的IP 地址為ONOS 的IP 地址;觸發(fā)事件的OID分 別 為1.3.6.1.6.3.1.1.5.3( 鏈 路 斷 開) 和1.3.6.1.6.3.1.1.5.4(鏈路啟用);
4) 用腳本將網(wǎng)元設備的配置推送到ONOS 中,讓Device-prov 模塊發(fā)現(xiàn)并初始化網(wǎng)元;
5) 試驗操作:對IP 為192.168.10.57 的網(wǎng)元上連接的網(wǎng)線,先拔出后重新插入,觀察輸出。
結果輸出示例如圖4 所示,拔出網(wǎng)線時,ONOS 收到SNMP trap 報文后解析,實時顯示端口3 為Link Dow n(鏈路斷開)事件;重新插入網(wǎng)線時,ONOS 顯示端口3 為Lin k U p(鏈路啟用)事件。
圖4 告警應用組件示例運行結果Fig.4 Example result of Link Alarm app
研究基于開源SDN 控制器定制化開發(fā)專網(wǎng)控制應用組件的方法,并以ONOS 上開發(fā)告警應用組件為示例進行演示。該方法對于快速構建靈活可靠的軌道交通行業(yè)專網(wǎng)控制器有指導意義。
基于本文的方法,建議進一步研究擴展告警應用組件并與網(wǎng)絡自動恢復組件進行聯(lián)動,形成自動化網(wǎng)絡故障保護功能,發(fā)揮SDN 控制器動態(tài)調(diào)度網(wǎng)絡的優(yōu)勢,提高軌道交通通信專網(wǎng)的可靠性。