了解 NATting 和 PATing。路由器实际上是如何转发数据包的?

网络工程 路由 纳特
2021-07-09 10:17:09

根据手头的主题,我似乎从不同的人那里得到了不同的答案。我想真正了解路由器如何使用单个 IP 地址将流量转发到外部网络。我在问以下问题:具有单个 IP 地址的路由器如何转发来自其背后众多客户端的请求,以及当这些请求返回自身时,它如何知道是谁请求了它?我经常得到 NAT 或 PAT 相互矛盾的答案。但哪个是正确的?它们是否结合使用,为什么需要结合使用?

假设我有一个小型网络。IP 地址为 10.0.0.1 的单个路由器。在这之后,我有 2 个客户端使用 192.168 地址空间。客户端 1 尝试连接到 Google。发生这种情况时,数据包将到达路由器。路由器将其公共 IP 地址替换为源 IP,替换本地数据包的本地 192 地址。当该数据包从 Google 返回时,路由器如何知道哪个客户端请求了该数据包?此时,是否正在使用 PAT?

在我看来,路由器会记住它转发了哪些数据包以及它们最初来自哪里。然后它将使用此内存将数据包从 Google 转发回原始请求客户端。这会发生吗?或者这就是所谓的“记忆”不存在?

PAT 和 NAT 是否在每台现代路由器上结合使用?

这个过程是如何真正起作用的?

2个回答

一个简单的路由器是无状态的,即。它只是查看当前的数据包并决定它应该去哪里。

NAT 路由器转换源 IP 地址、目标 IP 地址(也称为端口转发)或两者。通常,它还转换相应的端口号 (PAT)。为了反向转换地址/端口,需要记住它当前正在转换的连接。

明白NAT真的与路由无关;将 IPv4 寻址的生命周期延长到具有大量寻址的 IPv6 无处不在是一种麻烦。

路由器接收数据包,并使用数据包上的目标地址来决定将数据包转发到下一跳的位置。这是通过在路由表中查找目的地来完成的。如果找不到数据包的目的地,则丢弃该数据包。路由器0.0.0.0/0的路由表中通常有一个默认路由 ( ) 与每个目的地相匹配,但这不是必需的。

另一方面,NAT 只是替换数据包上的源地址、目标地址或同时替换这两个地址。它实际上不路由任何东西,它可以在路由器以外的设备上使用。有些人所说的 PAT 实际上是 NAPT(请参阅RFC 2663,IP 网络地址转换器 (NAT) 术语和注意事项)。NAPT 是 NAT 的一种形式,它同时转换第 3 层和第 4 层寻址,以允许将多个设备转换为相同的地址。

路由器或防火墙通常是进行 NAT 的方便场所,但它不是路由或防火墙的要求。在可预见的未来,IPv6 有足够的地址,因此没有像 IPv4 那样的 NAT 标准。