在 GRE 隧道中,当 R1(公共 IP 172.16.0.1
,隧道地址10.0.0.1
)向 R3(公共 IP 172.16.0.6
,隧道地址10.0.0.2
)发送数据包并且 R3 收到它时,会发生以下情况:
在 R3 的物理接口上接收到一个数据包。
路由决策确定目标地址属于 R3。
路由器将目标 IP 地址 (
172.16.0.6
) 和 GRE 标头识别为属于隧道接口。隧道接口删除外部 IP 和 GRE 标头,并将原始 IP 数据包“传入”路由器。根据原始目标 IP 地址执行第二个路由决策。
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)?