没有 NAT 的桥接网络:它是如何完成的?

网络工程 路由 纳特 层2 第3层
2021-07-22 02:48:20

我的网络经验非常有限,所以可能我问的是非常简单的事情。我正在阅读有关 linux 网桥接口的信息,文档指出默认情况下没有 NAT,网桥接口只是将数据包按原样从一个网络传递到另一个网络。这让我很困惑:我正在想象一个 LAN-behind-WiFi 设置,我的机器(让我们命名它access-point)可以连接到 WiFi 接入点并通过桥wireless0接到eth0. LAN 本身会有一些自己的地址范围(比如 192.168.0.0/24),如果我理解正确,连接将按以下方式处理:

  • lan-device-1:使用 MAC 00::01 和封装的 dns 查询和源地址 192.168.0.1 / 目标地址 8.8.8.8 将此帧发送到 eth0
  • 接入点:只是将帧从 eth0 推送到 wireless0
  • 8.8.8.8:提取DNS查询,准备答案,但看到源地址192.168.0.1
  • 一些疯狂的魔法出现并强制响应去访问点 IP 地址而不是 lan-device-1 地址
  • 接入点:收到来自 8.8.8.8 的回答,wild magic 再次出现并告诉接入点该响应属于 lan-device-1 而不是接入点,因此响应被刷新到具有正确 MAC 地址的 eth0

当然,我们生活在没有魔法的世界中,所以这些假设是错误的。但是如何将数据包路由到正确的目的地呢?如果 NAT 到位,那会很简单,但事实并非如此,我无法理解 A)远程机器如何知道发送响应的位置和 B)中介(例如接入点)如何区分它自己的流量与桥接交通。

1个回答

您似乎混淆了第 2 层和第 3 层。桥接不是路由。桥接与第 3 层地址无关,路由删除第 2 层地址。路由器路由数据包,并桥接交换帧。

路由发生在第 3 层,具有第 3 层(例如 IP)地址。路由在网络之间路由第 3 层数据包。

桥接发生在第 2 层地址,例如 MAC 地址。桥接直接从同一网络上的主机到主机传送第 2 层帧。

如果数据包发往不同的网络,则主机会将第 3 层数据包寻址到目标主机,并将用于将第 3 层数据包封装到其配置网关的第 2 层地址的第 2 层帧(通常为路由器)。路由器将剥离第 2 层帧,丢失第 2 层帧和地址,检查数据包上的目标第 3 层地址,并将数据包转发到下一个接口,为下一个网络构建一个新帧。

所有接口都使用相同第 2 层协议的网桥,例如以太网交换机,称为透明网桥,它们只是检查第 2 层地址的帧,将其切换到其 MAC 地址表中找到的接口,或将其泛洪如果目标 MAC 地址不在其 MAC 地址表中,则发送到所有其他接口。

如果网桥连接两个不同的二层协议,例如连接以太网和Wi-Fi 的WAP,它必须在不同的二层协议之间转换帧,它们被称为转换网桥。他们仍然使用 MAC 地址表来确定他们将交换帧的接口。以太网和 Wi-Fi 都使用兼容的 48 位 MAC 地址,因此尽管帧不同,但寻址可以保持不变。


没有 NAT 的桥接网络:它是如何完成的?

NAT 确实与路由或桥接无关。NAT 只是转换第 3 层数据包中的源、目标或第 3 层地址,而第 2 层网桥永远不会看到这些地址。

请记住,桥接在同一网络上,路由在网络之间进行,NAT 将地址转换为其他地址。


您不能在公共互联网上使用 RFC 1918(或其他一些)地址,例如 to 8.8.8.8非全局地址必须先转换为公共地址,然后才能在公共 Internet 上发送。并非所有网络都使用私有寻址,但任何网络都必须使用某种形式的 NAT 将私有地址转换为公共地址,然后才能将数据包发送到公共 Internet。

您的 WAP(接入点)只是一个桥接器,NAT 会在您192.168.0.0/24网络中的数据包发送到公共 Internet之前发生在其他地方