在隧道中,一个数据包被封装在另一个数据包的有效载荷部分。如果一端的路由器封装了该数据包,那么另一端的路由器如何识别该数据包是否被封装。
是否有任何 ip 头字段可以帮助路由器找出数据包是否被封装?
在隧道中,一个数据包被封装在另一个数据包的有效载荷部分。如果一端的路由器封装了该数据包,那么另一端的路由器如何识别该数据包是否被封装。
是否有任何 ip 头字段可以帮助路由器找出数据包是否被封装?
封装需要一个协议。根据协议,封装数据包由以太网类型(第 2 层)、IP 协议号(第 3 层)、传输层端口号(第 4 层)唯一标识,使网关能够根据需要处理数据包。
网关通常还使用来自封装层或底层的附加信息(MAC 地址、源 IP 地址、源端口等)来识别隧道伙伴。(当然,它也会使用目标地址,无论是目标本身。其他目标可能需要转发或其他类型的处理。)
本质上,隧道协议以与任何其他协议完全相同的方式使用底层。唯一的区别是有效载荷是一个隧道数据包(加上需要的元数据)。
我不能说这适用于所有可以想象的隧道,但这是如何工作的一般想法。
在入口点和出口点之间建立隧道。在这种情况下,外部数据包将具有作为源地址的入口点和作为目标地址的出口点。出口点将接收一个以自身为目标地址的数据包。因此出口点知道它不必转发数据包,而是需要处理它。
在出口点确定它负责数据包处理后,它需要知道如何处理数据包。通常,接下来要做的是确定下一个标头是什么并解析它[*]。在IP(即如果外部头是IP)中,下一个头是什么,在协议字段(IPv4)或下一个头字段(IPv6)中指定。例如,如果内部报头是 IP,则协议字段设置为 4。其他隧道协议将具有不同的值。
因此,在 IP in IP 的示例中,路由器可以确定它收到了一个发往自己的 IP 数据包,其中包含另一个 IP 数据包。然后路由器执行隧道协议规范中所写的操作。
[*] 这实际上是每个系统在接收到一个以自身为目标地址的数据包时所做的事情。它检查协议/下一个报头字段以确定数据包需要什么进一步处理。
注意:隧道不一定要“通过 IP”,也可以通过 L2、L3 或 L4 协议建立隧道。大体原理是一样的,外头必须有一些字段标识内头。L2 和 L3 协议通常具有等效的“下一个标头”字段,例如以太网中的 Ethertype。L4 协议通过端口区分数据流。