一種網(wǎng)絡(luò)數(shù)據(jù)包負(fù)載均衡和預(yù)解析方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及眾核服務(wù)器的網(wǎng)絡(luò)結(jié)構(gòu)領(lǐng)域,具體是一種網(wǎng)絡(luò)數(shù)據(jù)包負(fù)載均衡和預(yù)解析方法。
【背景技術(shù)】
[0002]傳統(tǒng)的網(wǎng)絡(luò)數(shù)據(jù)包的負(fù)載均衡和預(yù)解析方法,是通過(guò)CPU的處理能力進(jìn)行數(shù)據(jù)包的解析,將解析結(jié)果分發(fā)到對(duì)應(yīng)的處理模塊,這種方法在解析大流量的數(shù)據(jù)包時(shí),會(huì)占用較大的CPU資源并且導(dǎo)致處理模塊的處理能力下降。
[0003]現(xiàn)有傳統(tǒng)方法中,通常采取選用幾臺(tái)眾核服務(wù)器,然后每一臺(tái)眾核服務(wù)器對(duì)應(yīng)一個(gè)多核處理器(TILERA CPU),通過(guò)一臺(tái)交換機(jī)進(jìn)行多臺(tái)眾核服務(wù)器之間的信息交換,這樣做占用的空間資源以及功耗會(huì)比較大。
[0004]傳統(tǒng)方法采用的多核可編程智能包引擎(MPIPE),主要功能是進(jìn)行數(shù)據(jù)流的分發(fā)即把相同的數(shù)據(jù)流分發(fā)到同一個(gè)TILERA CPU核,缺點(diǎn)是沒(méi)有預(yù)處理功能。
【發(fā)明內(nèi)容】
[0005]本發(fā)明針對(duì)上述問(wèn)題,為了最大程度的提高數(shù)據(jù)包的處理能力,充分利用MPIPE的處理能力,加入了預(yù)處理功能,解析協(xié)議類(lèi)型以及數(shù)據(jù)長(zhǎng)度等并把結(jié)果傳送給對(duì)應(yīng)的TILERA CPU 核。
[0006]—種網(wǎng)絡(luò)數(shù)據(jù)包的負(fù)載均衡和預(yù)解析方法建立于一臺(tái)眾核服務(wù)器上,具體包括I個(gè)交換芯片和2個(gè)MPIPE ;交換芯片具有外接接口 XGBE,每個(gè)MPIPE分別對(duì)應(yīng)I個(gè)具有36核的TILERA CPU,依次標(biāo)記為O核一 35核;
[0007]—種網(wǎng)絡(luò)數(shù)據(jù)包的負(fù)載均衡和預(yù)解析方法,具體包括以下步驟:
[0008]步驟一、在眾核服務(wù)器下配置交換芯片;
[0009]交換芯片具有多個(gè)物理端口,平均分別對(duì)應(yīng)2個(gè)MPIPE,從每個(gè)MPIPE對(duì)應(yīng)的物理端口中任選一個(gè)組成邏輯端口,通過(guò)trunk命令進(jìn)行邏輯端口的綁定;
[0010]步驟二、輸入的數(shù)據(jù)包經(jīng)過(guò)外接接口 XGBE進(jìn)入交換芯片后,平均分給2個(gè)MPIPE ;
[0011]數(shù)據(jù)包經(jīng)過(guò)交換芯片的邏輯端口后,如果數(shù)據(jù)包的目的IP和源IP相同,將數(shù)據(jù)包分發(fā)到同一個(gè)物理端口,進(jìn)而轉(zhuǎn)發(fā)到物理端口對(duì)應(yīng)的MPIPE,從而將數(shù)據(jù)包平均分給2個(gè)MPIPE ;
[0012]步驟三、每個(gè)MPIPE將數(shù)據(jù)包轉(zhuǎn)發(fā)到對(duì)應(yīng)的TILERA CPU上,并進(jìn)行數(shù)據(jù)包預(yù)解析;
[0013]預(yù)解析具體步驟如下:
[0014]步驟301、判斷數(shù)據(jù)包的IP協(xié)議頭是否為IPV4或者IPV6,如果不是跳轉(zhuǎn)到步驟306,否則進(jìn)入步驟302。
[0015]步驟302、解析IP協(xié)議頭記錄的源IP,目的IP,以及協(xié)議類(lèi)型。
[0016]步驟303、判斷協(xié)議類(lèi)型是否為T(mén)CP或者UDP,如果是,進(jìn)入步驟304,否則跳轉(zhuǎn)到步驟 306。
[0017]步驟304、解析TCP協(xié)議或者UDP協(xié)議中的信息,并且把信息存放到預(yù)解析結(jié)果中。
[0018]步驟305、解析IP協(xié)議后續(xù)的數(shù)據(jù)并且進(jìn)行字符串比較,把比較結(jié)果存放到預(yù)解析結(jié)果中。
[0019]步驟306、把預(yù)解析結(jié)果發(fā)送給TILERA CPU。
[0020]步驟四、在每個(gè)TILERA CPU上調(diào)用pthread_create庫(kù)函數(shù)創(chuàng)建36個(gè)數(shù)據(jù)包處理線程;
[0021]步驟五、為每個(gè)數(shù)據(jù)包處理線程分別綁定一個(gè)TILERA CPU核;
[0022]步驟六、將數(shù)據(jù)包的預(yù)解析結(jié)果分發(fā)到對(duì)應(yīng)的數(shù)據(jù)包處理線程。
[0023]配置邏輯端口的hash算法,針對(duì)具有相同目的IP和源IP的數(shù)據(jù)包,計(jì)算數(shù)據(jù)包的id值,根據(jù)id值判斷,將相同id值的數(shù)據(jù)包傳輸給綁定的同一個(gè)數(shù)據(jù)包處理線程。
[0024]步驟七、36個(gè)處理線程分別通過(guò)調(diào)用庫(kù)函數(shù)gx1_mpipe_iqueue_try_peek接收數(shù)據(jù)包并且得到預(yù)解析結(jié)果,保存源IP和目的IP。
[0025]本發(fā)明的優(yōu)點(diǎn)與積極效果在于:
[0026]I) 一種網(wǎng)絡(luò)數(shù)據(jù)包負(fù)載均衡和預(yù)解析方法,在眾核服務(wù)器下使用交換芯片進(jìn)行各個(gè)TILERA CPU之間的負(fù)載均衡,通過(guò)MPIPE實(shí)現(xiàn)TILERA CPU核之間的負(fù)載均衡。對(duì)于處理線程不需要再解析數(shù)據(jù)包,只需要對(duì)需要關(guān)注的數(shù)據(jù)包里面的域進(jìn)行處理;操作更加簡(jiǎn)便,最大程度的提高數(shù)據(jù)包的處理能力。
[0027]2) 一種網(wǎng)絡(luò)數(shù)據(jù)包負(fù)載均衡和預(yù)解析方法,為各個(gè)線程綁定TILERA CPU核,實(shí)現(xiàn)了并行處理數(shù)據(jù)包。
[0028]3) 一種網(wǎng)絡(luò)數(shù)據(jù)包負(fù)載均衡和預(yù)解析方法,通過(guò)配置邏輯端口的hash算法,對(duì)于相同目的IP+源IP的數(shù)據(jù)包分發(fā)到同一個(gè)物理端口,實(shí)現(xiàn)TILERA CPU之間的負(fù)載均衡,提高了眾核服務(wù)器數(shù)據(jù)包處理能力。
【附圖說(shuō)明】
[0029]圖1是本發(fā)明網(wǎng)絡(luò)數(shù)據(jù)包負(fù)載均衡和預(yù)解析的示意圖;
[0030]圖2是本發(fā)明一種網(wǎng)絡(luò)數(shù)據(jù)包負(fù)載均衡和預(yù)解析方法的流程圖;
[0031]圖3為本發(fā)明預(yù)解析具體步驟的流程圖;
[0032]圖4是本發(fā)明處理線程分別接收數(shù)據(jù)包并預(yù)解析的示意圖;
【具體實(shí)施方式】
[0033]下面將結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。
[0034]—種網(wǎng)絡(luò)數(shù)據(jù)包負(fù)載均衡和預(yù)解析方法,采用一臺(tái)眾核服務(wù)器,如圖1所示,包括I個(gè)交換芯片,2個(gè)多核處理器(TILERA CPU)和2個(gè)多核可編程智能包引擎(MPIPE);
[0035]通過(guò)眾核服務(wù)器上的交換芯片進(jìn)行數(shù)據(jù)包負(fù)載均衡到各個(gè)多核處理器,在各個(gè)TILERA CPU上通過(guò)MPIPE實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包的接收以及負(fù)載均衡,并且將預(yù)解析結(jié)果發(fā)送到指定的TILERA CPU核上。通過(guò)trunk命令以及hash算法的規(guī)則實(shí)現(xiàn)負(fù)載均衡。
[0036]輸入的數(shù)據(jù)包經(jīng)過(guò)外接接口 XGBE進(jìn)入交換芯片后,被平均分成兩部分,對(duì)應(yīng)進(jìn)入兩個(gè)MPIPE中,MPIPE進(jìn)行平均分發(fā),把具有相同目的IP和源IP的數(shù)據(jù)包分發(fā)到同一個(gè)TILERA CPU 核。
[0037]—種網(wǎng)絡(luò)數(shù)據(jù)包的負(fù)載均衡和預(yù)解析方法,如附圖2所示,具體步驟如下:
[0038]步驟一、在眾核服務(wù)器下配置交換芯片;
[0039]交換芯片具有多個(gè)物理端口,平均分別對(duì)應(yīng)2個(gè)MPIPE,從每個(gè)MPIPE對(duì)應(yīng)的物理端口中任選一個(gè)組成邏輯端口,通過(guò)trunk命令進(jìn)行邏輯端口的綁定;
[0040]首先、登陸眾核服務(wù)器的交換芯片,并進(jìn)入配置交互界面。
[0041 ] 把PC機(jī)和眾核服務(wù)器配置在同一個(gè)網(wǎng)段,在PC上通過(guò)telnet命令登陸眾核服務(wù)器的交換芯片的配置交互界面,配置交互界面選用現(xiàn)有的CLI (命令行界面)。
[0042]然后、通過(guò)trunk命令把交換芯片的多個(gè)物理端口綁定為一個(gè)邏輯端口。
[0043]例如利用trunk命令進(jìn)行端口綁定如下:
[0044]trunk add id = I Rtag = 6 pbmp = xel5, xel6, xel7
[0045]把物理端口 xel5,xel6, xl7綁定為一個(gè)邏輯端口。
[0046]每個(gè)MPIPE分別對(duì)應(yīng)3個(gè)物理端口,如:第一個(gè)MPIPE對(duì)應(yīng)物理端口 I,物理端口 2和物理端口 3 ;第二個(gè)MPIPEl對(duì)應(yīng)物理端口 4,物理端口 5,物理端口 6 ;
[0047]選取物理端口 I和物理端口 4組成一個(gè)邏輯端口 ;保證了數(shù)據(jù)流經(jīng)過(guò)邏輯端口平均分配到2個(gè)MPIPE ;
[0048]如果選取物理端口 I,物理端口 2,物理端口 3和物理端口 4組成一個(gè)邏輯端口,保證了分到第一個(gè)MPIPE的是四分之三的數(shù)據(jù)流,第二個(gè)MPIPE的是四分之一的數(shù)據(jù)流。
[0049]步驟二、輸入的數(shù)據(jù)包經(jīng)過(guò)外接接口 XGBE進(jìn)入交換芯片后,平均分給2個(gè)MPIPE ;
[0050]數(shù)據(jù)包經(jīng)過(guò)交換芯片的邏輯端口后,對(duì)于相同目的IP+源IP的數(shù)據(jù)包分發(fā)到同一個(gè)物理端口,進(jìn)而轉(zhuǎn)發(fā)到物理端口對(duì)應(yīng)的MPIPE,從而將數(shù)據(jù)包平均分給2個(gè)MPIPE。
[0051]交換芯片采用hash算法,將數(shù)據(jù)包平均分配給2個(gè)物理端口:物理端口 I和物理端口 4,經(jīng)過(guò)物理端口進(jìn)入到2個(gè)MPIPE。
[0052]id = hash_fun (srcip, dstip,srcmac,dstmac)。
[0053]hash_fun表示通過(guò)CRC循環(huán)冗余檢驗(yàn)算法實(shí)現(xiàn),srcip表示源IP,dstip表示目的IP,srcmac表示源MAC,dstmac表示目的MAC,id為通過(guò)規(guī)則算法得到的值。
[0054]步驟三、每個(gè)MPIPE將數(shù)據(jù)包轉(zhuǎn)發(fā)到對(duì)應(yīng)的TILERA CPU上;并且進(jìn)行數(shù)據(jù)包預(yù)解析;
[0055]如圖3所示,預(yù)解析具體步驟如下:
[0056]步驟301、判斷數(shù)據(jù)包的IP協(xié)議頭是否為IPV4或者IPV6,如果不是跳