你最初的假设并不完全正确。你所谓的路由器其实是两个设备合二为一——一个双端口路由器内部连接到一个多端口以太网交换机。
这意味着计算机直接在第 2 层连接,并且可以相互发送数据包而无需经过路由器核心 - 它们只是通过交换机芯片在端口之间中继。(路由器在交换机中有自己的端口。)
因此,如果您使用 Wireshark 查看数据包,您会发现它们直接使用彼此的 MAC 地址,而外部数据包始终以路由器的 MAC 作为目的地。
...
... 子网中的每台计算机并不相互连接,而是连接到交换机,然后交换机可以将数据包1传递到正确的目的地。以太网帧不包含子网掩码,因为交换机已经知道这个信息,因此不需要它来进行正确的交换。
这又是错误的。交换机不具备这些知识;它们的交换核心在第 2 层工作,对 IP 一无所知——它完全根据“目标 MAC 地址”字段转发以太网帧。____________________
1
[编者注] 大概这是指“数据包”。
来源https://superuser.com/a/1191145/337631
上面的解释怎么会是真的呢?我已经配置了相当多的家用级网络硬件,但实际上情况并非如此。在您的路由器中,您既有 IP 过滤选项,也有 MAC 过滤和路由选项。此外,在使用 VM 软件时,您的物理网卡会进入混杂模式,在该模式下,它会接收发送到多个 IP 地址的数据包,并将正确的数据包传递给 VM 和真实(主机)计算机。即使 MAC 地址以某种方式被隐藏,IP 版本 4 也肯定会起作用。
答案1
上面的解释怎么会是真的呢?我配置了相当多的家用级网络硬件,但实际上情况并非如此。在您的路由器中,您既有 IP 过滤选项,也有 Mac 过滤和路由选项。
这并不奇怪,也不是什么问题。
首先,尽管 IP 路由器被描述为“第 3 层”设备,但这并不意味着它们无法与较低层进行交互 - 它们做通常会看到整个数据包,包括其以太网和 IP 标头,并且防火墙规则可以完美匹配其中一个或两个。
其次,我要重申一下,你的家用网络硬件往往具有多种的功能 – 主 CPU 运行操作系统并处理路由;硬件交换机处理“LAN”端口之间的第 2 层数据包转发;Wi-Fi 接入点处理 Wi-Fi。同一操作系统完全可以同时配置路由核心和连接的交换和 Wi-Fi 硬件。
(事实上,我敢打赌,MAC 过滤选项是具体来说对于 Wi-Fi 接入点 – 这些可以根据站点的 MAC 允许或拒绝第 1 层 WLAN 关联。虽然我不确定这通常是由 Wi-Fi AP 芯片本身强制执行的,还是由在主操作系统上运行的 hostapd 强制执行的……)
然后就是人们所说的“三层交换机”,它可以根据需要充当交换机或路由器 - 每个单独的端口都是可重新配置的,因此您可以交换一些端口(因此属于同一子网),其余端口进行路由,并且操作系统根据需要重新配置交换芯片。
另外,当使用 VM 软件时,您的物理网卡将进入混杂模式,在该模式下,它会接收发送到多个 IP 地址的数据包,并将正确的数据包传递给 VM 和真实机器。
是的,这也不是问题。没有什么可以阻止 PC 成为 IP 路由器或网桥,或两者的组合。大多数 VM 软件可以在两种模式下工作 - 要么在第 2 层将 VM 桥接到 LAN,要么为它们创建一个单独的子网,以便 PC 充当两者之间的路由器。
(在这方面,个人电脑可以变得非常灵活——就在昨天,我停用了一个作为桥梁设置的“brouter”除了当涉及到 IPv4 数据包时,它们会被路由……)
即使 Mac 地址以某种方式被隐藏,IP 版本 4 也肯定能够发挥作用。
实际上,需要 L2 寻址的不是 IP,而是第 2 层本身确实如此。
是的,设计一个只关心 IP 地址的网络并将其用于交换是完全有可能的。事实上,我认为这就是 ATM 网络的工作原理 - ATM“交换机”本质上充当自配置路由器,但也会自动了解每个端口后面有哪些单独的 ATM 地址(就像交换机一样)。
但在实践中,IP 的设计目的是不是对任何特定类型的链路层都有严格的依赖性,因此你可以将其延续任何事物–以太网,光纤分布式数据接口,弧网,火线,信鸽…同样,因为大多数链路层都有自己的寻址,避免了对 IPv4 的任何依赖,所以不需要做任何事情就可以让相同的交换机在同一个以太网上支持 IPv6(或者就此而言 IPX、DECnet、AppleTalk 或 NetBEUI,…)。
所以,之所以拥有这两种地址,是因为它们被刻意分开,这样可以提供很大的灵活性。
(IPv4 和 IPv6 都可以在点对点链路上运行,而无需任何 L2 寻址,因为这种链路无论如何只有两个方向;两个简单的例子是 VPN 和拨号连接。)
实际上,虽然这与子网掩码无关,但您可以看看 IPX 和 DECnet——在 IP 和 Internet 接管之前的早期,这两种协议都是常见的 LAN 协议。IPX 地址有两个部分,网络和主机,例如618A1.0060086DD3EE
,主机部分始终与相应的以太网 MAC 地址相同。而 DECnet 则相反——它需要将以太网 MAC 更改为一个特殊地址,其中编码了 DECnet 节点地址。因此,一方面您不需要 ARP,但另一方面您几乎必须使用以太网或与之兼容的协议。
答案2
在您的路由器中,您同时拥有 IP 和 Mac 过滤和路由选项。
许多家用路由器都有功能只允许具有特定 MAC 地址的设备访问无线,但是不会有任何关于“MAC 路由”的内容。
这是一个简单粗略的框图,显示了正在发生的事情。
所有作为网络接口的小盒子都是以太网网络接口。传入帧必须是以太网帧。
另外,当使用 VM 软件时,您的物理网卡将进入混杂模式,在该模式下,它会接收发送到多个 IP 地址的数据包,并将正确的数据包传递给 VM 和真实机器。
这是MAC 转发,但实际上不是路由。这是硬件交换机的功能,用软件实现该功能也是可能的,而且并不罕见。实际上并不要求物理接口后面只有 1 个 MAC 响应(这确实是集线器(而非交换机)的外观和工作方式)。术语路由在网络中的应用具体是指在 2 个独立网络之间转发。
即使 Mac 地址以某种方式被隐藏,IP 版本 4 也肯定能够发挥作用。
IP 不关心 MAC 地址,但下面的层可能关心。
具体来说以太网,第 2 层协议,做关心 MAC 地址。
所以请记住,你真正拥有的不仅仅是一个路由器,而是一个以太网内置 4 端口路由器以太网转变。
以太网需要 MAC 地址。如果传入的第 2 层协议不是以太网,则它根本无法到达路由器,因为所有其他接口都期望以太网。
上面的解释怎么会是真的呢?
以太网MAC基于以下假设工作:
如果某些东西通过某个接口发出带有目标 MAC 地址的帧,那么它将到达该 MAC。
通常情况下,所有设备都 A)位于同一物理介质上,或者 B)通过一个交换机进行中介,该交换机透明地学习目标 MAC 地址,以便更好地利用真正的共享介质。
如果您要访问的目标系统不在同一网络上,该怎么办?那么上述两个假设就不成立,以太网本身无法再帮助您与目标系统通信。以太网只关心同一交换机或介质上的系统。
你需要路由器和以太网上的“路由层”,这正是互联网协议 (IP) 的用途。IP 地址明确是全局的,在设计上不关心底层 - 您应该能够从世界任何地方访问任何给定的 IP 地址,尽管有防火墙规则(私有地址范围是后来为缓解短缺而引入的“黑客手段”)。
答案3
由于我确实提到了层,因此我将首先快速介绍一下。OSI 模型的底部 4 层是:
- 4 - 传输 - 通常使用(TCP 或 UDP)端口号
- 3 - 网络 - 通常使用 IP 地址
- 2 - 数据链路 - 通常使用 MAC-48 地址
- 1 - 物理 - 通常使用电信号(例如,媒体是否可用或忙?) - 通常由硬件处理,因此软件不需要与这一层进行太多交互
即使 Mac 地址以某种方式被隐藏,IP 版本 4 也肯定能够发挥作用。
不可以,MAC-48 地址不能被隐藏。
因此,通常情况下,发送信息的计算机会生成一个 IP 数据包。(可能是 IPv4 或 IPv6——不影响此处描述的过程。)IP 数据包指定目标设备的 IP 地址。此设备可能是本地设备(例如网络上的打印机),也可能是远程设备(位于世界的另一端)。
然后,计算机创建一个帧,该帧可能是以太网(用于有线连接)或 Wi-Fi(用于无线连接)。该帧需要目标 MAC-48 地址。因此,计算机会检查要使用的目标 MAC-48 地址。它使用“路由表”来确定要使用的目标 MAC-48 地址。如果目标 IP 地址位于同一子网中,计算机将使用第 3 层到第 2 层的转换过程(使用 IPv4 的 ARP、使用 IPv6 的 NDP)来查找设备(例如打印机)的目标 MAC-48 地址。如果目标 IP 地址是远程设备,计算机将使用相同类型的第 3 层到第 2 层的转换过程来查找网关设备(通常称为“默认网关”,除非您有更复杂的设置,具有更具体的网关,某些多站点企业可能会使用这种网关)的目标 MAC-48 地址。
正如 IP 数据包包含一些您希望传达的信息(称为“有效负载”)一样,帧也有一个称为“有效负载”的部分。计算机使用 IP 数据包作为有效负载来创建帧。因此,生成的帧包含 IP 数据包。
然后,计算机将帧发送到它所连接的任何设备。我们通常称之为“交换机”。但是,在这个例子中,我们假设您实际上连接到了路由器。
现在,路由器可以通过以下方式执行类似“防火墙”的功能:
- 阻止 MAC-48 地址(“MAC 过滤”),或
- 查看框架内部,查看 IP 数据包,并阻止某个 IP 地址(“IP 地址过滤”),或
- 查看帧内,找到 IP 数据包,查看 IP 数据包,找到 TCP 段或 UDP 数据报,查看该段/数据报以查找“端口号”,并根据端口进行过滤
我们假设没有会导致问题的防火墙功能。
目标设备将查看目标 MAC 地址。如果设备收到包含目标 MAC-48 地址的帧,而该设备未使用,则设备将忽略该帧,除非该设备充当“桥接器”。(“交换机”本质上只是具有 2 个以上端口的“多端口桥接器”;除非设备在不同类型的物理介质之间进行转换,否则设备通常不再以“桥接器”的名称进行营销/销售。相反,多端口设备通常称为“交换机”,而 2 端口设备可能是“扩展器”。)如果设备是桥接器,则它只会传递帧。
如果设备收到的帧的目标 MAC-48 地址与设备使用的地址相匹配,则设备会处理该帧。基本上,设备会确定“我将接受此帧”,提取有效负载(即 IP 数据包),并忽略帧的其余位。此时,设备不再查看“第 2 层”帧的详细信息,而只关注“第 3 层”数据包的详细信息。
- 如果第 3 层数据包指定了查看数据包的设备的目标 IP 地址,则该设备将处理该数据包(通常通过注意数据包是 TCP、UDP 还是 ICMP;如果是 TCP 或 UDP,则检查端口号以查看哪个软件程序应接收数据)。
-
如果第 3 层数据包指定了不同的目标 IP 地址:
- 如果设备配置为路由器,则设备将路由数据包。这基本上意味着查看路由器的路由表,找出下一个目的地,并创建一个包含下一个设备的 MAC-48 地址的新帧。
-
否则,该数据包通常会被忽略。
- 如果数据包没有被忽略,则表明设备实际上并未遵循正常预期,因此设备处于我们所谓的“混杂模式”。 (您的计算机正在运行“虚拟机”,它会这样做,以便您的计算机将流量传递给虚拟机。)
因此,处理传入 IP 数据包的电路/软件部分在处理帧之前永远看不到 IP 数据包。这就是为什么需要 MAC-48 地址的原因;这是设备在本地网络上与其他设备通信的基本方式。如果没有帧,则无法进行通信,因此目的地永远不会收到 IP 数据包。(这就是为什么下一句引用的句子对于了解每个步骤如何工作的人来说没有多大意义。)
即使 Mac 地址以某种方式被隐藏,IP 版本 4 也肯定能够发挥作用。
IP 数据包不包含 MAC-48 地址。(当然,它们可以包含 MAC-48 地址作为其有效负载的一部分,但这不是 IP 数据包结构的一部分。)当设备关注 IP 数据包的详细信息时,该设备可能不再需要任何第 2 层详细信息(例如 MAC-48 地址),因此设备可能已经忘记了这些详细信息。