GRE(通用路由封装)指定了一种协议,用于将任意协议封装在另一个任意网络层协议上。
我想我根本不明白为什么需要 GRE。把一个协议封装A
在协议中B
,能不能不把A
数据包作为数据包中的数据来B
发送?
我知道 GRE 可用于创建隧道,当前 RFC 的第 3 节提到了安全注意事项,但只说应该有一些安全措施。
简而言之,与协议的“天真”封装相比,GRE 有什么好处?
GRE(通用路由封装)指定了一种协议,用于将任意协议封装在另一个任意网络层协议上。
我想我根本不明白为什么需要 GRE。把一个协议封装A
在协议中B
,能不能不把A
数据包作为数据包中的数据来B
发送?
我知道 GRE 可用于创建隧道,当前 RFC 的第 3 节提到了安全注意事项,但只说应该有一些安全措施。
简而言之,与协议的“天真”封装相比,GRE 有什么好处?
GRE 只是一个隧道协议——它存在的主要原因是拓扑隐藏/绕过。
一些例子包括:
在可能不支持 MPLS 的网络上隧道传输 MPLS - MPLS 垫片不是基于 IP 的,因此将它们包装在 GRE 隧道中允许两个路由器在可能有许多中间的仅 IP 设备时出现相邻。
配置与非直接连接的邻居的 EBGP 会话 - Anti-DDoS 服务通常使用它来允许您的前缀在其清洗站上通告,并且即使在它们可能远离您的多个 AS 的情况下也将流量直接传送给您边界
IPSEC 上的 GRE 是另一种常见用途,它允许跨基于 IPSEC 的网络建立上层路由协议,避免传统(例如:基于 Cisco)VPN 部署带来的通常静态配置和路由限制。
这也是 RFC 提到的开放式安全的一个例子。这不是疏忽,只是不排除使用未来技术(GREoSSL、GREoQuantumCryptography 等)的一种方式。
从中间设备的角度来看,封装的流量在 GRE 标头内是“本机”的,有效载荷被解释为终止设备上的附加标头这一事实在很大程度上是无关紧要的。
GRE 只是大多数路由器都能理解的协议,它足够简单,封装/去封装不会给路由器带来太多负担。
换一种方式想一想——如果你想在 HTTP 内部建立 IP 隧道(完全可能,如果效率有点低),你需要在所有路由器上实现一个 HTTP 服务器。GRE 只是一种更简单、无状态、极简的方式来实现相同的目标。
GRE 还用于通过第 3 层跨网络执行 SPAN。以以下文章为例。 https://supportforums.cisco.com/document/139236/understanding-spanrspanand-erspan