產(chǎn)品分類(lèi)+
詳解GRE協(xié)議
GRE詳解
GRE定義:
通用路由封裝協(xié)議GRE(Generic Routing Encapsulation)可以對(duì)某些網(wǎng)絡(luò)層協(xié)議(如IPX、ATM、IPv6、AppleTalk等)的數(shù)據(jù)報(bào)文進(jìn)行封裝,使這些被封裝的數(shù)據(jù)報(bào)文能夠在另一個(gè)網(wǎng)絡(luò)層協(xié)議(如IPv4)中傳輸。
GRE提供了將一種協(xié)議的報(bào)文封裝在另一種協(xié)議報(bào)文中的機(jī)制,是一種三層隧道封裝技術(shù),使報(bào)文可以通過(guò)GRE隧道透明的傳輸,解決異種網(wǎng)絡(luò)的傳輸問(wèn)題。
GRE的優(yōu)點(diǎn)
?GRE實(shí)現(xiàn)機(jī)制簡(jiǎn)單,對(duì)隧道兩端的設(shè)備負(fù)擔(dān)小。
?GRE隧道可以通過(guò)IPv4網(wǎng)絡(luò)連通多種網(wǎng)絡(luò)協(xié)議的本地網(wǎng)絡(luò),有效利用了原有的網(wǎng)絡(luò)架構(gòu),降低成本。
?GRE隧道擴(kuò)展了跳數(shù)受限網(wǎng)絡(luò)協(xié)議的工作范圍,支持企業(yè)靈活設(shè)計(jì)網(wǎng)絡(luò)拓?fù)洹?/span>
?GRE隧道可以封裝組播數(shù)據(jù),和IPSec結(jié)合使用時(shí)可以保證語(yǔ)音、視頻等組播業(yè)務(wù)的安全。
?GRE隧道支持使能MPLS LDP,使用GRE隧道承載MPLS LDP報(bào)文,建立LDP LSP,實(shí)現(xiàn)MPLS骨干網(wǎng)的互通。
?GRE隧道將不連續(xù)的子網(wǎng)連接起來(lái),用于組建VPN,實(shí)現(xiàn)企業(yè)總部和分支間安全的連接。
基本原理
實(shí)現(xiàn)過(guò)程
報(bào)文在GRE隧道中傳輸包括封裝和解封裝兩個(gè)過(guò)程。如圖1所示,如果X協(xié)議報(bào)文從Ingress PE向Egress PE傳輸,則封裝在Ingress PE上完成,而解封裝在Egress PE上進(jìn)行。封裝后的數(shù)據(jù)報(bào)文在網(wǎng)絡(luò)中傳輸?shù)穆窂?,稱(chēng)為GRE隧道。
通過(guò)GRE隧道實(shí)現(xiàn)X協(xié)議互通組網(wǎng)圖
?封裝
1.Ingress PE從連接X(jué)協(xié)議網(wǎng)絡(luò)的接口接收到X協(xié)議報(bào)文后,首先交由X協(xié)議處理。
2.X協(xié)議根據(jù)報(bào)文頭中的目的地址在路由表或轉(zhuǎn)發(fā)表中查找出接口,確定如何轉(zhuǎn)發(fā)此報(bào)文。如果發(fā)現(xiàn)出接口是GRE Tunnel接口,則對(duì)報(bào)文進(jìn)行GRE封裝,即添加GRE頭。
3.根據(jù)骨干網(wǎng)傳輸協(xié)議為IP,給報(bào)文加上IP頭。IP頭的源地址就是隧道源地址,目的地址就是隧道目的地址。
4.根據(jù)該IP頭的目的地址(即隧道目的地址),在骨干網(wǎng)路由表中查找相應(yīng)的出接口并發(fā)送報(bào)文。之后,封裝后的報(bào)文將在該骨干網(wǎng)中傳輸。
?解封裝
解封裝過(guò)程和封裝過(guò)程相反。
1.Egress PE從GRE Tunnel接口收到該報(bào)文,分析IP頭發(fā)現(xiàn)報(bào)文的目的地址為本設(shè)備,則Egress PE去掉IP頭后交給GRE協(xié)議處理。
2.GRE協(xié)議剝掉GRE報(bào)頭,獲取X協(xié)議報(bào)文,再交由X協(xié)議對(duì)此數(shù)據(jù)報(bào)文進(jìn)行后續(xù)的轉(zhuǎn)發(fā)處理。
報(bào)文格式
GRE封裝后的報(bào)文格式如圖2所示。
?乘客協(xié)議(Passenger Protocol):封裝前的報(bào)文稱(chēng)為凈荷,封裝前的報(bào)文協(xié)議稱(chēng)為乘客協(xié)議。
?封裝協(xié)議(Encapsulation Protocol):GRE Header是由封裝協(xié)議完成并填充的,封裝協(xié)議也稱(chēng)為運(yùn)載協(xié)議(Carrier Protocol)。
?傳輸協(xié)議(Transport Protocol或者Delivery Protocol):負(fù)責(zé)對(duì)封裝后的報(bào)文進(jìn)行轉(zhuǎn)發(fā)的協(xié)議稱(chēng)為傳輸協(xié)議。
GRE頭的各字段解釋如下所示。
表1 GRE頭的各字段解釋
GRE頭字段
字段解釋
C
校驗(yàn)和驗(yàn)證位。?該位置1,表示GRE頭插入了校驗(yàn)和(Checksum)字段。
?該位置0,表示GRE頭不包含校驗(yàn)和字段。
K
關(guān)鍵字位。?該位置1,表示GRE頭插入了關(guān)鍵字(Key)字段。
?該位置0,表示GRE頭不包含關(guān)鍵字字段。
Recursion
表示GRE報(bào)文被封裝的層數(shù)。完成一次GRE封裝后將該字段加1。如果封裝層數(shù)大于3,則丟棄該報(bào)文。該字段的作用是防止報(bào)文被無(wú)限次的封裝。
說(shuō)明:
?RFC1701規(guī)定該字段默認(rèn)值為0。
?RFC2784規(guī)定當(dāng)發(fā)送和接收端該字段不一致時(shí)不會(huì)引起異常,且接收端必須忽略該字段。
?設(shè)備實(shí)現(xiàn)時(shí)該字段僅在加封裝報(bào)文時(shí)用作標(biāo)記隧道嵌套層數(shù),GRE解封裝報(bào)文時(shí)不感知該字段,不會(huì)影響報(bào)文的處理。
Flags
預(yù)留字段。當(dāng)前必須置為0。
Version
版本字段。必須置為0。
Protocol Type
標(biāo)識(shí)乘客協(xié)議的協(xié)議類(lèi)型。常見(jiàn)的乘客協(xié)議為IPv4協(xié)議,協(xié)議代碼為0800。
Ethernet over GRE協(xié)議的協(xié)議代碼為0x6558。
Checksum
對(duì)GRE頭及其負(fù)載的校驗(yàn)和字段。
Key
關(guān)鍵字字段,隧道接收端用于對(duì)收到的報(bào)文進(jìn)行驗(yàn)證。
GRE的安全機(jī)制
GRE本身提供兩種基本的安全機(jī)制:
?校驗(yàn)和驗(yàn)證
?識(shí)別關(guān)鍵字
GRE的安全機(jī)制
校驗(yàn)和驗(yàn)證
校驗(yàn)和驗(yàn)證是指對(duì)封裝的報(bào)文進(jìn)行端到端校驗(yàn)。
若GRE報(bào)文頭中的C位標(biāo)識(shí)位置1,則校驗(yàn)和有效。發(fā)送方將根據(jù)GRE頭及Payload信息計(jì)算校驗(yàn)和,并將包含校驗(yàn)和的報(bào)文發(fā)送給對(duì)端。接收方對(duì)接收到的報(bào)文計(jì)算校驗(yàn)和,并與報(bào)文中的校驗(yàn)和比較,如果一致則對(duì)報(bào)文進(jìn)一步處理,否則丟棄。
隧道兩端可以根據(jù)實(shí)際應(yīng)用的需要決定配置校驗(yàn)和或禁止校驗(yàn)和。如果本端配置了校驗(yàn)和而對(duì)端沒(méi)有配置,則本端將不會(huì)對(duì)接收到的報(bào)文進(jìn)行校驗(yàn)和檢查,但對(duì)發(fā)送的報(bào)文計(jì)算校驗(yàn)和;相反,如果本端沒(méi)有配置校驗(yàn)和而對(duì)端已配置,則本端將對(duì)從對(duì)端發(fā)來(lái)的報(bào)文進(jìn)行校驗(yàn)和檢查,但對(duì)發(fā)送的報(bào)文不計(jì)算校驗(yàn)和。
識(shí)別關(guān)鍵字
識(shí)別關(guān)鍵字(Key)驗(yàn)證是指對(duì)Tunnel接口進(jìn)行校驗(yàn)。通過(guò)這種弱安全機(jī)制,可以防止錯(cuò)誤識(shí)別、接收其它地方來(lái)的報(bào)文。
RFC1701中規(guī)定:若GRE報(bào)文頭中的K位為1,則在GRE頭中插入一個(gè)四字節(jié)長(zhǎng)關(guān)鍵字字段,收發(fā)雙方將進(jìn)行識(shí)別關(guān)鍵字的驗(yàn)證。
關(guān)鍵字的作用是標(biāo)志隧道中的流量,屬于同一流量的報(bào)文使用相同的關(guān)鍵字。在報(bào)文解封裝時(shí),GRE將基于關(guān)鍵字來(lái)識(shí)別屬于相同流量的數(shù)據(jù)報(bào)文。只有Tunnel兩端設(shè)置的識(shí)別關(guān)鍵字完全一致時(shí)才能通過(guò)驗(yàn)證,否則將報(bào)文丟棄。這里的“完全一致”是指兩端都不設(shè)置識(shí)別關(guān)鍵字,或者兩端都設(shè)置相同的關(guān)鍵字。
GRE的keepalive檢測(cè)
由于GRE協(xié)議并不具備檢測(cè)鏈路狀態(tài)的功能,如果對(duì)端接口不可達(dá),隧道并不能及時(shí)關(guān)閉該Tunnel連接,這樣會(huì)造成源端會(huì)不斷的向?qū)Χ宿D(zhuǎn)發(fā)數(shù)據(jù),而對(duì)端卻因隧道不通接收不到報(bào)文,由此就會(huì)形成數(shù)據(jù)空洞。
GRE的Keepalive檢測(cè)功能可以檢測(cè)隧道狀態(tài),即檢測(cè)隧道對(duì)端是否可達(dá)。如果對(duì)端不可達(dá),隧道連接就會(huì)及時(shí)關(guān)閉,避免因?qū)Χ瞬豢蛇_(dá)而造成的數(shù)據(jù)丟失,有效防止數(shù)據(jù)空洞,保證數(shù)據(jù)傳輸?shù)目煽啃浴?/span>
Keepalive檢測(cè)功能的實(shí)現(xiàn)過(guò)程如下:
1.當(dāng)GRE隧道的源端使能Keepalive檢測(cè)功能后,就創(chuàng)建一個(gè)定時(shí)器,周期地發(fā)送Keepalive探測(cè)報(bào)文,同時(shí)通過(guò)計(jì)數(shù)器進(jìn)行不可達(dá)計(jì)數(shù)。每發(fā)送一個(gè)探測(cè)報(bào)文,不可達(dá)計(jì)數(shù)加1。
2.對(duì)端每收到一個(gè)探測(cè)報(bào)文,就給源端發(fā)送一個(gè)回應(yīng)報(bào)文。
3.如果源端的計(jì)數(shù)器值未達(dá)到預(yù)先設(shè)置的值就收到回應(yīng)報(bào)文,就表明對(duì)端可達(dá)。如果源端的計(jì)數(shù)器值到達(dá)預(yù)先設(shè)置的值——重試次數(shù)(Retry Times)時(shí),還沒(méi)收到回送報(bào)文,就認(rèn)為對(duì)端不可達(dá)。此時(shí),源端將關(guān)閉隧道連接。但是源端口仍會(huì)繼續(xù)發(fā)送Keepalive報(bào)文,若對(duì)端Up,則源端口也會(huì)Up,建立隧道鏈接。
說(shuō)明: (對(duì)于設(shè)備實(shí)現(xiàn)的GRE Keepalive檢測(cè)功能,只要在隧道一端配置Keepalive,該端就具備Keepalive功能,而不要求隧道對(duì)端也具備該功能。隧道對(duì)端收到報(bào)文,如果是Keepalive探測(cè)報(bào)文,無(wú)論是否配置Keepalive,都會(huì)給源端發(fā)送一個(gè)回應(yīng)報(bào)文。)
Ethernet over GRE
Ethernet over GRE
通用路由封裝協(xié)議GRE(Generic Routing Encapsulation)提供了將一種協(xié)議報(bào)文封裝在另一種協(xié)議報(bào)文中的機(jī)制,使報(bào)文能夠在異種網(wǎng)絡(luò)中傳輸,這種在異種網(wǎng)絡(luò)中傳輸報(bào)文的通道稱(chēng)為隧道(Tunnel)。
目前,GRE隧道可以通過(guò)兩種隧道接口建立:
?GRE隧道接口
GRE隧道接口是為實(shí)現(xiàn)報(bào)文的封裝而提供的一種點(diǎn)對(duì)點(diǎn)類(lèi)型的邏輯接口,包含源地址、目的地址和隧道接口IP地址。
?mGRE隧道接口
mGRE隧道接口是為實(shí)現(xiàn)DSVPN而提供的一種點(diǎn)到多點(diǎn)類(lèi)型的邏輯接口,包含源地址、目的地址和隧道接口IP地址。
與GRE隧道接口手工指定目的地址不同,mGRE隧道接口的目的地址來(lái)自于NHRP地址解析協(xié)議,一個(gè)mGRE隧道接口上,可以存在多條GRE隧道,有多個(gè)GRE對(duì)端。
如圖1所示,分支與總部的網(wǎng)絡(luò)都是以太網(wǎng)絡(luò),分支與總部之間通過(guò)IP骨干網(wǎng)相連,如果用戶(hù)希望分支與總部之間能夠互通,可以部署Ethernet over GRE功能,實(shí)現(xiàn)以太報(bào)文通過(guò)GRE隧道進(jìn)行透?jìng)鳌?/span>
Ethernet over GRE是將以太網(wǎng)協(xié)議的報(bào)文通過(guò)GRE封裝后,在另一個(gè)網(wǎng)絡(luò)層協(xié)議(如IPv4)的網(wǎng)絡(luò)中傳輸,具體工作原理如下:
1.在設(shè)備LAN側(cè)的物理以太網(wǎng)接口GE2/0/0上綁定二層VE接口VE0/0/2,在設(shè)備WAN側(cè)的Tunnel接口Tunnel0/0/1上綁定二層VE接口VE0/0/1。
2.Router_1的LAN側(cè)物理以太網(wǎng)接口GE2/0/0收到分支網(wǎng)絡(luò)的以太報(bào)文,以太報(bào)文中攜帶了VLAN Tag信息。
3.GE2/0/0收到的以太報(bào)文轉(zhuǎn)發(fā)到VE0/0/2后,在VE0/0/2上進(jìn)行入接口VLAN處理,然后在設(shè)備內(nèi)基于MAC和VLAN進(jìn)行二層轉(zhuǎn)發(fā),找到出接口VE0/0/1。
4.以太報(bào)文在VE0/0/1上進(jìn)行出接口VLAN處理后,將轉(zhuǎn)發(fā)到VE0/0/1綁定的Tunnel0/0/1接口,經(jīng)過(guò)GRE封裝(協(xié)議代碼為0x6558)后,進(jìn)行后續(xù)的GRE轉(zhuǎn)發(fā)處理。
5.Router_2的Tunnel0/0/1接口上對(duì)收到的報(bào)文進(jìn)行GRE解封裝,檢查到協(xié)議代碼為0x6558后,將以太報(bào)文轉(zhuǎn)發(fā)給入接口VE0/0/1。
6.在VE0/0/1上進(jìn)行入接口VLAN處理后,二層轉(zhuǎn)發(fā)給VE0/0/2進(jìn)行出接口VLAN處理。
7.以太報(bào)文中攜帶新的VLAN Tag信息從出接口GE2/0/0發(fā)往總部網(wǎng)絡(luò)。
下面我們舉個(gè)配置GRE的例子
配置GRE通過(guò)OSPF實(shí)現(xiàn)IPv4協(xié)議互通示例
組網(wǎng)拓?fù)?/span>