通用路由封裝

通用路由封裝

通用路由封裝,定義了在任意一種網路層協議上封裝任意一個其它網路層協議的協議。

通用路由封裝


(GRE: Generic Routing Encapsulation)
通用路由封裝(GRE)定義了在任意一種網路層協議上封裝任意一個其它網路層協議的協議。
在大多數常規情況下,系統擁有一個有效載荷(或負載)包,需要將它封裝併發送至某個目的地。首先將有效載荷封裝在一個GRE 包中,然後將此GRE 包封裝在其它某協議中並進行轉發。此外發協議即為發送協議。當IPv4 被作為GRE 有效載荷傳輸時,協議類型欄位必須被設置為0x800。當一個隧道終點拆封此含有 IPv4 包作為有效載荷的GRE 包時,IPv4 包頭中的目的地址必須用來轉發包,並且需要減少有效載荷包的TTL。值得注意的是,在轉發這樣一個包時,如果有效載荷包的目的地址就是包的封裝器(也就是隧道另一端),就會出現迴路現象。在此情形下,必須丟棄該包。當 GRE 包被封裝在IPv4 中時,需要使用IPv4 協議47。
GRE 下的網路安全與常規的IPv4 網路安全是較為相似的,GRE 下的路由採用IPv4 原本使用的路由,但路由過濾保持不變。包過濾要求防火牆檢查 GRE 包,或者在GRE 隧道終點完成過濾過程。在那些這被看作是安全問題的環境下,可以在防火牆上終止隧道。

GRE簡介


GRE(Generic Routing Encapsulation,通用路由封裝)協議是對某些網路層協議(如IP 和IPX)的數據報文進行封裝,使這些被封裝的數據報文能夠在另一個網路層協議(如IP)中傳輸。GRE採用了Tunnel(隧道)技術,是VPN(Virtual Private Network)的第三層隧道協議。
Tunnel 是一個虛擬的點對點的連接,提供了一條通路使封裝的數據報文能夠在這個通路上傳輸,並且在一個Tunnel 的兩端分別對數據報進行封裝及解封裝。一個X協議的報文要想穿越IP網路在Tunnel中傳輸,必須要經過加封裝與解封裝兩個過程:
加封裝過程
1、 Router A 連接Group 1 的介面收到X 協議報文後,首先交由X 協議處理
2、X 協議檢查報文頭中的目的地址域來確定如何路由此包
3、若報文的目的地址要經過Tunnel 才能到達,則設備將此報文發給相應的Tunnel 介面
4、 Tunnel 口收到此報文後進行GRE 封裝,在封裝IP 報文頭后,設備根據此IP 包的目的地址及路由表對報文進行轉發,從相應的網路介面發送出去。
GRE 封裝后的報文格式
GRE 封裝后的報文格式為:
[Delivery header(Transport protocol)]——[GRE header(Fncapsulation protocol)]——[Payload header(Passenger potrocol)]
需要封裝和傳輸的數據報文,稱之為凈荷(Payload),凈荷的協議類型為乘客協議(Passenger Protocol)。系統收到一個凈荷后,首先使用封裝協議(Encapsulation Protocol)對這個凈荷進行GRE 封裝,即把乘客協議報文進行了“包裝”,加上了一個GRE 頭部成為GRE 報文;然後再把封裝好的原始報文和GRE 頭部封裝在IP 報文中,這樣就可完全由IP 層負責此報文的前向轉發(Forwarding)。通常把這個負責前向轉發的IP 協議稱為傳輸協議(Delivery Protocol 或者Transport Protocol)。
根據傳輸協議的不同,可以分為GRE over IPv4 和GRE over IPv6 兩種隧道模式。
解封裝的過程
解封裝過程和加封裝的過程相反。
1、 RouterB 從Tunnel 介面收到IP 報文,檢查目的地址
2、如果發現目的地是本路由器,則RouterB 剝掉此報文的IP 報頭,交給GRE 協議處理(進行檢驗密鑰、檢查校驗和及報文的序列號等)
3、 GRE 協議完成相應的處理后,剝掉GRE 報頭,再交由X 協議對此數據報進行後續的轉發處理。
說明:GRE 收發雙方的加封裝、解封裝處理,以及由於封裝造成的數據量增加,會導致使用GRE 後設備的數據轉發效率有一定程度的下降。