gre数据包格式分析
GRE 数据包格式分析
GRE 简介
GRE (Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX )的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP )中传输。GRE 采用了Tunnel (隧道)技术,是VPN (Virtual Private Network)的第三层隧道协议。当 GRE 包被封装在IPv4 中时,需要使用IPv4 协议47。
图1
Tunnel 是一个虚拟的点对点的连接,提供了一条通路使封装的数据报文能够在这个通路上传输,并且在一个Tunnel 的两端分别对数据报进行封装及解封装。 一个X 协议的报文要想穿越IP 网络在Tunnel 中传输,必须要经过加封装与解封装两个过程:
加封装过程
1、 Router A 连接Group 1 的接口收到X 协议报文后,首先交由X 协议处理
2、X 协议检查报文头中的目的地址域来确定如何路由此包
3、 若报文的目的地址要经过Tunnel 才能到达,则设备将此报文发给相应的Tunnel 接口
4、 Tunnel 口收到此报文后进行GRE 封装,在封装IP 报文头后,设备根据此IP 包的目的地址及路由表对报文进行转发,从相应的网络接口发送出去。
GRE 封装后的报文格式
GRE 封装后的报文格式为:(如图2)
[Delivery header(Transport protocol)]——[GRE header(Fncapsulation protocol)]——
[Payload header(Passenger potrocol)]
图2
需要封装和传输的数据报文,称之为净荷(Payload ),净荷的协议类型为乘客协议(Passenger Protocol)。系统收到一个净荷后,首先使用封装协议(Encapsulation Protocol)对这个净荷进行GRE 封装,即把乘客协议报文进行了“包装”,加上了一个GRE 头部成为GRE 报文;然后再把封装好的原始报文和GRE 头部封装在IP 报文中,这样就可完全由IP 层负责此报文的前向转发(Forwarding )。通常把这个负责前向转发的IP 协议称为传输协议(Delivery Protocol 或者Transport Protocol)。
根据传输协议的不同,可以分为GRE over IPv4 和GRE over IPv6 两种隧道模式。
解封装的过程
解封装过程和加封装的过程相反。
1、 RouterB 从Tunnel 接口收到IP 报文,检查目的地址
2、 如果发现目的地是本路由器,则RouterB 剥掉此报文的IP 报头,交给GRE 协议处理(进行检验密钥、检查校验和及报文的序列号等)
3、 GRE 协议完成相应的处理后,剥掉GRE 报头,再交由X 协议对此数据报进行后续的转发处理。
说明:GRE 收发双方的加封装、解封装处理,以及由于封装造成的数据量增加,会导致使用GRE 后设备的数据转发效率有一定程度的下降。(如图3)
图3