基本原理
实现过程
报文在GRE隧道中传输包括封装和解封装两个过程。如图1-1所示,如果X协议报文从Ingress PE向Egress PE传输,则封装在Ingress PE上完成,而解封装在Egress PE上进行。封装后的数据报文在网络中传输的路径,称为GRE隧道。
封装
Ingress PE从连接X协议的接口接收到X协议报文后,首先交由X协议处理。
X协议根据报文头中的目的地址在路由表或转发表中查找出接口,确定如何转发此报文。如果发现出接口是GRE Tunnel接口,则对报文进行GRE封装,即添加GRE头。
根据骨干网传输协议为IP,给报文加上IP头。IP头的源地址就是隧道源地址,目的地址就是隧道目的地址。
根据该IP头的目的地址(即隧道目的地址),在骨干网路由表中查找相应的出接口并发送报文。之后,封装后的报文将在该骨干网中传输。
关于封装后详细的报文格式,请参见报文格式。
解封装
解封装过程和封装过程相反。
Egress PE从GRE Tunnel接口收到该报文,分析IP头发现报文的目的地址为本设备,则Egress PE去掉IP头后交给GRE协议处理。
GRE协议剥掉GRE报头,获取X协议,再交由X协议对此数据报文进行后续的转发处理。
报文格式
乘客协议(Passenger Protocol):封装前的报文称为净荷,封装前的报文协议称为乘客协议。
封装协议(Encapsulation Protocol):GRE Header是由封装协议完成并填充的,封装协议也称为运载协议(Carrier Protocol)。
传输协议(Transport Protocol或者Delivery Protocol):负责对封装后的报文进行转发的协议称为传输协议。
GRE头的各字段解释如表1-1所示。
GRE头字段 |
字段解释 |
---|---|
C |
校验和验证位。
|
K |
关键字位。
|
Recursion |
表示GRE报文被封装的层数。完成一次GRE封装后将该字段加1。如果封装层数大于3,则丢弃该报文。该字段的作用是防止报文被无限次的封装。 说明:
|
Flags |
预留字段。当前必须置为0。 |
Version |
版本字段。必须置为0。 |
Protocol Type |
标识乘客协议的协议类型。常见的乘客协议为IPv4协议,协议代码为0800。 |
Checksum |
对GRE头及其负载的校验和字段。 |
Key |
关键字字段,隧道接收端用于对收到的报文进行验证。 |
因为目前实现的GRE头不包含源路由字段,所以Bit 1、Bit 3和Bit 4都置为0。