程林鋼 李瑞華
(1運(yùn)城師范高等專科學(xué)校 山西運(yùn)城 044000;2陽泉師范高等??茖W(xué)校 山西陽泉 045200)
隨著網(wǎng)絡(luò)開放性、共享性和規(guī)模的進(jìn)一步擴(kuò)大,傳統(tǒng)的Internet從原理上無法保證通信的安全性,網(wǎng)絡(luò)安全問題變得越來越重要。在這種背景下,VPN(visual private network)應(yīng)運(yùn)而生,它可以在網(wǎng)絡(luò)運(yùn)營商提供的公共網(wǎng)絡(luò)上建立公司、組織的私有網(wǎng)絡(luò),還可以充分保證通信的安全。為了更為靈活的應(yīng)對多變的網(wǎng)絡(luò)應(yīng)用環(huán)境,越來越多的企業(yè)采用MPLS(multi-protocol label switch) VPN方式來組織規(guī)劃網(wǎng)絡(luò),從而實(shí)現(xiàn)網(wǎng)絡(luò)的高度可擴(kuò)展性和可管理性[1]。因此,構(gòu)建一個(gè)完整的基于NetFlow的MPLS VPN流量分析系統(tǒng)具有十分重要的意義。
多協(xié)議標(biāo)簽交換MPLS是利用標(biāo)簽和標(biāo)記實(shí)現(xiàn)的一種網(wǎng)絡(luò)層交換方式。作為新一代的網(wǎng)絡(luò)架構(gòu),它不僅具有路由技術(shù)的靈活性優(yōu)點(diǎn),而且可以利用ATM交換技術(shù)對虛電路提供標(biāo)簽交換業(yè)務(wù),從而將MPLS引入無連接的IP網(wǎng)絡(luò)中。
MPLS使用標(biāo)簽(label)進(jìn)行轉(zhuǎn)發(fā),這里的標(biāo)簽實(shí)質(zhì)是32Bit且僅本地有效的數(shù)據(jù)。MPLS包頭的結(jié)構(gòu)如圖1所示,其中1比特的S可用于判斷是否為底層標(biāo)簽[2]。
圖1 MPLS包頭結(jié)構(gòu)
MPLS 技術(shù)是一種數(shù)據(jù)包交換方式,利用MPLS的優(yōu)勢,可以用來設(shè)計(jì)解決網(wǎng)路問題,同時(shí)也可為下一代網(wǎng)絡(luò)建設(shè)及規(guī)劃提供有效的科學(xué)依據(jù)。MPLS VPN是目前比較適合于運(yùn)營商的VPN技術(shù)[3]。利用MPLS VPN,可形成代表不同業(yè)務(wù)的多種VPN,從而使網(wǎng)絡(luò)安全地傳送不同的業(yè)務(wù)數(shù)據(jù)[1],實(shí)現(xiàn)更多的增值業(yè)務(wù)。
NetFlow利用特定的模式將數(shù)據(jù)流中的數(shù)據(jù)進(jìn)行交換,在交換過程中,NetFlow會(huì)將首次交換得到的數(shù)據(jù)進(jìn)行緩存,從而為之后的數(shù)據(jù)處理提供依據(jù)。利用這種數(shù)據(jù)交換方式,可以使數(shù)據(jù)快速,安全地進(jìn)行傳輸,并可以同時(shí)對所有數(shù)據(jù)進(jìn)行統(tǒng)計(jì),從而對數(shù)據(jù)的分析提供依據(jù)[5,6]。目前,NetFlow主要使用ASIC芯片實(shí)現(xiàn)數(shù)據(jù)的加速交換,這也成為了互聯(lián)網(wǎng)界公認(rèn)的流量分析標(biāo)準(zhǔn)。異常通信流量檢測中所需的數(shù)據(jù)都可利用NetFlow技術(shù)對網(wǎng)絡(luò)通信流量的分析得出,因此實(shí)質(zhì)上是在最大限度地減小對路由器或者交換機(jī)性能的影響下提供網(wǎng)絡(luò)數(shù)據(jù)包快速的交換功能。同時(shí)可以詳細(xì)地記錄通過路由器或者交換機(jī)的數(shù)據(jù)包的詳細(xì)統(tǒng)計(jì)信息。
NetFlow是基于流(Flow)來實(shí)現(xiàn)的。這里的流的兩端指的是源IP地址和目的IP地址,流便是這兩端之間的數(shù)據(jù)包在交換時(shí)所形成的數(shù)據(jù)包流。
系統(tǒng)主要設(shè)計(jì)并實(shí)現(xiàn)一個(gè)基于NetFlow的MPLS VPN流量分析系統(tǒng)。系統(tǒng)的網(wǎng)絡(luò)拓?fù)淙鐖D2所示,連接在Cisco Catalyst 6509上的NetFlow 采集設(shè)備采集源IP地址與目的IP地址和MPLS VPN服務(wù)器IP地址相同的流數(shù)據(jù),采集到的流數(shù)據(jù)即是流經(jīng)MPLS VPN的流數(shù)據(jù)。通過對這些流數(shù)據(jù)的分析,可以隨時(shí)掌握流經(jīng)MPLS VPN的流量情況,為檢測流量中的異常情況與流量計(jì)費(fèi)提供依據(jù)。
圖2 系統(tǒng)網(wǎng)絡(luò)拓?fù)鋱D
據(jù)此,筆者將MPLS VPN流量分析系統(tǒng)設(shè)計(jì)為3個(gè)模塊:流量采集模塊、流量聚合與存儲(chǔ)模塊、流量查詢模塊,圖3為系統(tǒng)結(jié)構(gòu)示意圖。
圖3 系統(tǒng)結(jié)構(gòu)示意圖
交換機(jī)將采集到的NetFlow信息送至流量采集模塊,此模塊對接收到的NetFlow信息進(jìn)行預(yù)處理。之后,流量聚合與存儲(chǔ)模塊對從流量采集模塊發(fā)來的數(shù)據(jù)按一定規(guī)則進(jìn)行聚合,聚合后的數(shù)據(jù)保存到數(shù)據(jù)庫。流量查詢模塊主要實(shí)現(xiàn)兩個(gè)功能:實(shí)時(shí)流量的呈現(xiàn)和查詢。
流量采集模塊是整個(gè)系統(tǒng)的基礎(chǔ)。要實(shí)現(xiàn)流量分析,首先要保證網(wǎng)絡(luò)中產(chǎn)生的流量數(shù)據(jù)能被正確的記錄下來,然后才能談及流量分析。這個(gè)模塊設(shè)計(jì)中的關(guān)鍵問題就是如何保證完整地采集到交換機(jī)發(fā)送的NetFlow數(shù)據(jù)包,并能正確地處理每一個(gè)數(shù)據(jù)包,得到所需數(shù)據(jù)。本模塊采用多線程的程序設(shè)計(jì)模式,其中NetFlow數(shù)據(jù)包采集線程、數(shù)據(jù)包預(yù)處理線程、數(shù)據(jù)發(fā)送線程是常駐線程,從主程序開始運(yùn)行后就一直在運(yùn)行[4]。流量采集模塊的功能設(shè)計(jì)圖如圖4所示。
圖4 MPLS VPN流量采集模塊功能設(shè)計(jì)圖
4.1.1主線程設(shè)計(jì)[4]主線程需要系統(tǒng)提供一個(gè)記錄配置信息的配置文件。這些配置信息是數(shù)據(jù)采集與預(yù)處理模塊運(yùn)行時(shí)所需的一些重要全局信息。這些信息在系統(tǒng)運(yùn)行之前由系統(tǒng)管理員進(jìn)行設(shè)置。它們包括接收NetFlow數(shù)據(jù)包的端口號、日志文件的目錄等等。然后主線程將創(chuàng)建日志文件的目錄,如果這個(gè)目錄已經(jīng)存在,則不需要重新創(chuàng)建。在數(shù)據(jù)采集與分析模塊運(yùn)行過程中的所有重要事件都會(huì)寫到日志文件中,這樣管理人員就可以隨時(shí)了解系統(tǒng)的運(yùn)行情況。這個(gè)日志文件是共享的,各個(gè)線程在運(yùn)行過程中都會(huì)對這個(gè)文件進(jìn)行操作。之后主線程將分別啟動(dòng)NetFlow數(shù)據(jù)包采集線程、數(shù)據(jù)包預(yù)處理線程、數(shù)據(jù)發(fā)送線程。
4.1.2數(shù)據(jù)包采集線程設(shè)計(jì) 數(shù)據(jù)包采集線程啟動(dòng)后,首先要進(jìn)行一些初始化工作。主要是創(chuàng)建Socket連接并綁定到指定端口,準(zhǔn)備接收從交換機(jī)發(fā)送來的NetFlow數(shù)據(jù)包。[4]一條完整的V5格式的NetFlow數(shù)據(jù)流的大小是一個(gè)24字節(jié)的報(bào)文頭和30條48字節(jié)的流記錄,它的完整長度是1464字節(jié),所以需要定義一個(gè)內(nèi)存區(qū)域用來接收NetFlow數(shù)據(jù)包[4]。緩沖區(qū)的定義如下:
Byte[] buff=new Byte[1464];
定義完緩沖區(qū)后,由于NetFlow數(shù)據(jù)流是采用UDP發(fā)送的,所以筆者采用UDP形式接收NetFlow數(shù)據(jù)流。為了防止NetFlow包的丟失,在實(shí)現(xiàn)中使用了緩沖技術(shù),將所有接收到的NetFlow輸出包經(jīng)過分析后存入一個(gè)隊(duì)列q_capture中[4]。之后再從隊(duì)列中提取數(shù)據(jù),進(jìn)行安全性檢查,從而丟棄非法數(shù)據(jù),只處理合法數(shù)據(jù)。
4.1.3數(shù)據(jù)包預(yù)處理線程設(shè)計(jì) NetFlow數(shù)據(jù)包被采集并插入q_caputre隊(duì)列后,等待數(shù)據(jù)包預(yù)處理線程進(jìn)行處理。筆者需要對NetFlow流記錄中的數(shù)據(jù)項(xiàng)進(jìn)行提取并統(tǒng)計(jì)。需要統(tǒng)計(jì)的數(shù)據(jù)項(xiàng)的值通過以下方式實(shí)現(xiàn)[5]:
buff.read(record,0,8);//讀取8個(gè)字節(jié)(源IP地址和目的IP地址)
buff.skip(8);//略過8個(gè)字節(jié)不用的數(shù)據(jù)
buff.read(record,8,8);//讀取各占4個(gè)字節(jié)的流報(bào)文數(shù)和流字節(jié)數(shù)
buff.skip(8);//略過8個(gè)字節(jié)不用的數(shù)據(jù)
buff.read(record,8,8);//讀取4個(gè)字節(jié)(源端口和目的端口)
buff.skip(2);//略過2個(gè)字節(jié)不用的數(shù)據(jù)
buff.read(record,20,1);//讀取1個(gè)字節(jié)的協(xié)議
線程首先將等待數(shù)據(jù)進(jìn)入q_capture隊(duì)列,這個(gè)等待是一個(gè)有時(shí)間限制的等待,而不是無限期等待。這個(gè)期限被設(shè)置為5s。如果在5s內(nèi),事件對象仍未變成已通知狀態(tài),將會(huì)超時(shí)并重新開始循環(huán)[5]。
當(dāng)q_capture隊(duì)列中有數(shù)據(jù)之后,線程將從其成員隊(duì)列的頭部取出一個(gè)元素,這是一個(gè)NetFlow數(shù)據(jù)包,在一個(gè)NetFlow數(shù)據(jù)包中含有最多30個(gè)記錄,因此需要逐條地取出這些記錄[5]。然后依次讀取每條流記錄中的相關(guān)字段,將字段存儲(chǔ)到flow結(jié)構(gòu)中,等待發(fā)送。同時(shí)為了防止不可預(yù)知的錯(cuò)誤,以及發(fā)送不成功的情況,筆者設(shè)置了另一個(gè)隊(duì)列q_send,此時(shí)將flow結(jié)構(gòu)插入q_send隊(duì)列等待發(fā)送[5],流程如圖5所示。
圖5 數(shù)據(jù)包預(yù)處理線程流程圖
4.1.4數(shù)據(jù)包發(fā)送線程設(shè)計(jì) 線程首先創(chuàng)建流量聚合與存儲(chǔ)模塊的Socket連接,并將該Socket綁定到配置文件中指定的數(shù)據(jù)發(fā)送端口[5]。之后線程將查看隊(duì)列中的數(shù)據(jù),若檢測到隊(duì)列中有數(shù)據(jù)入隊(duì),則線程發(fā)送該機(jī)構(gòu);如果沒有發(fā)送成功,將會(huì)嘗試重新發(fā)送。如果嘗試次數(shù)超過設(shè)定的重試次數(shù)后仍未發(fā)送成功,線程將會(huì)彈出一個(gè)消息框提示系統(tǒng)管理人員發(fā)送數(shù)據(jù)時(shí)出錯(cuò)[5]。
因?yàn)榱髁坎杉K會(huì)采集到網(wǎng)絡(luò)中所有的數(shù)據(jù),因此數(shù)據(jù)量會(huì)非常龐大,為避免數(shù)據(jù)庫的快速膨脹而降低后期數(shù)據(jù)查詢的效率,筆者對流量采集模塊發(fā)來的數(shù)據(jù)先按一定規(guī)則進(jìn)行聚合,將聚合后的數(shù)據(jù)保存到數(shù)據(jù)庫。流量聚合與存儲(chǔ)模塊的功能設(shè)計(jì)圖如圖6所示。
圖6 流量聚合與存儲(chǔ)模塊的功能設(shè)計(jì)圖
4.2.1主線程設(shè)計(jì) 主線程啟動(dòng)后首先從配置文件中讀取配置信息。這些配置信息是流量聚合與存儲(chǔ)模塊運(yùn)行時(shí)所需的一些重要全局信息[5]。它們包括運(yùn)行NetFlow流量采集模塊的流量采集設(shè)備數(shù)據(jù)發(fā)送的IP地址和端口、日志文件的目錄等等[4],然后主線程將創(chuàng)建日志文件的目錄。在流量聚合與存儲(chǔ)模塊運(yùn)行過程中的所有重要事件都會(huì)寫到日志文件中,這樣管理人員就可以隨時(shí)了解系統(tǒng)的運(yùn)行情況。這個(gè)日志文件是這個(gè)模塊中各個(gè)線程共享的,各個(gè)線程在運(yùn)行過程中都會(huì)對這個(gè)文件進(jìn)行操作。然后主線程將分別啟動(dòng)數(shù)據(jù)接收線程、流量聚合線程、數(shù)據(jù)存儲(chǔ)線程。
4.2.2數(shù)據(jù)接收線程設(shè)計(jì) 數(shù)據(jù)接收線程啟動(dòng)后,首先建立Socket,用來連接到流量采集設(shè)備指定端口,等待流量采集模塊發(fā)送數(shù)據(jù)過來,同時(shí)建立一個(gè)flow結(jié)構(gòu)用來接收數(shù)據(jù)[5]。這個(gè)結(jié)構(gòu)同流量采集模塊中的flow結(jié)構(gòu)必須一樣,這樣才能保證正確的接收數(shù)據(jù),然后線程將監(jiān)聽指定端口。如果有數(shù)據(jù)到達(dá),先判斷該數(shù)據(jù)中包含的源IP地址或目的IP地址是否與MPLS VPN服務(wù)器的IP地址相同,如果相同,說明是符合用戶要求的數(shù)據(jù),則將數(shù)據(jù)存入flow結(jié)構(gòu),否則,將數(shù)據(jù)丟棄。為了防止流量聚合模塊不能及時(shí)的處理數(shù)據(jù),筆者將flow結(jié)構(gòu)先插入q_recieve隊(duì)列中,等待流量聚合線程處理。
4.2.3數(shù)據(jù)聚合線程設(shè)計(jì) 將q_recieve隊(duì)列中取出的flow結(jié)構(gòu)進(jìn)行聚合后生成的是源網(wǎng)段地址、目的網(wǎng)段地址、源端口號段、目的端口號段、包尺寸分布等[4]。可按如下不同準(zhǔn)則進(jìn)行聚合:
對源網(wǎng)段聚合:統(tǒng)計(jì)出一個(gè)間隔時(shí)間(3min)內(nèi)同一源IP(取子網(wǎng)地址)的流個(gè)數(shù)和流量大小[4]。由于我們只針對流經(jīng)MPLS VPN的流量進(jìn)行分析,如果源IP為MPLS VPN的IP地址,則其發(fā)出的流量即為其它IP地址接收的流量,所以,在聚合時(shí),并不聚合源IP為MPLS VPN的IP地址的流量。
圖7 數(shù)據(jù)聚合線程流程圖
對目的網(wǎng)段聚合:統(tǒng)計(jì)出一個(gè)間隔時(shí)間(3min)內(nèi)同一目的IP(取子網(wǎng)地址)的流的個(gè)數(shù)和流量大小[4]。
對數(shù)據(jù)包尺寸分布聚合:將數(shù)據(jù)包長度劃分為0-10Byte,10-50Byte,50-100Byte,100-200Byte,200-1000Byte,大于1000Byte的幾個(gè)區(qū)域[4]。
對協(xié)議類型聚合:按協(xié)議類型,統(tǒng)計(jì)出各協(xié)議中流個(gè)數(shù)[4]。
線程啟動(dòng)后,首先檢查q_recieve隊(duì)列中是否有數(shù)據(jù)。當(dāng)q_recieve隊(duì)列中有數(shù)據(jù)之后,線程將從其成員隊(duì)列的頭部取出一個(gè)元素,這是一個(gè)flow結(jié)構(gòu),然后依次讀取結(jié)構(gòu)中的相應(yīng)字段按規(guī)則進(jìn)行聚合,將所有聚合信息存儲(chǔ)到info結(jié)構(gòu)中,等待保存到數(shù)據(jù)庫。同時(shí)為了防止不可預(yù)知的錯(cuò)誤,以及保存不成功的情況,筆者設(shè)置了另一個(gè)隊(duì)列q_save,此時(shí)將info結(jié)構(gòu)插入q_save隊(duì)列等待保存到數(shù)據(jù)庫。[4]
其中,info結(jié)構(gòu)的定義如下:
public struct head
{
string time; //時(shí)間戳
int all_in_flow; //流入總流量
int all_out_flow; //流出總流量
string[] src_subnet; //源子網(wǎng)
int[] src_net_flow; //由源子網(wǎng)發(fā)出的流量
string[] dst_subnet; //目的子網(wǎng)
int[] dst_net_flow; //由目的子網(wǎng)接收的流量
string[] port_area; //端口號段
int[] src_port_flow; //源端口中各端口號段的流量
int all_src_port //端口號段的出口總流量
int[] dst_port_flow; //目的端口中各端口好段的流量
int all_dst_port; //端口好段的入口總流量
string[] data_area; //數(shù)據(jù)包長分段
int[] data_num; //各包長段內(nèi)的流個(gè)數(shù)
string[] procotol; //協(xié)議類型分布
int[] proc_num; //各協(xié)議類型流個(gè)數(shù)
int all_num; //總流個(gè)數(shù)
}
4.2.4數(shù)據(jù)存儲(chǔ)線程設(shè)計(jì)[4]線程啟動(dòng)后,將首先檢查q_save隊(duì)列中是否有數(shù)據(jù)。當(dāng)隊(duì)列中有數(shù)據(jù)時(shí),線程將從隊(duì)列頭部取出一個(gè)info機(jī)構(gòu)的元素,線程將插入該結(jié)構(gòu)到數(shù)據(jù)庫的相關(guān)表中。如果沒有插入成功,將會(huì)嘗試重新插入。如果嘗試次數(shù)超過設(shè)定的重試次數(shù)后仍未插入成功,線程將會(huì)彈出一個(gè)消息框提示系統(tǒng)管理人員發(fā)送數(shù)據(jù)時(shí)出錯(cuò),并且產(chǎn)生錯(cuò)誤的可能原因會(huì)寫入日志文件,系統(tǒng)管理人員應(yīng)該根據(jù)日志中提供的信息解決這個(gè)故障。在故障排除后,線程將繼續(xù)嘗試插入。
通過實(shí)時(shí)流量的查詢和顯示,可以形成隨時(shí)間變化的網(wǎng)絡(luò)流量曲線圖,這對于我們分析網(wǎng)絡(luò)及流量狀況有重要價(jià)值。通過流量的查詢,可以統(tǒng)計(jì)分析一段時(shí)間內(nèi)網(wǎng)絡(luò)流量特征,為用戶網(wǎng)絡(luò)行為及分析等提供依據(jù)。此模塊采用B/S方式,利用ASP.NET技術(shù)實(shí)現(xiàn)通過Web方式發(fā)布數(shù)據(jù)。實(shí)時(shí)流量曲線圖通過Crystal Reports生成,并通過AJAX實(shí)現(xiàn)定時(shí)更新。
在實(shí)現(xiàn)基于NetFlow的VPN流量分析系統(tǒng)之前,首先需要在交換機(jī)上啟用NetFlow功能并配置NetFlow數(shù)據(jù)導(dǎo)出。NetFlow在交換機(jī)上的配置如下:
Switch(config)#mls NetFlow
!— Enables NetFlow on the PFC.
!
Switch(config)#mls flow ip full
!—Configures flow mask on the PFC.
!—In this example, flow mask is configured as full.
!
Switch(config)#interface Vlan10
Switch(config-if)#ip route-cache flow
Switch(config-if)#exit
Switch(config)#interface Vlan20
Switch(config-if)#ip route-cache flow
Switch(config-if)#exit
Switch(config)#interface fastEthernet 3/1
Switch(config-if)#ip route-cache flow
本MPLS VPN流量分析系統(tǒng)中,MPLS VPN服務(wù)器采用OpenVPN-AS(并發(fā)用戶數(shù)50)。整個(gè)實(shí)驗(yàn)中流量數(shù)據(jù)為校外訪問用戶實(shí)際發(fā)生的流量。通過系統(tǒng)運(yùn)行,實(shí)時(shí)流數(shù)據(jù)的呈現(xiàn)如圖8所示。
圖8 包長分布實(shí)時(shí)流量圖
對于本系統(tǒng),要保證其穩(wěn)定性,就必須保證各模塊之間的處理速度上的平衡,即流量聚合與存儲(chǔ)模塊處理速度大于流量采集與預(yù)處理處理速度。只有這樣,整個(gè)系統(tǒng)才能保證其穩(wěn)定性,否則,必將在某個(gè)接口處造成資源的競爭現(xiàn)象。當(dāng)資源競爭情況加劇時(shí),就會(huì)造成系統(tǒng)的崩潰。經(jīng)過連續(xù)1個(gè)多月的實(shí)際流量的采集、分析,結(jié)果表明,系統(tǒng)能夠維持其良好的穩(wěn)定性,并且對數(shù)據(jù)的處理能夠做到準(zhǔn)確和及時(shí)兩個(gè)方面。
本系統(tǒng)根據(jù)NetFlow的特點(diǎn),設(shè)計(jì)并實(shí)現(xiàn)了一套基于NetFlow的MPLS VPN流量分析系統(tǒng),系統(tǒng)采用多線程方式實(shí)現(xiàn),有效提高了流量采集、聚合、分析的效率。通過本系統(tǒng),可以靈活、方便地了解網(wǎng)絡(luò)資源的使用情況,根據(jù)流量數(shù)據(jù)合理監(jiān)控網(wǎng)絡(luò),保證企業(yè)業(yè)務(wù)的順暢運(yùn)行。
參考文獻(xiàn):
[1]張峰,鄭振華,徐深超.基于MPLS VPN的流量統(tǒng)計(jì)技術(shù)[J].信息技術(shù),2011,35(3):29.
[2]陳震. VPN 技術(shù)及其應(yīng)用研究[J].電腦知識與技術(shù),2009,16(4):798.
[3]金爽.基于NetFlow的實(shí)時(shí)安全事件檢測技術(shù)研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2009.22.
[4]鄒文峰.網(wǎng)絡(luò)流量監(jiān)測及頁載均衡技術(shù)研究[D].合肥:網(wǎng)絡(luò)科技大學(xué),2009.16.
[5]張浚.基于多特征相似度的大規(guī)模網(wǎng)絡(luò)異常檢測[D].北京:電子科技大學(xué),2007.23.
[6]孫文勝,趙問吉. 基于MPLS VPN的IP承載網(wǎng)保證措施的研究[J]. 杭州電子科技大學(xué)學(xué)報(bào),2012,32(5):253.
[7]楊寶航.MPLS技術(shù)在網(wǎng)絡(luò)改造中的應(yīng)用研究[D].呼和浩特:內(nèi)蒙古大學(xué),2011.18.
[8]許經(jīng)彩,王新華,孫倩,等.一種不精確狀態(tài)MPLS路由算法[J]. 計(jì)算機(jī)工程與應(yīng)用,2011,47(23):165.
[9]何璐瑩.MPLS VPN技術(shù)研究與應(yīng)用[J].現(xiàn)代電子技術(shù),2011,34(15):201.
九江學(xué)院學(xué)報(bào)(自然科學(xué)版)2013年4期