gre 協(xié)議介紹
通用路由封裝協(xié)議gre(Generic Routing Encapsulation)可以對某些網(wǎng)絡層協(xié)議(如ipx、ipv6、appleTalk等)的數(shù)據(jù)報文進行封裝,使這些被封裝的數(shù)據(jù)報文能夠在另一個網(wǎng)絡層協(xié)議(如ipv4)中傳輸。
gre提供了將一種協(xié)議的報文封裝在另一種協(xié)議報文中的機制,是一種三層隧道封裝技術,使報文可以通過gre隧道透明的傳輸,本質(zhì)上解決異種網(wǎng)絡的傳輸問題。
gre 實現(xiàn)過程

- AR1 接口0 處收到pc1 發(fā)來的報文,由自己的ipv6 協(xié)議棧處理;
- AR1 根據(jù)收到的報文頭中的目的地址,查找路由表,確定如何到達對端,如果發(fā)現(xiàn)出接口是tunnel 接口,那么協(xié)議棧需要對報文進行gre 頭的封裝;
- 根據(jù)網(wǎng)絡中傳輸協(xié)議為ip,給報文加上ip頭。ip頭的源地址就是隧道源物理接口地址,目的地址就是隧道物理接口的目的地址。
- 報文封裝完畢后,沿著公網(wǎng)物理線路傳輸,到達對端tunnel 接口后,于是去掉里面ip 頭的封裝交給gre 協(xié)議處理,gre 協(xié)議去掉之前封裝的gre 頭,獲取原始報文中的ipv6協(xié)議,然后交由自己的ipv6 協(xié)議進行后續(xù)報文處理;
- AR2發(fā)現(xiàn)目的地址就在自己的右手邊,直接將數(shù)據(jù)包從接口0發(fā)出去;
gre 報文格式及gre 頭字段含義
報文格式

- 乘客協(xié)議:封裝前的原始報文;
- 封裝協(xié)議:gre 協(xié)議封裝的header;
- 傳輸協(xié)議:對封裝后的報文進行轉(zhuǎn)發(fā)的協(xié)議;
gre 頭字段含義
- C:校驗和驗證位, 1:gre頭插入了校驗和(Checksum)字段 2:gre 頭不包含校驗和字段;
- K:關鍵字位, 1:gre頭插入了關鍵字(Key)字段,0:gre 頭不包含關鍵字字段;
- Recursion:表示報文gre被封裝的層數(shù),完成一次gre封裝后將該字段加1,如果封裝層數(shù)大于3,則丟棄該報文;
- Flags:預留字段,當前必須置為0;
- Version:版本字段,必須置為0;
- Protocol Type:標識乘客協(xié)議的協(xié)議類型;
- Checksum:對gre頭及其負載的校驗和字段;
- Key:關鍵字字段,隧道接收端用于對收到的報文進行驗證;
隧道接口
- gre隧道是通過隧道兩端的tunnel接口建立的,所以需要在隧道兩端的設備上分別配置tunnel接口。對于gre的tunnel接口,需要指定其協(xié)議類型為gre、源地址或源接口、目的地址和tunnel接口ip地址;
- tunnel
1.tunnel 接口:邏輯的虛擬接口;
2.tunnel接口源地址: 依賴的源物理接口地址;
3.tunnel接口目的地址:依賴的目的物理接口地址;
keepalive檢測
- keepalive機制用于檢測鏈路狀態(tài),當遠端端口不可達,隧道需要及時關閉該tunnel連接,避免報文的丟失;
- 探測機制實現(xiàn)過程
源端會周期性發(fā)送keepalive探測報文給對端。若對端可達,則源端會收到對端的回應報文;否則,如果源端的計數(shù)器值到達預先設置的重試次數(shù)(Retry Times)時,還沒收到回送報文,就認為對端不可達。此時,源端將關閉隧道連接;
gre實驗
ipv4 之間隧道
實驗拓撲

實驗配置
[AR1]:
[Huawei]interface Tunnel 0/0/1(創(chuàng)建tunnel端口)
[Huawei-Tunnel0/0/1]tunnel-protocol gre(設置tunnel 端口支持協(xié)議)
[Huawei-Tunnel0/0/1]source GigabitEthernet 0/0/1(tunnel 端口依賴的源端口)
[Huawei-Tunnel0/0/1]destination 192.168.200.2 (tunnel 端口目的地址)
[Huawei-Tunnel0/0/1]ip address 192.168.210.1 24 (tunnel 端口配置ip)
[Huawei-Tunnel0/0/1]keepalive period 1 retry-times 3 (配置隧道兩端鏈路探測)
[Huawei]ip route-static 10.10.10.0 24 192.168.210.2 (路由配置)
[AR2]:
[Huawei]interface Tunnel 0/0/0(創(chuàng)建tunnel端口)
[Huawei-Tunnel0/0/0]tunnel-protocol gre(設置tunnel 端口支持協(xié)議)
[Huawei-Tunnel0/0/0]source GigabitEthernet 0/0/0(tunnel 端口依賴的源端口)
[Huawei-Tunnel0/0/0]destination 192.168.200.1 (tunnel 端口目的地址)
[Huawei-Tunnel0/0/0]ip address 192.168.210.2 24 (tunnel 端口配置ip)
[Huawei-Tunnel0/0/0]keepalive period 1 retry-times 3 (配置隧道兩端鏈路探測)
[Huawei]ip route-static 192.168.100.0 24 192.168.200.1 (路由配置)
實驗結(jié)果-pc1 ping pc2

- 1: 封裝前報文協(xié)議ipv4,源ip:192.168.100.2,目的ip:10.10.10.2;
- 2: gre header,由隧道端口設置的gre 協(xié)議進行填充,稱為封裝協(xié)議;

- 3: 最終負責對封裝后的報文進行轉(zhuǎn)發(fā)的協(xié)議稱為傳輸協(xié)議,依賴實際的兩個物理口進行傳輸;
ipv6 to ipv4 之間隧道
實驗拓撲

實驗配置
[AR1]
[Huawei]ipv6
[Huawei-GigabitEthernet0/0/0]ipv6 enable
[Huawei-GigabitEthernet0/0/0]ipv6 address fc00:1::1 64
[Huawei-GigabitEthernet0/0/1]ip address 20.1.1.1 24
[Huawei]interface Tunnel 0/0/1
[Huawei-Tunnel0/0/1]tunnel-protocol gre
[Huawei-Tunnel0/0/1]source GigabitEthernet 0/0/1
[Huawei-Tunnel0/0/1]destination 20.1.1.2
[Huawei]ipv6 route-static fc00:2::2 64 3001::2
[AR2]
[Huawei]ipv6
[Huawei]int GigabitEthernet 0/0/1
[Huawei-GigabitEthernet0/0/1]ipv6 enable
[Huawei-GigabitEthernet0/0/1]ipv6 address fc00:2::1 64
[Huawei-GigabitEthernet0/0/0]ip address 20.1.1.2 24
[Huawei]int Tunnel 0/0/1
[Huawei-Tunnel0/0/1]tunnel-protocol gre
[Huawei-Tunnel0/0/1]source GigabitEthernet 0/0/0
[Huawei-Tunnel0/0/1]destination 20.1.1.1
[Huawei]ipv6 route-static fc00:1::2 64 3001::1
實驗結(jié)果-pc1 ping pc2
- AR1 接口1封裝后報文:

- AR2 接口1解封裝后報文:

通過抓包,可以看到依賴ipv4 協(xié)議網(wǎng)絡傳輸時,報文會通過實際的ipv4 傳輸協(xié)議進行封裝, 到達對端后,會進行解封裝,按照原始報文的ipv6 協(xié)議處理;
gre應用場景
- 針對不同本地協(xié)議的網(wǎng)絡傳輸,實現(xiàn)兩邊網(wǎng)絡互相通信;
- ip 協(xié)議有跳數(shù)的最大限制,通過設備之間建立隧道,隱藏跳數(shù)限制,擴大網(wǎng)絡工作范圍;