为什么源地址和目的地址在 GRE 隧道中应该匹配?

网络工程 ipv4 隧道 格雷
2021-07-26 11:56:49

在 GRE 隧道中,当 R1(公共 IP 172.16.0.1,隧道地址10.0.0.1)向 R3(公共 IP 172.16.0.6,隧道地址10.0.0.2发送数据包并且 R3 收到它时,会发生以下情况:

  1. 在 R3 的物理接口上接收到一个数据包。

  2. 路由决策确定目标地址属于 R3。

  3. 路由器将目标 IP 地址 ( 172.16.0.6) 和 GRE 标头识别为属于隧道接口。隧道接口删除外部 IP 和 GRE 标头,并将原始 IP 数据包“传入”路由器。

  4. 根据原始目标 IP 地址执行第二个路由决策。

  5. IP TTL 减 1,数据包从相应的接口传输出去。

有关我现在要讨论的示例以及更多详细信息,请参见此处

我想知道第 3 点。如果 R1 上的隧道设置的外部 IP 标头中的数据包目的地是172.16.0.6,为什么 R3 不立即摆脱额外的 IP 和 GRE 标头?

相反,R3 检查其配置的隧道以找到具有源隧道地址的隧道172.16.0.6并将数据包传递到那里。

这意味着 R1 上的目标隧道地址需要与 R3 上的源地址匹配,反之亦然(示例证明)。如果他们不这样做,R1 将无法 ping 10.0.0.2这个要求的逻辑解释是什么?

也许我希望数据包在隧道上采用不同的物理路径,具体取决于它们行进的方向(R1 到 R3 或 R3 到 R1)?

2个回答

一种简单的解释是 R3 需要确定数据包来自哪个隧道。通常在 R3 的同一接口上终止的隧道可能不止一个。

编辑:更重要的是,如果您允许 R3 上的隧道配置指定不同的端点,则不能保证该地址实际上在 R1 上——它可以在任何地方。这意味着隧道另一端的接口 10.0.0.1 可能存在于两个不同的地方。正如我们所说,这将导致糟糕的路由日。

另一种解释是它允许保持连接,因此 R1 和 R3 知道隧道的另一端已启动。

如果需要,您当然可以拥有非对称路径。这取决于 R3 上的路由信息​​。

Src 上的“隧道目的地”需要与对等体上的“隧道源”匹配,以确保将数据包传送到正确的 int。一旦它到达正确的 int,该 int 就会查看“IP 协议字段”和 ID,它是一个 GRE 数据包——触发它将数据包发送到 GRE 进程以进行解封装等

基于以上,想一想如果 R1(发送方)认为 Tu Dst 是 R2 g0/1 会发生什么,但是...... R2 被配置为从循环 1 发送数据包。数据包到达 R2 g0/1。这是最终目的地,因此 R2 g0/1 查看 IP proto 并看到它是 GRE 数据包。它说,我没有从这个 int 采购任何隧道,所以丢弃数据包。

R2 不能假设为 g0/1 寻址的数据包应该与源自 Lo 1 的隧道相关联。该隧道可能是到某个其他设备(到达 g0/1 或不同的 int)。