。在發(fā)送過程中可以根據(jù)所述數(shù)據(jù)型?;顖笪牡耐鈱覩RE封裝中的目的IP地址,將所述數(shù)據(jù)型保活報文通過所述GRE隧道的數(shù)據(jù)層發(fā)送至所述目的IP地址對應(yīng)的對端網(wǎng)關(guān)上。
[0052]由于在GRE隧道內(nèi)的數(shù)據(jù)層傳輸報文不需要特殊的配置,因此通過所述數(shù)據(jù)型?;顖笪倪M行保活探測,可以擺脫網(wǎng)關(guān)配置方面的制約。
[0053]步驟103、當收到所述對端網(wǎng)關(guān)返回的所述控制報文時,通過所述GRE隧道與所述對端網(wǎng)關(guān)進行報文傳輸;
[0054]當對端網(wǎng)關(guān)收到所述數(shù)據(jù)型?;顖笪暮?,會對該數(shù)據(jù)型?;顖笪慕夥庋b,然后根據(jù)所述內(nèi)層GRE封裝中的目的IP地址將帶有所述中間報文通過GRE隧道的數(shù)據(jù)層返回到所述本端網(wǎng)關(guān)上。
[0055]在GRE隧道連接正常的情況下,本端網(wǎng)關(guān)可以收到帶有內(nèi)層GRE封裝的所述中間報文,將該中間報文解封裝后,可以得到GRE封裝內(nèi)的控制報文。由于所述控制報文的目的IP地址為本端網(wǎng)關(guān)的IP地址,源IP地址為對端網(wǎng)關(guān)的IP地址,因此該控制報文可以視為由對端網(wǎng)關(guān)發(fā)送而來的控制報文。于是本端網(wǎng)關(guān)可以根據(jù)是否收到所述對端網(wǎng)關(guān)返回的控制報文,判斷所述GRE隧道是否正常連接。
[0056]當收到所述對端網(wǎng)關(guān)返回的所述控制報文時,可說明所述GRE隧道正常連接,因此可以通過所述GRE隧道與所述對端網(wǎng)關(guān)進行報文傳輸。
[0057]由此可見,本發(fā)明可以通過GRE隧道中的數(shù)據(jù)通道向?qū)Χ司W(wǎng)關(guān)發(fā)送數(shù)據(jù)型?;顖笪?,根據(jù)對端網(wǎng)關(guān)是否根據(jù)所述數(shù)據(jù)型?;顖笪姆祷乜刂茍笪?,來探測GRE隧道是否正常連接,并在GRE隧道正常連接的狀態(tài)下與對端網(wǎng)關(guān)進行報文傳輸,從而保證報文在GRE隧道中順利傳輸,避免網(wǎng)絡(luò)帶寬浪費。
[0058]實際應(yīng)用中,當對端網(wǎng)關(guān)損壞、撤除、網(wǎng)絡(luò)異?;蚴蔷W(wǎng)關(guān)中的GRE隧道接口被關(guān)閉時,本端網(wǎng)關(guān)都有可能收不到對端網(wǎng)關(guān)返回的控制報文。為了更準確地進行隧道保活探測,在本發(fā)明可選的實施例中,可以在本端網(wǎng)關(guān)上設(shè)置計數(shù)器。在第一個數(shù)據(jù)型?;顖笪陌l(fā)送后,啟動該計數(shù)器;在所述數(shù)據(jù)型?;顖笪陌l(fā)送后的定時周期內(nèi),若未收到所述對端網(wǎng)關(guān)返回的控制報文,則控制計數(shù)器的計數(shù)值加I ;當所述計數(shù)值大于等于預(yù)設(shè)閾值時,說明該GRE隧道連接異常。當所述GRE隧道連接異常時,本端網(wǎng)關(guān)可將與所述GRE隧道對應(yīng)的隧道接口關(guān)閉。后續(xù)若有報文要從本端網(wǎng)關(guān)通過GRE隧道向?qū)Χ司W(wǎng)關(guān)發(fā)送時,本端網(wǎng)關(guān)若檢測到所述隧道接口關(guān)閉,則可知所述GRE隧道連接異常,因此便可以停止轉(zhuǎn)發(fā)該報文,從而提高隧道中帶寬的有效利用率。
[0059]需要說明的是,在若所述隧道接口關(guān)閉后,本端網(wǎng)關(guān)依舊會周期性的向?qū)Χ司W(wǎng)關(guān)發(fā)送所述數(shù)據(jù)型保活報文。當本端網(wǎng)關(guān)收到所述對端網(wǎng)關(guān)返回的所述控制報文時,說明所述GRE隧道的連接恢復(fù)正常,因此可以控制計數(shù)器的計數(shù)值清零,并開啟所述隧道接口,以允許通過所述GRE隧道與所述對端網(wǎng)關(guān)進行報文傳輸。
[0060]在本發(fā)明可選的實施例中,當本端網(wǎng)關(guān)與對端網(wǎng)關(guān)之間創(chuàng)建了多條GRE隧道時,為了區(qū)分不同的GRE隧道,本發(fā)明可以在所述控制報文中添加GRE隧道對應(yīng)的隧道標識,并為每條GRE隧道創(chuàng)建數(shù)據(jù)型保活報文,以使每個數(shù)據(jù)型?;顖笪臄y帶有不同的隧道標識;然后按預(yù)設(shè)定時周期,根據(jù)數(shù)據(jù)型保活報文中的隧道標識,將所述數(shù)據(jù)型?;顖笪耐ㄟ^所述隧道標識對應(yīng)的GRE隧道,發(fā)送至所述對端網(wǎng)關(guān)。由于該隧道標識通常添加在所述控制型?;顖笪牡臄?shù)據(jù)區(qū)中。對端網(wǎng)關(guān)解封裝時不會改變內(nèi)層GRE封裝中的控制型?;顖笪?,從而可以保證該隧道標識不被修改。
[0061]當收到所述對端網(wǎng)關(guān)返回的所述控制報文時,可以將所述控制報文解封裝并獲取所述控制報文中的隧道標識,根據(jù)該隧道標識可確定哪條GRE隧道連接正常。因此,當某GRE隧道異常時,本端網(wǎng)關(guān)可以按照上述?;罘椒ㄟx擇正常的GRE隧道與所述對端網(wǎng)關(guān)進行報文傳輸,從而保證報文在隧道異常的情況下可以正常傳輸。
[0062]下面結(jié)合附圖對本發(fā)明的【具體實施方式】進行詳細闡述。
[0063]圖2為GRE隧道的網(wǎng)絡(luò)架構(gòu)示意圖,在服務(wù)器A和服務(wù)器B面向公網(wǎng)一側(cè)分別設(shè)有網(wǎng)關(guān)A和網(wǎng)關(guān)B,按照現(xiàn)有的GRE協(xié)議在網(wǎng)關(guān)A和網(wǎng)關(guān)B之間分別架設(shè)隧道A和隧道B以使服務(wù)器A與服務(wù)器B通過隧道進行通信。網(wǎng)關(guān)A與網(wǎng)關(guān)B根據(jù)本發(fā)明提供的隧道保活方法進行隧道?;畹倪^程如下:
[0064]假設(shè)網(wǎng)關(guān)A為本端網(wǎng)關(guān),網(wǎng)關(guān)A可以生成控制報文,再將該控制報文封裝成數(shù)據(jù)型?;顖笪摹S捎诰W(wǎng)關(guān)A和網(wǎng)關(guān)B之間存在兩條GRE隧道,因此網(wǎng)關(guān)A會為這兩條GRE隧道分別創(chuàng)建數(shù)據(jù)型?;顖笪?。假設(shè)隧道A和隧道B的隧道標識分別是01和02,通過隧道A傳輸?shù)綄Χ司W(wǎng)關(guān)的數(shù)據(jù)型?;顖笪姆Q為?;顖笪腶,通過隧道B傳輸?shù)綄Χ司W(wǎng)關(guān)的數(shù)據(jù)型?;顖笪姆Q為保活報文b,所述?;顖笪腶和保活報文b的報文格式如圖3所示。
[0065]其中,“1.1.1.1”是網(wǎng)關(guān)A的公網(wǎng)IP地址,“2.2.2.2”是網(wǎng)關(guān)B的公網(wǎng)IP地址。上述控制報文即最內(nèi)層的UDP報文,在UDP報文中還攜帶隧道標識;UDP報文外有兩層GRE封裝,內(nèi)層GRE封裝的目的IP地址為網(wǎng)關(guān)A的IP地址,外層GRE封裝的目的IP地址為網(wǎng)關(guān)B的IP地址。
[0066]在本實施例中,網(wǎng)關(guān)A上可設(shè)定時器,每當定時器到達預(yù)設(shè)的定時周期時,網(wǎng)關(guān)A會分別通過隧道A和隧道B向網(wǎng)關(guān)B發(fā)送?;顖笪腶和?;顖笪腷。假設(shè)隧道A連接正常,隧道B連接異常,那么保活報文a可以到達網(wǎng)關(guān)B,而?;顖笪腷無法到達網(wǎng)關(guān)B。
[0067]當網(wǎng)關(guān)B收到?;顖笪腶時,將該?;顖笪腶解封裝,得到帶有所述內(nèi)層GRE封裝的中間報文a,然后網(wǎng)關(guān)B根據(jù)該中間報文a的內(nèi)層GRE封裝中的目的IP地址1.1.1.1,將中間報文a返回到網(wǎng)關(guān)A上。
[0068]網(wǎng)關(guān)A可以收到網(wǎng)關(guān)B發(fā)送的所述中間報文a。網(wǎng)關(guān)A將收到的所述中間報文a解封裝后,得到最內(nèi)層的UDP報文,然后將UDP報文上送到該網(wǎng)關(guān)的控制層處理。
[0069]需要說明的是,所述本實施例中的網(wǎng)關(guān)的數(shù)據(jù)層和控制層可以集成于一個物理設(shè)備上,也可以分布在不同設(shè)備上。當該網(wǎng)關(guān)是分布系統(tǒng)時,該系統(tǒng)的業(yè)務(wù)板卡可將所述UDP報文通過板間通道上送到主控板卡上,主控板卡將該UDP報文解封裝后得到UDP報文中攜帶的所述隧道標識01。
[0070]當控制層將隧道標識01上送到網(wǎng)關(guān)A時,網(wǎng)關(guān)A可認為隧道標識01對應(yīng)的隧道A通信正常。因此網(wǎng)關(guān)A可將自身面向隧道A的隧道接口 a保持開啟狀態(tài),以使網(wǎng)關(guān)A可以通過GRE隧道A對網(wǎng)關(guān)B進行報文傳輸。
[0071]在本實施例中,由于?;顖笪腷未能正常轉(zhuǎn)發(fā)至網(wǎng)關(guān)B,因此網(wǎng)關(guān)A可能無法收到網(wǎng)關(guān)B返回的中間報文b,此時網(wǎng)關(guān)A可令計數(shù)器的計數(shù)值加1,然后在定時器到達下個定時周期時,繼續(xù)發(fā)送保活報文a和?;顖笪腷。
[0072]假設(shè)?;顖笪腷 —直無法轉(zhuǎn)發(fā),那么當網(wǎng)關(guān)A的計數(shù)值到達預(yù)設(shè)閾值時,則可以認為隧道B連接異常,于是網(wǎng)關(guān)A會將面向隧道B的隧道接口 b關(guān)閉。
[0073]當服務(wù)器A需要通過隧道A和隧道B向服務(wù)器B轉(zhuǎn)發(fā)數(shù)據(jù)報文時,網(wǎng)關(guān)A會查詢隧道接口 a和隧道接口 b當前的狀態(tài),由上可知隧道接口 a開啟,因此可以通過隧道A轉(zhuǎn)發(fā)所述數(shù)據(jù)報文;而隧道接口 b關(guān)閉,因此不使用隧道B轉(zhuǎn)發(fā)所述數(shù)據(jù)報文,從而保證服務(wù)器A和服務(wù)器B可以正常通信。
[0074]因此,本發(fā)明可以通過GRE隧道中的數(shù)據(jù)通道向?qū)Χ司W(wǎng)關(guān)發(fā)送數(shù)據(jù)型?;顖笪?,根據(jù)對端網(wǎng)關(guān)是否根據(jù)所述數(shù)據(jù)型?;顖笪姆祷乜刂茍笪?,來探測GRE隧道是否正常連接,并在GRE隧道正常連接的狀態(tài)下與對端網(wǎng)關(guān)進行報文傳輸,從而保證報文在GRE隧道中順利傳輸,避免網(wǎng)絡(luò)帶寬浪費。
[0075]基于相同的構(gòu)思,本發(fā)明還提供一種隧道控制裝置,所述裝置可以通過軟件實現(xiàn),也可以通過硬件或者軟硬件結(jié)合的方式實現(xiàn)。以軟件實現(xiàn)為例,本發(fā)明的隧道控制裝置作為一個邏輯意義上的裝置,是通過其所在設(shè)備的CPU將非易失性存儲器中對應(yīng)的計算機程序指令讀取到內(nèi)存中運行而成。
[0076]請參考圖3及圖4,本發(fā)明實施例中提供的一種隧道控制裝置400,所述裝置應(yīng)用于本端網(wǎng)關(guān),所述裝