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