GRE tunnel 2


1、GRE簡介

通用路由封裝協議GRE(Generic Routing Encapsulation)可以對某些網絡層協議(如IPX、ATM、IPv6、AppleTalk等)的數據報文進行封裝,使這些被封裝的數據報文能夠在另一個網絡層協議(如IPv4)中傳輸。

GRE提供了將一種協議的報文封裝在另一種協議報文中的機制,是一種三層隧道封裝技術,使報文可以通過GRE隧道透明的傳輸,解決異種網絡的傳輸問題。

GRE實現機制簡單,對隧道兩端的設備負擔小。GRE隧道可以通過IPv4網絡連通多種網絡協議的本地網絡,有效利用了原有的網絡架構,降低成本。GRE隧道擴展了跳數受限網絡協議的工作范圍,支持企業靈活設計網絡拓撲。GRE隧道可以封裝組播數據,和IPSec結合使用時可以保證語音、視頻等組播業務的安全。GRE隧道支持使能MPLS LDP,使用GRE隧道承載MPLS LDP報文,建立LDP LSP,實現MPLS骨干網的互通。GRE隧道將不連續的子網連接起來,用於組建VPN,實現企業總部和分支間安全的連接。

 

2、GRE實現過程

報文在GRE隧道中傳輸包括封裝和解封裝兩個過程。

 

圖1 通過GRE隧道實現X協議互通組網圖

如上圖1所示,如果X協議報文從Ingress PE向Egress PE傳輸,則封裝在Ingress PE上完成,而解封裝在Egress PE上進行。封裝后的數據報文在網絡中傳輸的路徑,稱為GRE隧道。

1、封裝

Ingress PE從連接X協議的接口接收到X協議報文后,首先交由X協議處理。

X協議根據報文頭中的目的地址在路由表或轉發表中查找出接口,確定如何轉發此報文。如果發現出接口是GRE Tunnel接口,則對報文進行GRE封裝,即添加GRE頭。

根據骨干網傳輸協議為IP,給報文加上IP頭。IP頭的源地址就是隧道源地址,目的地址就是隧道目的地址。

根據該IP頭的目的地址(即隧道目的地址),在骨干網路由表中查找相應的出接口並發送報文。之后,封裝后的報文將在該骨干網中傳輸。

2、解封裝

解封裝過程和封裝過程相反。

Egress PE從GRE Tunnel接口收到該報文,分析IP頭發現報文的目的地址為本設備,則Egress PE去掉IP頭后交給GRE協議處理。

GRE協議剝掉GRE報頭,獲取X協議,再交由X協議對此數據報文進行后續的轉發處理。

 

3、GRE報文格式

 

圖2 GRE報文結構

GRE封裝后的報文結構如上圖2所示。

1、乘客協議(Passenger Protocol):

封裝前的報文稱為凈荷,封裝前的報文協議稱為乘客協議。

2、封裝協議(Encapsulation Protocol):

GRE Header是由封裝協議完成並填充的,封裝協議也稱為運載協議(Carrier Protocol)。

3、傳輸協議(Transport Protocol或者Delivery Protocol):

負責對封裝后的報文進行轉發的協議稱為傳輸協議。

GRE頭的各字段解釋如下表1所示。

表1 GRE頭的各字段解釋

GRE頭字段

字段解釋

C

校驗和驗證位。

該位置1,表示GRE頭插入了校驗和(Checksum)字段。

該位置0,表示GRE頭不包含校驗和字段。

K

關鍵字位。

該位置1,表示GRE頭插入了關鍵字(Key)字段。

該位置0,表示GRE頭不包含關鍵字字段。

Recursion

表示GRE報文被封裝的層數。完成一次GRE封裝后將該字段加1。如果封裝層數大於3,則丟棄該報文。該字段的作用是防止報文被無限次的封裝。

RFC1701規定該字段默認值為0。

RFC2784規定當發送和接受端該字段不一致時不會引起異常,且接收端必須忽略該字段。

設備實現時該字段僅在加封裝報文時用作標記隧道嵌套層數,GRE解封裝報文時不感知該字段,不會影響報文的處理。

Flags

預留字段。當前必須置為0。

Version

版本字段。必須置為0。

Protocol Type

標識乘客協議的協議類型。常見的乘客協議為IPv4協議,協議代碼為0800。

Checksum

對GRE頭及其負載的校驗和字段。

Key

關鍵字字段,隧道接收端用於對收到的報文進行驗證。

因為目前實現的GRE頭不包含源路由字段,所以Bit 1、Bit 3和Bit 4都置為0。

 

4、GRE的安全機制

GRE本身提供兩種基本的安全機制:校驗和驗證,識別關鍵字。

1、校驗和驗證

校驗和驗證是指對封裝的報文進行端到端校驗。

若GRE報文頭中的C位標識位置1,則校驗和有效。發送方將根據GRE頭及Payload信息計算校驗和,並將包含校驗和的報文發送給對端。接收方對接收到的報文計算校驗和,並與報文中的校驗和比較,如果一致則對報文進一步處理,否則丟棄。

隧道兩端可以根據實際應用的需要決定配置校驗和或禁止校驗和。如果本端配置了校驗和而對端沒有配置,則本端將不會對接收到的報文進行校驗和檢查,但對發送的報文計算校驗和;相反,如果本端沒有配置校驗和而對端已配置,則本端將對從對端發來的報文進行校驗和檢查,但對發送的報文不計算校驗和。

2、識別關鍵字

識別關鍵字(Key)驗證是指對Tunnel接口進行校驗。通過這種弱安全機制,可以防止錯誤識別、接收其它地方來的報文。

RFC1701中規定:若GRE報文頭中的K位為1,則在GRE頭中插入一個四字節長關鍵字字段,收發雙方將進行識別關鍵字的驗證。

關鍵字的作用是標志隧道中的流量,屬於同一流量的報文使用相同的關鍵字。在報文解封裝時,GRE將基於關鍵字來識別屬於相同流量的數據報文。只有Tunnel兩端設置的識別關鍵字完全一致時才能通過驗證,否則將報文丟棄。這里的“完全一致”是指兩端都不設置識別關鍵字,或者兩端都設置相同的關鍵字。

 

5、GRE的Keepalive檢測

由於GRE協議並不具備檢測鏈路狀態的功能,如果對端接口不可達,隧道並不能及時關閉該Tunnel連接,這樣會造成源端會不斷的向對端轉發數據,而對端卻因隧道不通接收不到報文,由此就會形成數據空洞。

GRE的Keepalive檢測功能可以檢測隧道狀態,即檢測隧道對端是否可達。如果對端不可達,隧道連接就會及時關閉,避免因對端不可達而造成的數據丟失,有效防止數據空洞,保證數據傳輸的可靠性。

Keepalive檢測功能的實現過程如下:

當GRE隧道的源端使能Keepalive檢測功能后,就創建一個定時器,周期地發送Keepalive探測報文,同時通過計數器進行不可達計數。每發送一個探測報文,不可達計數加1。

對端每收到一個探測報文,就給源端發送一個回應報文。

如果源端的計數器值未達到預先設置的值就收到回應報文,就表明對端可達。如果源端的計數器值到達預先設置的值——重試次數(Retry Times)時,還沒收到回送報文,就認為對端不可達。此時,源端將關閉隧道連接。但是源端口仍會繼續發送Keepalive報文,若對端Up,則源端口也會Up,建立隧道鏈接。

對於設備實現的GRE Keepalive檢測功能,只要在隧道一端配置Keepalive,該端就具備Keepalive功能,而不要求隧道對端也具備該功能。隧道對端收到報文,如果是Keepalive探測報文,無論是否配置Keepalive,都會給源端發送一個回應報文。

華為通用路由封裝協議GRE介紹(二):http://www.023wg.com/vpn/391.html

  您閱讀這篇文章共花了: 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM