gre 协议介绍
通用路由封装协议gre(Generic Routing Encapsulation)可以对某些网络层协议(如ipx、ipv6、appleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如ipv4)中传输。
gre提供了将一种协议的报文封装在另一种协议报文中的机制,是一种三层隧道封装技术,使报文可以通过gre隧道透明的传输,本质上解决异种网络的传输问题。
gre 实现过程
51.jpg
- AR1 接口0 处收到pc1 发来的报文,由自己的ipv6 协议栈处理;
- AR1 根据收到的报文头中的目的地址,查找路由表,确定如何到达对端,如果发现出接口是tunnel 接口,那么协议栈需要对报文进行gre 头的封装;
- 根据网络中传输协议为ip,给报文加上ip头。ip头的源地址就是隧道源物理接口地址,目的地址就是隧道物理接口的目的地址。
- 报文封装完毕后,沿着公网物理线路传输,到达对端tunnel 接口后,于是去掉里面ip 头的封装交给gre 协议处理,gre 协议去掉之前封装的gre 头,获取原始报文中的ipv6协议,然后交由自己的ipv6 协议进行后续报文处理;
- AR2发现目的地址就在自己的右手边,直接将数据包从接口0发出去;
gre 报文格式及gre 头字段含义
报文格式
49.jpg
- 乘客协议:封装前的原始报文;
- 封装协议:gre 协议封装的header;
- 传输协议:对封装后的报文进行转发的协议;
gre 头字段含义
- C:校验和验证位, 1:gre头插入了校验和(Checksum)字段 2:gre 头不包含校验和字段;
- K:关键字位, 1:gre头插入了关键字(Key)字段,0:gre 头不包含关键字字段;
- Recursion:表示报文gre被封装的层数,完成一次gre封装后将该字段加1,如果封装层数大于3,则丢弃该报文;
- Flags:预留字段,当前必须置为0;
- Version:版本字段,必须置为0;
- Protocol Type:标识乘客协议的协议类型;
- Checksum:对gre头及其负载的校验和字段;
- Key:关键字字段,隧道接收端用于对收到的报文进行验证;
隧道接口
- gre隧道是通过隧道两端的tunnel接口建立的,所以需要在隧道两端的设备上分别配置tunnel接口。对于gre的tunnel接口,需要指定其协议类型为gre、源地址或源接口、目的地址和tunnel接口ip地址;
- tunnel
1.tunnel 接口:逻辑的虚拟接口;
2.tunnel接口源地址: 依赖的源物理接口地址;
3.tunnel接口目的地址:依赖的目的物理接口地址;
gre实验
ipv4 之间隧道
实验拓扑
46.jpg
实验配置
[AR1]:
[Huawei]interface Tunnel 0/0/1(创建tunnel端口)
[Huawei-Tunnel0/0/1]tunnel-protocol gre(设置tunnel 端口支持协议)
[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(创建tunnel端口)
[Huawei-Tunnel0/0/0]tunnel-protocol gre(设置tunnel 端口支持协议)
[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 (路由配置)
实验结果-pc1 ping pc2
47.jpg
- 1: 封装前报文协议ipv4,源ip:192.168.100.2,目的ip:10.10.10.2;
- 2: gre header,由隧道端口设置的gre 协议进行填充,称为封装协议;
48.jpg
- 3: 最终负责对封装后的报文进行转发的协议称为传输协议,依赖实际的两个物理口进行传输;
ipv6 to ipv4 之间隧道
实验拓扑
52.jpg
实验配置
[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
实验结果-pc1 ping pc2
- AR1 接口1封装后报文:
53.jpg
- AR2 接口1解封装后报文:
54.jpg
通过抓包,可以看到依赖ipv4 协议网络传输时,报文会通过实际的ipv4 传输协议进行封装, 到达对端后,会进行解封装,按照原始报文的ipv6 协议处理;
gre应用场景
- 针对不同本地协议的网络传输,实现两边网络互相通信;
- ip 协议有跳数的最大限制,通过设备之间建立隧道,隐藏跳数限制,扩大网络工作范围;










网友评论