图3-5 私有网络通过GRE隧道互连
文章插图
- 封装Ingress PE从连接私网的接口接收到私网报文后,首先交由私网上运行的协议模块处理 。私网协议模块检查私网报文头中的目的地址域在私网路由表或转发表中查找出接口,确定如何路由此包 。如果发现出接口是GRE Tunnel接口,则将此报文发给隧道模块 。隧道模块收到此报文后进行如下处理:隧道模块根据乘客报文的协议类型和当前GRE隧道所配置的Key参数,对报文进行GRE封装,即添加GRE头 。根据配置信息(传输协议为IP),给报文加上IP头 。该IP头的源地址就是隧道源地址,IP头的目的地址就是隧道目的地址 。将该报文交给IP模块处理 。IP模块根据该IP头目的地址,在公网路由表中查找相应的出接口并发送报文 。之后,封装后的报文将在该IP公共网络中传输 。
- 解封装解封装过程和封装过程相反 。Egress PE从连接公网的接口收到该报文,分析IP头发现报文的目的地址为本设备,且协议字段值为47,表示协议为GRE,于是交给GRE模块处理 。GRE模块去掉IP头和GRE报文头,并根据GRE头的Protocol Type字段,发现此报文的乘客协议为私网上运行的协议,于是交由此私网协议处理 。此私网协议像对待一般数据报一样对此数据报进行转发 。
- 使客户的部署不同协议网络使用单一网络协议进行数据传输 。
- 可以扩大受协议的步跳数限制的网络的工作范围 。
- 将一些不能连续的子网连接起来,用于组建VPN 。
产生原因由于GRE协议并不具备检测链路状态的功能 。如果远端端口不可达,隧道并不能及时关闭该Tunnel连接,这样会造成源端会不断的向对端转发数据,而对端却因Tunnel不通而丢弃所有报文,由此就会形成数据发送的空洞 。
NE40E实现了GRE隧道的链路状态检测功能(Keepalive检测功能) 。Keepalive检测功能用于时刻检测隧道链路是否处于Keepalive状态,即检测隧道对端是否可达 。如果对端不可达,隧道连接就会及时关闭,避免形成数据空洞 。
实现过程如果GRE隧道源端使能Keepalive检测功能,则会周期地发送Keepalive探测报文给对端 。若对端可达,则源端会收到对端的回应报文;否则,收不到对端的回应报文 。具体过程如下:
- 当GRE隧道的源端使能Keepalive检测功能后,就创建一个定时器,周期地发送Keepalive探测报文,同时进行不可达计数 。每发送一个探测报文,不可达计数加1 。
- 对端每收到一个探测报文,就给源端发送一个回应报文 。
- 如果源端的计数器值未达到预先设置的值就收到回应报文,就表明对端可达,并把不可达计数清零 。如果源端的计数器值到达预先设置的值——重试次数(Retry Times)时,还没收到回送报文,就认为对端不可达 。此时,源端将关闭隧道连接 。
使用价值Keepalive检测功能可以检测隧道状态,避免因对端不可达而造成的数据丢失,保证数据传输的可靠性 。
GRE的安全机制
GRE支持识别关键字验证 。识别关键字(key)是指对Tunnel接口进行校验 。通过这种弱安全机制,可以防止错误识别、接收其它地方来的报文 。
相关标准中规定:若GRE报文头中的K位为1,则在GRE头中插入关键字字段,收发双方将进行通道识别关键字的验证 。
关键字是一个四字节长的数,在报文封装时被插入GRE头 。关键字的作用是标志隧道中的流量 。属于同一流量的报文使用相同的关键字 。在报文解封装时,隧道端将基于关键字来识别属于相同流量的数据报 。
只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃 。这里的“完全一致”是指两端都不设置识别关键字;或者两端都设置关键字,且关键字的值相等 。
GRE应用扩大跳数受限的网络工作范围
图3-6 扩大网络工作范围
文章插图
在图3-6中,网络运行IP协议,假设IP协议限制跳数为255 。如果两台PC之间的跳数超过255,它们将无法通信 。在网络中使用隧道可以隐藏一部分步跳,从而扩大网络的工作范围 。
推荐阅读
- Secure Shell 详解网络安全协议SSH
- 赞美母亲的名言详解大全
- 网络工程师如何用思科路由器配置GRE Over IPsec
- 图文详解以太网中OSPF如何建立邻接关系?
- netty 服务端启动流程源码详解
- Shiro框架详解
- 动态路由协议RIP配置,带你一分钟学会
- WiFi大提速!WiFi 6和WiFi 6E详解
- 如何用手机查看自己家的路由器密码?
- SpringCloud Gateway详解