GRE(Generic Routing Encapsulation,通用路由封裝)協議是對某些網絡層協議(IPX, AppleTalk, IP,etc.)的數據報文進行封裝,使這些被封裝的數據報文能夠在另一個網絡層協議(如IP)中傳輸。這是GRE最初的定義,最新的GRE封裝規范,已經可以封裝二層數據幀了,如PPP幀、MPLS等。在RFC2784中,GRE的定義是“X over Y”,X和Y可以是任意的協議。GRE真的變成了“通用路由封裝”了。
GRE采用了Tunnel(隧道)技術,是VPN(Virtual Private Network)的第三層隧道協議。Tunnel是一個虛擬的點對點的連接,提供了一條通路使封裝的數據報文能夠在這個通路上傳輸,並且在一個Tunnel的兩端分別對數據報進行封裝及解封裝。
GRE加封裝過程如下:
1、Router A 收到X 協議報文后,首先交由X 協議處理
2、X 協議檢查報文頭中的目的地址域來確定如何路由此包
3、若報文的目的地址要經過Tunnel 才能到達,則設備將此報文發給相應的Tunnel 接口
4、Tunnel 口收到此報文后進行GRE 封裝,在封裝IP 報文頭后,設備根據此IP 包的目的地址及路由表對報文進行轉發,從相應的網絡接口發送出去。
5、Router A根據封裝的IP報文頭的目的地址,查找路由表,對封裝后的報文進行轉發。
GRE協議實際上是一種封裝協議,它提供了將一種協議的報文封裝在另一種協議報文中的機制,使報文能夠在異種網絡中傳輸。異種報文傳輸的通道稱為tunnel(隧道)。GRE隧道不能配置二層信息,但可以配置IP地址。GRE利用為隧道指定的實際物理接口完成轉發,轉發過程如下:
(1) 所有發往遠端VPN的原始報文,首先被發送到隧道源端;
(2) 原始報文在隧道源端進行GRE封裝,填寫隧道建立時確定的隧道源地址和目的地址,然后再通過公共IP網絡轉發到遠端VPN網絡。
GRE封裝后的報文格式:
圖1.GRE協議棧
圖2.GRE封裝格式
GRE解封裝過程:與加封裝過程相反
注:GRE收發雙方的加封裝、解封裝處理,以及由於封裝造成的數據量增加,會導致使用GRE后設備的數據轉發效率有一定程度的下降。
總結起來,GRE的封裝過程如下:當報文需要經由隧道接口處理時,IP層的輸出函數調用tunnel接口的輸出函數進行加封裝處理。加封裝處理結束后,再進行IP轉發。GRE隧道對端的解封裝過程如下:當IP層接收到GRE報文,檢查到外層IP報文頭部中的協議號是47時(UDP為17,TCP為6,ICMP為1),那么,IP層輸入入口函數會根據協議開關表,直接調用GRE的解封裝處理函數,對GRE解封裝。解封裝完成后,再將原始數據報文送入IP輸入隊列中,以便進行進一步的傳輸。
轉自:http://www.pbsvpn.com/article/20150330110849.html
參考:http://baike.baidu.com/view/3871502.htm#3