【理论基础】

需要封装和传输的数据报文,称之为净荷(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协议对此数据报进行后续的转发处理。