【理论基础】
需要封装和传输的数据报文,称之为净荷(Payload),净荷的协议类型为乘客协议(Passenger Protocol)。系统收到一个净荷后,首先使用封装协议(Encapsulation Protocol)对这个净荷进行GRE封装,即把乘客协议报文进行了“包装”,加上了一个GRE头部成为GRE报文;然后再把封装好的原始报文和GRE头部封装在IP报文中,这样就可完全由IP层负责此报文的前向转发(Forwarding)。通常把这个负责前向转发的IP协议称为传输协议(Delivery Protocol或者Transport Protocol)。
根据传输协议的不同,可以分为GRE over IPv4和GRE over IPv6两种隧道模式。
后面会从数据包角度分析整个封装过程。
【拓扑和软件】
本文实验采用的交换机是H3C模拟器,下载地址如下: http://forum.h3c.com/forum.php? mod=viewthread&tid=109740&highlight=H3C%E6%A8%A1%E6% 8B%9F%E5%99%A8 有兴趣的朋 友可以在论坛上去下载
【组网需求】
R1和R2之间假设通过Internet连接,两台路由器之间使用GRE建立隧道互联。
【配置脚本】
R1:
#
interface Serial0/6/0
link-protocol ppp
ip address 1.1.1.1 255.255.255.0
#
interface LoopBack0
ip address 172.16.1.1 255.255.255.255
#
interface Tunnel0
ip address 10.1.1.1 255.255.255.0
source 1.1.1.1
destination 2.2.2.2
#
ip route-static 0.0.0.0 0.0.0.0 Tunnel0
#
R2:
#
interface Serial0/6/0
link-protocol ppp
ip address 2.2.2.2 255.255.255.0
#
interface LoopBack0
ip address 172.16.2.1 255.255.255.255
interface Tunnel0
ip address 10.1.1.2 255.255.255.0
source 2.2.2.2
destination 1.1.1.1
#
ip route-static 0.0.0.0 0.0.0.0 Tunnel0
#
【验证】
<R2>dis interface tu
<R2>dis interface Tunnel 0
Tunnel0 current state: UP
Line protocol current state: UP
Description: Tunnel0 Interface
The Maximum Transmit Unit is 1476
Internet Address is 10.1.1.2/24 Primary
Encapsulation is TUNNEL, aggregation ID not set
Tunnel source 2.2.2.2, destination 1.1.1.1
Tunnel keepalive disable
Tunnel protocol/transport GRE/IP
GRE key disabled
Checksumming of GRE packets disabled
Last 300 seconds input: 0 bytes/sec, 0 packets/sec
Last 300 seconds output: 0 bytes/sec, 0 packets/sec
0 packets input, 0 bytes
0 input error
0 packets output, 0 bytes
0 output error
<R2>ping 172.16.1.1
PING 172.16.1.1: 56 data bytes, press CTRL_C to break
Reply from 172.16.1.1: bytes=56 Sequence=1 ttl=255 time=4 ms
Reply from 172.16.1.1: bytes=56 Sequence=2 ttl=255 time=25 ms
Reply from 172.16.1.1: bytes=56 Sequence=3 ttl=255 time=15 ms
Reply from 172.16.1.1: bytes=56 Sequence=4 ttl=255 time=26 ms
Reply from 172.16.1.1: bytes=56 Sequence=5 ttl=255 time=4 ms
--- 172.16.1.1 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 4/14/26 ms
<R2>dis interface Tunnel 0
Tunnel0 current state: UP
Line protocol current state: UP
Description: Tunnel0 Interface
The Maximum Transmit Unit is 1476
Internet Address is 10.1.1.2/24 Primary
Encapsulation is TUNNEL, aggregation ID not set
Tunnel source 2.2.2.2, destination 1.1.1.1
Tunnel keepalive disable
Tunnel protocol/transport GRE/IP
GRE key disabled
Checksumming of GRE packets disabled
Last 300 seconds input: 0 bytes/sec, 0 packets/sec
Last 300 seconds output: 0 bytes/sec, 0 packets/sec
5 packets input, 420 bytes
0 input error
5 packets output, 420 bytes
0 output error
<R2>
实验完成。
从172.168.2.1 ping 172.168.1.1
加封装过程
R1的接口loopback 0 收到172.168.2.1 ipv4协议报文后,首先交由IPV4协议处理;
ipv4协议检查报文头中的目的地址域来确定如何路由此包;
此时检查报文的目的地址要经过Tunnel才能到达,则设备将此报文发给相应的Tunnel接口;
Tunnel接口收到此报文后进行GRE封装,在封装IP报文头后,设备根据此IP包的目的地址及路由表对报文进行转发,从相应的网络接口S0/6/0发送出去。
解封装的过程
解封装过程和加封装的过程相反。
R2从Tunnel接口收到IP报文,检查目的地址;
如果发现目的地是本路由器,则Ro2掉此报文的IP报头,交给GRE协议处理(进行检验密钥、检查校验和及报文的序列号等);
GRE协议完成相应的处理后,剥掉GRE报头,再交由IPV4协议对此数据报进行后续的转发处理。