隧道技术 Tunneling
网络隧道技术(Tunneling)指的是利用一种网络协议来传输另一种网络协议,它主要利用网络隧道协议来实现这种功能。
简单来说,使用隧道技术可以理解为,在一些网络链路中使用汽车运输载荷,在一些网络链路中使用渡轮运输载荷,汽车无法行驶在水上,但是可以把整个汽车封装在轮渡中进行运输。
例如如上图所示,某网络拓扑分布在北京Region和上海Region,可以使用隧道技术将物理上不连续的子网连接起来。
Tunnel是一个虚拟的点对点的连接,在实际中可以看成仅支持点对点连接的虚拟接口,这个接口提供了一条通道使封装的数据报能够在这个通路上传输,并在一个Tunnel的两端分别对数据报进行封装及解封装 。
隧道协议主要有两种,分别实现在OSI模型的第二层和第三层。
- 二层隧道协议对应OSI模型中数据链路层,使用帧作为数据交换单位,是将数据封装在点对点协议的帧中通过互联网络发送,PPTP、L2TP、L2F都属于二层隧道协议
- 三层隧道协议对应OSI模型中网络层,使用包作为数据交换单位,是数据包封装在附加的IP包头中通过IP网络传送,GRE、IPSec、GRE都属于三层隧道协议
通用路由封装协议GRE
如上文中提到的,GRE隧道是一种三层隧道封装技术,可以对报文进行再封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输。
特点
- GRE报头包含一个协议类型字段,因此可通过隧道传输任意第3层协议的数据
- 无状态,没有流量控制机制
- 不提供安全机制
报文封装
封装方式:增加新的IP(外网IP)头,其后是ipsec包头,之后再将原来的整个数据包封装。
字段 | 含义 |
C | 校验和标志位 |
R | 路由标志位 |
K | 密钥标志位 |
S | 序列号同步标志位 |
s | 严格源路由标志位 |
递归控制 | 置0 |
标志位 | 置0 |
版本 | 置0 |
协议类型 | 封装的协议,如08000代表IP协议 |
封装过程
GRE封装报文时,封装前的报文称为净荷,封装前的报文协议称为乘客协议,然后先封装GRE头部,GRE成为封装协议,也叫运载协议,最后负责对封装后的报文进行转发的协议称为传输协议。
- 路由器从连接私网的接口接收到报文后,检查报文头中的目的IP地址字段,在路由表查找出接口,发现出接口是隧道接口,将报文发送给隧道模块进行处理。
- 隧道模块接收到报文后首先根据乘客协议的类型和当前GRE隧道配置的校验和参数,对报文进行GRE封装,添加GRE报头
- 路由器给报文添加传输协议报头即IP报头(公网地址);该IP报头的源地址就是隧道源地址,目的地址就是隧道目的地址
- 路由器根据新添加的IP报头目的地址,在路由表中查找相应的出接口并发送报文,封装后的报文将在公网中传输
- 接收端路由器从连接公网的接口收到报文后,首先分析IP报文头,如果发现协议类型字段的值为47,表示协议为GRE,于是出接口将报文交给GRE模块处理。GRE模块去掉IP报文头和GRE报文头,并根据GRE报文头的协议类型字段,发现此报文的乘客协议为私网中运行的协议,于是将报文交给该协议处理
GRE隧道传输的流量是不加密的,将 IPSec技术与GRE相结合,先建立GRE隧道对报文进行GRE封装,然后再建立IPSec隧道对报文进行加密,这样就只可以保证报文传输的完整性和私密性。
作用
- 使隧道两端的网络组成一个更大的内部网络
- 把不支持的协议数据包打包成支持的协议数据包之后进行传输
- 克服IGP协议的一些局限性。例如RIP路由最大15跳即为不可达,可以使用GRE技术在两个网络节点之间搭建隧道,隐藏它们之间的跳数,扩大网络的工作范围。
参考
GRE隧道是什么?他的作用是什么?通用路由封装协议GRE 是什么?