專利名稱:一種基于隧道的報文轉(zhuǎn)發(fā)方法及路由器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)據(jù)通信技術(shù)領(lǐng)域,特別涉及一種基于隧道的報文轉(zhuǎn)發(fā)方法及 路由器。
背景技術(shù):
隧道(Tunnel)技術(shù)是對某些網(wǎng)絡(luò)層協(xié)議(如IPv4、 IPv6和IPX)的數(shù)據(jù) 報文進行封裝,使這些被封裝的數(shù)據(jù)報文能夠在另一個網(wǎng)絡(luò)層協(xié)議(如IPv4) 中傳輸。通用路由封裝(GRE)隧道是隧道技術(shù)的一種,GRE協(xié)議屬于第三 層隧道協(xié)議。
GRE隧道是一個虛擬的點對點的連接,為封裝的數(shù)據(jù)報文提供了一條傳 輸通路,GRE隧道的兩端分別對數(shù)據(jù)報文進行封裝及解封裝。
以圖1的網(wǎng)絡(luò)為例說明X協(xié)議的報文穿越IP網(wǎng)絡(luò)在GRE隧道中傳輸?shù)?過程
1.加封裝過程
(1) 路由器A連接第一子網(wǎng)的接口收到X協(xié)議報文后,首先交由X協(xié) 議處理;
(2) X協(xié)議檢查報文頭中的目的地址域來確定如何路由此報文;
(3) 若報文的目的地址要經(jīng)過隧道才能到達,則將此報文發(fā)給相應(yīng)的隧 道接口;
(4) 隧道接口收到此報文后進行GRE協(xié)議封裝,并在封裝IP報文頭后, 根據(jù)此IP包的目的地址及路由表,將封裝后的報文從相應(yīng)的網(wǎng)絡(luò)接口發(fā)送出 去。
圖2為對X協(xié)議報文進行封裝的示意圖,如圖2所示 要封裝和傳輸?shù)臄?shù)據(jù)報文,稱之為凈荷(Payload),凈荷的協(xié)議類型為乘 客協(xié)議(Passenger Protocol )。系統(tǒng)收到 一個凈荷后,首先使用封裝協(xié)議對這 個凈荷進行GRE封裝,即把乘客協(xié)議報文進行了 "包裝",加上了一個GRE頭部成為GRE報文;然后再把封裝好的原始報文和GRE頭部封裝在IP報文 中,這樣就可完全由IP層負責(zé)此報文的前向轉(zhuǎn)發(fā)(Forwarding)。通常把這個 負責(zé)前向轉(zhuǎn)發(fā)的IP協(xié)議稱為傳輸協(xié)議(Delivery Protocol或者Transport Protocol )。
2.解封裝的過程
解封裝過程和加封裝的過程相反
(1) 路由器B從隧道接口收到IP報文,檢查目的地址;
(2) 如果發(fā)現(xiàn)目的地是本路由器,則剝離掉此報文的IP報頭,交給GRE 協(xié)議處理(進行檢驗密鑰、檢查校驗和及報文的序列號等);
(3) GRE協(xié)議完成相應(yīng)的處理后,剝離掉GRE報頭,再交由X協(xié)議對 此數(shù)據(jù)報進行后續(xù)的轉(zhuǎn)發(fā)處理。
GRE作為一種點到點的隧道連結(jié),加封裝路由器會將多條經(jīng)由該隧道轉(zhuǎn) 發(fā)的報文流封裝成隧道報文流發(fā)送;解封裝路由器會將隧道報文頭剝掉,還原 成多條出隧道報文流后進行轉(zhuǎn)發(fā)。因此,GRE隧道就像管道一樣,在兩個網(wǎng) 絡(luò)節(jié)點之間建立起一條通路,隧道傳輸路徑對于經(jīng)由該隧道轉(zhuǎn)發(fā)的報文來說完 全是透明的、不可見的。
對于入隧道轉(zhuǎn)發(fā)的多個報文,GRE隧道會逐一進行封裝,然后再進行轉(zhuǎn) 發(fā),入隧道報文數(shù)量和隧道報文數(shù)量相同。
申請人在實現(xiàn)本發(fā)明的過程中,發(fā)現(xiàn)現(xiàn)有技術(shù)存在如下缺點
(1) 由于GRE采用每包封裝方式,當(dāng)入隧道報文數(shù)量為n時,則隧道傳 輸路徑上的網(wǎng)絡(luò)會增加(傳輸協(xié)議頭長度十GRE頭長度)x n的帶寬消耗。
(2) 隧道轉(zhuǎn)發(fā)路徑上各節(jié)點需要路由轉(zhuǎn)發(fā)隧道報文到隧道終結(jié)點。通常, 路由器每秒能夠處理的報文數(shù)量的能力是一定的,即路由器的包轉(zhuǎn)發(fā)效率是一 定的,當(dāng)報文長度較小時,勢必導(dǎo)致傳輸網(wǎng)絡(luò)的傳輸能力低下。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種基于隧道的報文轉(zhuǎn)發(fā)方法及路由 器,以節(jié)省隧道傳輸路徑的帶寬占用,并提高隧道的報文轉(zhuǎn)發(fā)能力。 為解決上述技術(shù)問題,本發(fā)明提供技術(shù)方案如下
一種基于隧道的報文轉(zhuǎn)發(fā)方法,其中,在加封裝路由器上執(zhí)行如下步驟
5對至少二個乘客報文進行捆綁后得到入隧道報文;
對所述入隧道報文添加封裝協(xié)議頭和傳輸協(xié)議頭后生成隧道報文,其中, 所述封裝協(xié)議頭中設(shè)置有標識隧道報文為批量封裝報文的標識; 對所述隧道報文進行轉(zhuǎn)發(fā)。
上述的報文轉(zhuǎn)發(fā)方法,其中,所述入隧道報文的長度不大于預(yù)設(shè)的長度門限。
上述的報文轉(zhuǎn)發(fā)方法,其中,所述預(yù)設(shè)的長度門限為隧道傳輸路徑的最 大傳輸單元(MTU)與封裝協(xié)議頭長度和傳輸協(xié)議頭長度之和的差值。
上述的報文轉(zhuǎn)發(fā)方法,其中,還包括在對上一個隧道報文轉(zhuǎn)發(fā)后的預(yù)設(shè) 時間到期后,若所述進行捆綁的至少二個乘客報文的長度之和還未達到所述預(yù) 設(shè)的長度門限,則結(jié)束所述捆綁。
上述的報文轉(zhuǎn)發(fā)方法,其中,所述隧道為通用路由封裝GRE協(xié)議隧道; 所述標識設(shè)置在GRE協(xié)議頭的保留字段中。
一種基于隧道的報文轉(zhuǎn)發(fā)方法,其中,在解封裝路由器上執(zhí)行如下步驟
接收到隧道報文后,剝離掉傳輸協(xié)議頭和封裝協(xié)議頭,得到出隧道報文;
在根據(jù)所述封裝協(xié)議頭中的標識確定所述隧道報文為批量封裝報文時,將 所述出隧道報文拆分成至少二個乘客報文;
對所述至少二個乘客報文分別進行轉(zhuǎn)發(fā)。
一種路由器,包括
捆綁模塊,用于對至少二個乘客報文進行捆綁后得到入隧道報文; 封裝模塊,用于對所述入隧道報文添加封裝協(xié)議頭和傳輸協(xié)議頭后生成隧 道報文,其中,所述封裝協(xié)議頭中設(shè)置有標識隧道報文為批量封裝報文的標識; 第一轉(zhuǎn)發(fā)模塊,用于對所述隧道報文進行轉(zhuǎn)發(fā)。 一種路由器,包括
解封裝模塊,用于在接收到隧道報文后,剝離掉傳輸協(xié)議頭和封裝協(xié)議頭, 得到出隧道報文;
拆分模塊,用于在根據(jù)所述封裝協(xié)議頭中的標識確定所述隧道報文為批量 封裝報文時,將所述出隧道報文拆分成至少二個乘客報文;
第二轉(zhuǎn)發(fā)模塊,用于對所述至少二個乘客報文分別進行轉(zhuǎn)發(fā)。與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是
(1) 通過減少封裝后的報文轉(zhuǎn)發(fā)數(shù)量,降低了隧道轉(zhuǎn)發(fā)路徑上各節(jié)點處 理的性能損耗,提高了隧道轉(zhuǎn)發(fā)性能;
(2) 多個乘客報文捆綁后發(fā)送,僅增加一個隧道頭,降低了隧道傳輸路 徑的網(wǎng)絡(luò)帶寬消耗;
(3) 對現(xiàn)有隧道技術(shù)的改動較少,容易部署實施。
圖1為X協(xié)議網(wǎng)絡(luò)通過GRE隧道互連的示意圖; 圖2為對X協(xié)議報文進行封裝的示意圖3為本發(fā)明實施例中在加封裝路由器上執(zhí)行的報文轉(zhuǎn)發(fā)流程圖; 圖4為本發(fā)明實施例中對乘客報文進行捆綁的流程圖; 圖5為本發(fā)明實施例中的一種隧道"t艮文格式示意圖; 圖6為GRE協(xié)議頭格式示意圖7為本發(fā)明實施例中在解封裝路由器上執(zhí)行的報文轉(zhuǎn)發(fā)流程圖; 圖8為本發(fā)明實施例的加封裝路由器的結(jié)構(gòu)示意圖; 圖9為本發(fā)明實施例的解封裝路由器的結(jié)構(gòu)示意圖。
具體實施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖及具體實 施例對本發(fā)明進行詳細描述。
本發(fā)明的關(guān)鍵在于,對乘客報文進行批量封裝,即,將多個(本發(fā)明中, 多個是指二個或二個以上)乘客報文進行捆綁,并添加封裝協(xié)議頭和傳輸協(xié)議 頭后進行發(fā)送,如此,降低隧道傳輸路徑的網(wǎng)絡(luò)帶寬消耗,并提高隧道的報文 轉(zhuǎn)發(fā)能力。
參照圖3,本發(fā)明實施例的基于隧道的報文轉(zhuǎn)發(fā)方法,在加封裝路由器上 執(zhí)行如下步驟
步驟301:對至少二個乘客報文進行捆綁后得到入隧道報文; 所謂捆綁,是指將至少二個乘客報文首尾連接。加封裝路由器對至少二個 乘客報文進行的捆綁過程如圖4所示,包括如下步驟
步驟401:判斷乘客報文隊列是否為空,若是,進入步驟404,否則,進入步驟402;
路由器接收到協(xié)議報文后,檢查報文頭中的目的地址域來確定如何路由此 報文。若報文的目的地址要經(jīng)過隧道才能到達,則將此報文作為乘客報文放入 到乘客報文隊列中。本發(fā)明中,可以將不同協(xié)議類型的乘客報文分別放入到不 同的隊列中,也可以將所有協(xié)議類型的乘客報文都放入到同 一隊列中。
步驟402:判斷預(yù)設(shè)的長度門限與當(dāng)前捆綁長度之差是否小于等待出隊列 的乘客報文的長度,若是,進入步驟405,否則,進入步驟403;
其中,當(dāng)前捆綁長度是指已經(jīng)捆綁的乘客報文的長度之和。預(yù)設(shè)的長度門 限為隧道傳輸路徑的最大傳輸單元(MTU)與封裝協(xié)議頭長度和傳輸協(xié)議 頭長度之和的差值。
步驟403:從乘客報文隊列中取出一個乘客報文,對該取出的乘客報文進 行捆綁后,返回步驟401;
步驟404:判斷定時器是否超時,若是,進入步驟405,否則,返回步驟
歌
在具體實現(xiàn)中,有可能出現(xiàn)捆綁長度很長時間都不能達到預(yù)設(shè)的長度門限 的情況,如果一直等待,會造成報文的轉(zhuǎn)發(fā)延遲。因此,可以設(shè)置一個超時時 間,例如50ms,每發(fā)送一個隧道報文后啟動一個定時器,定時器的定時時間 為所述超時時間,定時器超時后,雖然進行捆綁的至少二個乘客報文的長度之 和還未達到所述預(yù)設(shè)的長度門限,此時也結(jié)束捆綁。
步驟405:結(jié)束捆綁。
步驟302:對所述入隧道"^艮文添加封裝協(xié)議頭和傳輸協(xié)議頭后生成隧道4艮 文,其中,所述封裝協(xié)議頭中設(shè)置有標識隧道報文為批量封裝報文的標識;
圖5為本發(fā)明實施例中的一種隧道報文格式示意圖。其中,乘客報文為 Ipv4報文,封裝協(xié)議為GRE協(xié)議,傳輸協(xié)議為IPv4協(xié)議。
需要說明的是,本發(fā)明的技術(shù)方案不僅僅限于GRE隧道,還可支持其他 的隧道類型,例如IPv4 OVER IPv4隧道;IPv4 OVER IPv6隧道;IPv6 OVER IPv4隧道;IPv6 OVER IPv6隧道等。
RFC2784定義的GRE頭格式(帶checksum選項)如圖6所示。其中, 保留字段(ReservedO)的bits 6-12沒有使用,默認置為0,本發(fā)明可以使用
8bit 12作為批量封裝報文的類型標識,如果bit 12被置1,則表明是批量封裝 報文,否則為普通封裝報文。
步驟303:對所述隧道報文進行轉(zhuǎn)發(fā)。
加封裝路由器根據(jù)隧道報文的傳輸協(xié)議頭中的目的地址以及本地路由表, 將該隧道報文從相應(yīng)的網(wǎng)絡(luò)接口發(fā)送出去。
參照圖7,本發(fā)明實施例的基于隧道的報文轉(zhuǎn)發(fā)方法,在解封裝路由器上 執(zhí)行如下步驟
步驟701'.接收到隧道才艮文后,剝離掉傳輸協(xié)議頭和封裝協(xié)議頭,得到出 隧道纟艮文;
步驟702:判斷所述隧道報文是否為批量封裝報文,若是,進入步驟704, 否則,進入步驟703;
根據(jù)封裝協(xié)議頭中的標識來確定所述隧道報文是否為批量封裝報文。在封 裝協(xié)議為GRE協(xié)議時,若GRE頭中的ReservedO字段的bit 12的值為1,則 可以確定所述隧道報文為批量封裝報文,值為O,則表明所述隧道報文為普通 封裝報文。
步驟703:將出隧道報文直接路由轉(zhuǎn)發(fā),結(jié)束;
步驟704:將所述出隧道報文拆分成至少二個乘客報文;
不論所述至少二個乘客報文是否為同一協(xié)議類型的報文,其中的每個乘客
報文的協(xié)議頭中都包括有該乘客報文的凈荷的長度,因此,可以根據(jù)該長度對
所述出隧道報文進行拆分。
步驟705:對所述至少二個乘客報文分別進行轉(zhuǎn)發(fā)。
參照圖8,本發(fā)明實施例的加封裝路由器包括捆綁模塊、封裝模塊和第 一轉(zhuǎn)發(fā)模塊。
捆綁模塊,用于對至少二個乘客報文進行捆綁后得到入隧道報文。其中, 在捆綁時,需要控制捆綁后得到的入隧道報文的長度不大于預(yù)設(shè)的長度門限。 所述預(yù)設(shè)的長度門限為隧道傳輸路徑的最大傳輸單元(MTU)與封裝協(xié)議 頭長度和傳輸協(xié)議頭長度之和的差值。
在具體實現(xiàn)中,有可能出現(xiàn)捆綁長度很長時間都不能達到預(yù)設(shè)的長度門限 的情況,如果一直等待,會造成報文的轉(zhuǎn)發(fā)延遲。因此,所述捆綁模塊進一步用于,在對上一個隧道報文轉(zhuǎn)發(fā)后的預(yù)設(shè)時間到期后,若所述進行捆綁的至少 二個乘客4良文的長度之和還未達到所述預(yù)設(shè)的長度門限,則結(jié)束所述捆綁。
封裝模塊,用于對所述入隧道報文添加封裝協(xié)議頭和傳輸協(xié)議頭后生成隧 道報文,其中,所述封裝協(xié)議頭中設(shè)置有標識隧道報文為批量封裝報文的標識。
例如,在所述隧道為GRE協(xié)議隧道時,所述標識設(shè)置在GRE協(xié)議頭的保 留字段中。
第一轉(zhuǎn)發(fā)模塊,用于對所述隧道報文進行轉(zhuǎn)發(fā)。 參照圖9,本發(fā)明實施例的解封裝路由器包括
解封裝模塊,用于在接收到隧道報文后,剝離掉傳輸協(xié)議頭和封裝協(xié)議頭, 得到出隧道報文;
拆分模塊,用于在根據(jù)所述封裝協(xié)議頭中的標識確定所述隧道報文為批量
封裝報文時,將所述出隧道報文拆分成至少二個乘客報文;
第二轉(zhuǎn)發(fā)模塊,用于對所述至少二個乘客報文分別進行轉(zhuǎn)發(fā)。
綜上所述,本發(fā)明提出的隧道批量發(fā)送報文技術(shù),對于多個乘客報文進行
捆綁后發(fā)送,能夠
(1) 不需要對每個乘客報文都封裝隧道頭,因此有效降低了傳輸網(wǎng)絡(luò)的 帶寬占用;
(2) 多個報文組裝為一個隧道報文在傳輸網(wǎng)絡(luò)上傳輸,減少了傳輸網(wǎng)絡(luò) 上的報文數(shù)量,從而在整體上提升了傳輸網(wǎng)絡(luò)的包轉(zhuǎn)發(fā)效率。
最后應(yīng)當(dāng)說明的是,以上實施例僅用以說明本發(fā)明的技術(shù)方案而非限制, 本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對本發(fā)明的技術(shù)方案進行修改或者等同 替換,而不脫離本發(fā)明技術(shù)方案的精神范圍,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求 范圍當(dāng)中。
10
權(quán)利要求
1.一種基于隧道的報文轉(zhuǎn)發(fā)方法,其特征在于,在加封裝路由器上執(zhí)行如下步驟對至少二個乘客報文進行捆綁后得到入隧道報文;對所述入隧道報文添加封裝協(xié)議頭和傳輸協(xié)議頭后生成隧道報文,其中,所述封裝協(xié)議頭中設(shè)置有標識隧道報文為批量封裝報文的標識;對所述隧道報文進行轉(zhuǎn)發(fā)。
2. 如權(quán)利要求1所述的報文轉(zhuǎn)發(fā)方法,其特征在于 所述入隧道報文的長度不大于預(yù)設(shè)的長度門限。
3. 如權(quán)利要求2所述的報文轉(zhuǎn)發(fā)方法,其特征在于 所述預(yù)設(shè)的長度門限為隧道傳輸路徑的最大傳輸單元MTU與封裝協(xié)議頭長度和傳輸協(xié)議頭長度之和的差值。
4. 如權(quán)利要求2所述的報文轉(zhuǎn)發(fā)方法,其特征在于,還包括 在對上一個隧道報文轉(zhuǎn)發(fā)后的預(yù)設(shè)時間到期后,若所述進行捆綁的至少二個乘客報文的長度之和還未達到所述預(yù)設(shè)的長度門限,則結(jié)束所述捆綁。
5. 如權(quán)利要求1所述的報文轉(zhuǎn)發(fā)方法,其特征在于 所述隧道為通用路由封裝GRE協(xié)議隧道; 所述標識設(shè)置在GRE協(xié)議頭的保留字段中。
6. —種基于隧道的報文轉(zhuǎn)發(fā)方法,其特征在于,在解封裝路由器上執(zhí)行 如下步驟接收到隧道^艮文后,剝離掉傳輸協(xié)議頭和封裝協(xié)議頭,得到出隧道報文; 在根據(jù)所述封裝協(xié)議頭中的標識確定所述隧道報文為批量封裝報文時,將 所述出隧道報文拆分成至少二個乘客報文; 對所述至少二個乘客報文分別進行轉(zhuǎn)發(fā)。
7. —種路由器,其特征在于,包括捆綁模塊,用于對至少二個乘客報文進行捆綁后得到入隧道報文; 封裝模塊,用于對所述入隧道報文添加封裝協(xié)議頭和傳輸協(xié)議頭后生成隧 道報文,其中,所述封裝協(xié)議頭中設(shè)置有標識隧道報文為批量封裝報文的標識;第一轉(zhuǎn)發(fā)才莫塊,用于對所述隧道沖艮文進行轉(zhuǎn)發(fā)。
8. 如權(quán)利要求7所述的路由器,其特征在于 所述入隧道報文的長度不大于預(yù)設(shè)的長度門限。
9. 如權(quán)利要求8所述的路由器,其特征在于所述預(yù)設(shè)的長度門限為隧道傳輸路徑的最大傳輸單元MTU與封裝協(xié)議 頭長度和傳輸協(xié)議頭長度之和的差值。
10. 如權(quán)利要求8所述的路由器,其特征在于所述捆綁模塊進一步用于,在對上一個隧道報文轉(zhuǎn)發(fā)后的預(yù)設(shè)時間到期 后,若所述進行捆綁的至少二個乘客報文的長度之和還未達到所述預(yù)設(shè)的長度 門限,則結(jié)束所述捆綁。
11. 如權(quán)利要求7所述的路由器,其特征在于 所述隧道為通用路由封裝GRE協(xié)議隧道; 所述標識設(shè)置在GRE協(xié)議頭的保留字段中。
12. —種路由器,其特征在于,包括解封裝模塊,用于在接收到隧道報文后,剝離掉傳輸協(xié)議頭和封裝協(xié)議頭, 得到出隧道報文;拆分模塊,用于在根據(jù)所述封裝協(xié)議頭中的標識確定所述隧道報文為批量 封裝報文時,將所述出隧道報文拆分成至少二個乘客報文;第二轉(zhuǎn)發(fā)4莫塊,用于對所述至少二個乘客報文分別進行轉(zhuǎn)發(fā)。
全文摘要
本發(fā)明提供一種基于隧道的報文轉(zhuǎn)發(fā)方法及路由器。所述方法包括對至少二個乘客報文進行捆綁后得到入隧道報文;對所述入隧道報文添加封裝協(xié)議頭和傳輸協(xié)議頭后生成隧道報文,其中,所述封裝協(xié)議頭中設(shè)置有標識隧道報文為批量封裝報文的標識;對所述隧道報文進行轉(zhuǎn)發(fā)。依照本發(fā)明,能夠節(jié)省隧道傳輸路徑的帶寬占用,并提高隧道的報文轉(zhuǎn)發(fā)能力。
文檔編號H04L12/56GK101616081SQ20091008998
公開日2009年12月30日 申請日期2009年7月30日 優(yōu)先權(quán)日2009年7月30日
發(fā)明者王佩龍, 王文海 申請人:杭州華三通信技術(shù)有限公司