我对普通家庭路由器的工作方式感到困惑:MAC 地址不应该足以将信息转发到正确的目的地吗?

Cec*_*lat 20 networking router switch mac-address ip

据我了解,它的工作方式是这样的:

\n

在此输入图像描述

\n

为什么需要将私有 IP 地址与每个连接的地址相关联?\xe2\x80\x99t MAC 地址是否足以将信息转发到正确的目的地?

\n

这是我的意思的一个具体例子:

\n
    \n
  1. 我有一个网站托管在连接到路由器的 PC 上。
  2. \n
  3. 在路由器上,我将端口 80(外部)转发到 PC MAC 地址(而不是本地 IP)的端口 80(内部)。
  4. \n
\n

我知道这不是它的工作原理,问题是为什么它首先没有像这样实现?是的,无论如何,帧不是数据包。我的意思只是为了识别目的。

\n

use*_*686 31

\n
    \n
  1. 在路由器上,我将端口 80(外部)转发到 PC MAC 地址(而不是本地 IP)的端口 80(内部)。
  2. \n
\n

我知道这不是它的工作原理,问题是为什么它首先没有像这样实现?是的,无论如何,帧不是数据包。我的意思只是为了识别目的。

\n
\n

您所描述的内容实际上非常接近 IP路由在幕后的工作方式\xe2\x80\x93,当不涉及NAT 或“端口转发”时,路由器通过仅更改其目标 MAC 来转发数据包,并且从技术上讲不会\'不需要知道设备的IP地址。

\n

例如,在路由表中(我指的不是端口转发”规则),您有一个“网关”或“下一跳”字段,传统上是 IP 地址,但其唯一目的是解析为某些一种低层地址,因此路由表可以直接接受 MAC 地址。

\n

但尽管如此,出于各种原因,路由表条目仍需要 IP 地址。首先,使用 IP 地址是一种有用的抽象,这要归功于使用 ARP(或 NDP)来动态解析 MAC 地址:实际网关可以更改其以太网接口,但只要它采用相同的 IP 地址,相同的旧路由配置仍然有效。

\n

另一个原因是只接受一种地址类型比接受多种地址类型更简单。即使是典型的家庭网关也不是纯粹考虑以太网而构建的:ADSL 调制解调器已经必须处理两个完全不同的 MAC 层,因此其路由表需要接受两种不同的下一跳地址类型。

\n

因此,接受 IP 地址并依靠现有机制将它们转换为无论如何都需要存在的 ARP 等机制实际上更简单此外,尽管进行了额外的转换,但它简化了事情,因为这意味着所有数据包都以相同的方式处理,无论它们是传递到最终主机还是另一个网关,而不是存在两种不同的情况。

\n

(但有些网络实际上使用 IPv6 下一跳地址作为 IPv4 网络路由。源网关的操作系统只是使用 NDP 而不是 ARP 来解析下一跳网关的 MAC 地址,而不会对实际转发的 IPv4 数据包进行任何更改。)

\n

对于“端口转发”,有一些相同的原因,例如将 IP 地址与物理主机分开的能力。但更重要的原因是因为“端口转发”是后来添加到 IP 网络中的,因此它的实现方式使得最终主机不需要知道它的发生:与普通路由不同,“端口转发”数据包的实际目标 IP 地址(IP 标头中的地址)将从路由器的 WAN 地址转换为您指定的内部地址。

\n

换句话说,需要提供 IP 地址,因为整个点是将目标设备的 IP 地址放入数据包中。结果是目标设备认为它确实是“转发”连接的目的地,并且不会因接收带有路由器 IP 的数据包而感到困惑(通常会丢弃 \xe2\x80\x93 或更糟糕的是,转发回路由器)。

\n

可能还有其他方法可以在多个设备之间实现类似的“共享”IP 地址,但它们需要对设备本身进行更改。例如,如果您直接为所有 LAN 主机以及路由器 \xe2\x80\x93 分配相同的公共 IP 地址,使它们接受未修改的数据包,则使用公共 IP 地址 \xe2\x80\x93 的设备无法\'不再互相交谈,因为他们都有相同的地址。(请记住,许多 IPv4 堆栈不允许每个接口有多个 IP 地址,因此为两个接口分配多个 IP 地址分配公共地址和本地地址。)相反,已完成的转换

\n

(一种可行的替代方法是为每个设备分配一个公共 IP 地址,从而不需要“端口转发”规则并完全依赖于标准路由。)

\n

另一个相关的想法是,端口不是一个通用概念,而是专门属于 TCP \xe2\x80\x93,它本身依赖于 IP \xe2\x80\x93,因此尽管技术上可能有一条规则“如果端口 80,转发到 MAC x:y:z”,从逻辑上讲,将 TCP 端口与特定 IP 地址(即紧邻的下一个较低层)关联比与硬件地址关联更有意义。

\n
\n

之前的回答:

\n
\n

为什么需要将私有 IP 地址与每个连接的地址相关联?\xe2\x80\x99t MAC 地址是否足以将信息转发到正确的目的地?

\n
\n

是否“足够”并不是一个正确的问题。是的,从根本上来说这是可能的,但是这并不是真正理想的\xe2\x80\x93,这样做会带来比你期望的要消除的更多的新复杂性。

\n
    \n
  1. 已经有很多方法可以在以太网之上构建网络,但不需要 IP(其中一些方法曾经比 IP 更流行),例如 NetBIOS、DECnet、IPX、VINES、X.25、AppleTalk 只是其中的几种过去在 LAN 和 WAN 上使用的协议。但最终,几乎所有此类网络要么迁移IP,要么消失。(基于 X.25 的 WAN 或“公共数据网络”曾经很大,直到被基于 IP 的网络取代。)

    \n

    虽然您仍然可以在不依赖 IP 的情况下构建 LAN,但如今任何 LAN 都不可避免地需要与一个主要的基于 IP 的网络(互联网)进行通信,因此,如果您有一个仅使用 MAC 地址的非基于 IP 的本地网络,另外,程序仍然需要了解互联网 IP 地址本地 MAC 地址之外,

    \n

    这意味着程序和操作系统需要处理两种不同的网络类型\xe2\x80\x93 MAC 地址以到达另一台主机(如果该主机位于 LAN 内部)和 IP 地址(如果该主机位于 LAN 外部)。这与当前在本地主机使用私有 IP 地址并在进行“端口转发”时使用公共地址的问题非常相似,但更糟糕。

    \n

    (公平地说,这有点像当前现代网络上 IPv4 和 IPv6 的共存,程序需要同时支持 \xe2\x80\x93,但 IPv6 存在实际需要,其存在的目的是统一网络,而假设的纯 MAC 地址网络只会将它们分开得更多,而没有任何实际优势。)

    \n
  2. \n
  3. 即使同一网络内的主机可以仅使用其 MAC 地址进行通信,一旦内部主机需要向互联网发送一些数据包,您仍然需要一个额外的标头来至少保存目标 IP 地址,并且路由器需要在一侧的两种数据包类型 \xe2\x80\x93 常规 IP 之间进行转换,另一侧则需要在假设的“非 IP,但请传送到 IP 地址”LAN 协议之间进行转换。这是可行的,但比仅在双方使用相同类型的 IP 复杂得多。

    \n

    重要的一点是,“私有”IP 地址是一个非常非常晚的 IP 网络的补充 \xe2\x80\x93 当前私有和公共 IP 地址之间的转换并不是 IP 工作方式的自然部分,而是很大程度上由几年后的“通用家庭路由器”。在此之前,LAN 中的主机(如果 LAN 使用 IP)过去只拥有公共 IP 地址,就像 Internet 上的其他地方一样 \xe2\x80\x93 数据中心中的服务器仍然具有 \xe2\x80\x93 并且没有“端口”需要转发”,因为您可以通过其自己的地址到达任何主机。

    \n
  4. \n
\n

总的来说,这与 IP 的存在有些矛盾 \xe2\x80\x93 网络层协议的整个目标是统一不同类型的网络。目前,家庭 LAN 中的 IP 工作方式与办公室、大学、各种公共网络或互联网其他部分的 IP 工作方式完全相同。

\n

(类似地,IP over 以太网的工作方式类似于 IP over 电缆,IP over ADSL 的工作方式类似于 IP over 3G/4G,尽管这些网络类型中的每一种都有完全不同的 MAC 层,有时甚至没有“MAC”的概念。地址”。)

\n

事实上,“即将到来的”IPv6 的目标与您所考虑的 \xe2\x80\x93 完全相反,特别是为每个设备分配公共地址的能力通过消除“私有地址从这里开始”IPv4 LAN 当前必须处理的 NAT 边界。

\n

(同样,人们也在不断努力将 IP 使用扩展到尚未使用它的网络,例如物联网中的 Thread。)

\n
\n

关于 MAC 地址不可路由的注释:已经有多种方法可以构建仅使用 MAC 地址的路由网络;它们只是不用于典型的基于 IP 的 LAN,因为 IP 层路由就足够了。

\n

例如,HWMP 和 BATMAN 是 Wi-Fi 网状网络的标准,而企业网络中的 SPB 和 TRILL 将与广泛用于 IP 路由的相同 IS-IS 路由协议应用于 L2 地址。

\n

(IPX和XNS网络协议也直接使用以太网MAC地址来识别主机,但通过在基于MAC的主机地址前面添加一个额外的“网络地址”来实现路由,从而避免了单独路由每个MAC的需要。如果你眯着眼睛看, IPv6 起初的工作方式也差不多。)

\n

  • 你的第9段还没有完成。它以*“相反,已完成的翻译”结尾。 (4认同)

Ben*_*igt 9

原因实际上非常简单:这样主机就不必知道或关心它们是否位于 NAT 层后面。

考虑一个拥有笔记本电脑的学生。当他将笔记本电脑带到大学时,该笔记本电脑必须处理公共 IP 地址并运行通过 IP 地址和端口识别连接的软件(周围没有“家庭路由器”需要翻译)。当他把笔记本电脑带回家时,他希望所有相同的软件都能运行。如果家庭网络通过 MAC 地址和端口而不是 IP 地址和端口来识别连接,则您需要一套完全不同的家庭网络软件。想象一下在学校网络万维网浏览器程序和家庭网络万维网浏览器程序之间保持书签和 cookie 同步的痛苦。

通过让家庭路由器在非互联网端使用相同的“互联网协议”,计算机就不需要两种不同类型的网络。

  • 公共知识产权案件是第一位的。每台计算机过去都有一个“真实”IP 地址。当 NAT 出现时,它需要与所有现有软件和现有操作系统配合使用,而无需更新它们。所以路由器假装给计算机一个真实的IP地址,而计算机不知道它是私有的。 (2认同)

Mok*_*bai 5

TCP/IP 使用 IP 来路由流量。它就在名字里。

如果您要使用 MAC 地址,那么您就不会使用 TCP/IP,此时路由器将需要做更多的工作来接受所使用的任何基于 MAC 的协议,然后转发请求。

这比通过网络地址转换 (NAT) 完成的更简单的标头修改/添加要完成更多的工作。

对内部和外部网络使用 TCP/IP 意味着网络通常要简单得多,因为与 Internet 上同一网络上的机器之间使用相同的协议,并且不需要与服务器和其他协议转换器进行更智能的桥接。


hob*_*bbs 5

互联网最初的设计目的并不是为了拥有“私人地址”。连接到互联网的设备应该有一个互联网地址(即公共IP地址)。互联网上的其他设备使用其互联网地址与其进行通信。MAC 地址是本地网络/逐跳详细信息,连接另一端的设备无法使用。

\n

现在假设,由于各种原因,您需要打破该约定并在多个设备之间共享公共 IP 地址,同时让它们的功能基本相同。每个设备仍然需要/期望有一个 IP 地址,因此您为它们提供私有地址,然后在网络 \xe2\x80\x94 的边界逐个连接地在公共地址和私有地址之间进行转换,即NAT(网络地址转换)。

\n

那么为什么我们不能接受您的建议,只获取传入数据包,查找其流属于哪个设备,在其上加上正确的目标 MAC 地址,同时保持 IP 地址相同,然后让交换机将其发送到正确的端口?我们有点可以,但这意味着所有内部设备的接口都必须配置相同的外部 IP 地址。严格来说,这并非不可能,但是这已经够让人痛苦的了,它不会给你带来任何好处。

\n
    \n
  1. 本地网络上的设备无法使用公共地址相互通信,因为它们都认为自己拥有相同地址。如果您希望它们能够相互通信,您还必须为它们提供唯一的私有地址(如果您这样做,为什么不直接使用私有地址并执行 NAT?)

    \n
  2. \n
  3. 有时,在您的方案中,路由器必须重写传入/传出数据包上的端口号(例如,如果两个设备选择相同的临时源端口用于传出连接,则避免 4 元组冲突,www.google.com:443或者因为两个设备都有在同一端口上侦听的服务,但您希望使它们都可以在不同的端口上被外界访问)。即使在普通情况下,它也需要能够识别连接流以将数据包发送回正确的本地设备。因此它需要能够解析、跟踪和修改下一级协议(IP)的标头。这些与我们对“常规”NAT 路由器的要求完全相同,因此,如果您遇到这些麻烦,为什么不重写地址呢?

    \n
  4. \n
  5. 假设您的公共 IP 地址是动态分配的,就像大多数住宅 ISP 上的那样。假设您的路由器的链路断开并恢复,并且您获得了一个新地址。您现在必须重新配置路由器后面的所有设备。因此,您需要能够使用 DHCP 之类的工具将该信息传播给他们。除了 DHCP 之外,我们知道它是客户端发起的;服务器没有任何方法可以告诉客户端设备“嘿,您持有租约的地址实际上不再有效,您必须获得一个新地址”。所以我们需要一些新的、不同的东西。

    \n
  6. \n
\n

基本上,尽管看起来很糟糕,但我们做事的方式已经发展到以最少的管理麻烦提供良好的结果,并且在这方面基本上取得了成功。

\n