路由器如何拦截数据包?

网络工程 路由 路由器 包路径
2022-02-12 03:56:40

我正在尝试了解 iptables 和端口转发,但遇到了一个非常简单的障碍。如果我的理解是正确的,这个概念适用于有局域网、路由器和一些更大的外部网络,通常是互联网(我实际上是在尝试在没有互联网访问的完全本地网络上实现这个,但我认为一般概念仍然有效)。当来自外部网络的数据包发送到该本地网络上的其中一台计算机时,路由器会拦截它并将其转发到正确的设备。我的问题是:路由器有自己的 IP 地址,数据包想用不同的 IP 地址发送到不同的设备。那么,如果数据包的目的地不是路由器本身,路由器如何实际拦截该数据包呢?

我希望这个问题是有道理的。这个问题或类似的问题之前可能已经被问过,但我不确定用什么词来搜索它。

3个回答

路由器不会拦截数据包。需要网关到远程网络的节点将这些 IP 数据包传递到该网关/路由器(通常在封装帧中使用 MAC 地址),路由器根据其本地路由表转发它们。

路由器以及随后的网络是否具有 Internet 连接并不重要。

有关 IP 和 MAC 寻址如何相关的详细信息,请查看此问题

级别 2 用于局域网 (LAN)。您的设备上配置了默认网关(或特定路由)(手动配置或由某些 DHCP 配置)。

网关解释

当您的 PC 想要访问不在同一 LAN 中的 IP 时,他们将使用其上配置的默认网关。然后数据包将以路由器 (R1) 的 MAC 作为目标 MAC(通过 ARP 学习)。交换机(工作在第 2 层)将此数据包转发到路由器(此处为路由器 R1),路由器将检查 IP 目标,然后转发到相应的设备,依此类推。

在 Linux 上,您可以使用命令检查路由(和默认路由),使用命令检查ip route您的 arp 表arp

路线

互联网是(吨)局域网的互连。

没有黑魔法,所有设备都必须进行配置(手动或自动),以便在尝试与其他设备通信时知道该怎么做。总是有很多工作要使最终用户(DHCP,网关路由,...)变得透明。;)

路由器并没有真正拦截数据包。路由器将获得一个帧,剥离帧以检查数据包,然后根据数据包的目标地址,基于其路由表中的内容路由数据包(丢弃任何没有目的地的数据包)。路由器将为数据包路由到的网络类型构建一个新帧。

路由器在网络之间路由数据包,因此路由器将至少连接两个网络,但它可能有许多网络,并且它可以在所有连接的网络之间路由数据包。


编辑:

根据您的评论,您首先对数据包如何到达路由器感兴趣。

路由器从发送给它们的帧中获取数据包。这可能来自广播或多播,但路由器通常不会传播这些。如果它是单播,则它从另一个源直接发送到路由器。这通常是源主机或另一个路由器。

想要将数据包发送到不同主机的主机将使用其网络掩码屏蔽其(源)地址和目标地址。如果结果相等,那么目的地在同一个网络上,并且数据包的帧是用目的地主机作为帧目的地构建的。如果它们不相等,则主机知道目标位于不同的网络上,并使用其配置的网关(路由器)作为帧目标来构建帧。

路由器将剥离帧以获取数据包并读取数据包目的地,以便将数据包路由到其旅程的下一段。


看来您的问题可能会混淆路由和 NAT。这真的是两个完全不同的东西。NAT(网络地址转换)正在更改数据包上的 IPv4 地址(源、目标或两者)。路由器或防火墙可能是 NAT 的方便位置(如果您需要 NAT),但这不是路由的要求。如果您需要在网络上使用私有地址在公共 Internet 上进行通信,或者您需要与具有与您的网络地址重叠的地址的网络进行通信,则使用 NAT。因为 NAT 破坏了许多协议,所以只有在必须使用它来解决问题时才应该使用它。