路由器如何将数据报从 Internet 转发到专用网络的接口?

网络工程 路由器 ip 网络 局域网
2022-02-22 06:49:29

正如我在路由器如何知道从服务器向网络中的哪台 PC 发送响应?如果我没有误解的话,如果专用网络中的接口向外部发送数据报,那么路由器会为该连接分配一个端口,此时一切正常,但我对它的细节有一些疑问。

  1. 这个链接的持续时间是多少?它是为单个请求分配的,还是为数据报流分配的?
  2. 路由器的IP:端口和主机的IP:端口之间的链接是通过MAC地址在数据链路级别还是通过IP地址在网络级别完成的?如果在网络级别完成,如果原始接口在对话过程中更改其 IP,路由器如何阻止对另一个接口的应答?
  3. 在一个非常大的私有网络的情况下,主机比可用端口多,路由器如何处理溢出?
1个回答
  1. 这个链接的持续时间是多少?它是为单个请求分配的,还是为数据报流分配的?

对于 TCP 等有状态协议,NAT 路由器可以查看连接何时建立以及何时关闭。为了避免僵尸连接,路由器使用额外的超时(例如TCP 老化)来清理可能(!)不再使用的旧条目。通常,这在 5 到 60 分钟之间。

对于 UDP 等无状态协议,路由器仅依赖其内部超时(UDP 老化)。这通常在 30 秒到几分钟之间。请注意,NAT 路由器无法真正知道何时不再使用连接——过早关闭连接会导致外部数据丢失。

正如@jonathanjo 恰当地指出的那样,老化和最终删除连接的必要性是 NAT 的众多问题之一。原则上,分组路由器应该是无状态设备,即。它将每个入口数据包与其路由表匹配并根据结果进行转发 - 仅此而已。NAT 需要路由器来存储、处理和清理大量有状态的数据。

  1. 端口和接口之间的链接是在数据链路级别通过 MAC 地址完成还是在网络级别通过 IP 地址完成?

您正在混合不同的图层。端口可以​​是物理层的接口,也可以是许多传输层协议(例如 TCP 和 UDP)上主机的子地址。在两个物理端口之间建立了一条链路。传输层协议可以建立一个套接字连接

整个要点本质上是多路复用:理论上,一个物理端口可以在一秒钟内为数百万个不同的逻辑连接传输数据。传输层源-目标端口对仅代表两个应用程序之间的单个逻辑连接(例如,Web 浏览器从 Web 服务器请求 HTML 页面)。

编辑后

  1. 路由器的IP:端口和主机的IP:端口之间的链接是通过MAC地址在数据链路级别还是通过IP地址在网络级别完成的?如果在网络级别完成,如果原始接口在对话过程中更改其 IP,路由器如何阻止对另一个接口的应答?

一个 NAT(或者更确切地说是NAPT)路由器拥有一个转换表,基本上是在 IP:TCP/UDP 端口内部 ~ 在 IP:TCP/UDP 端口对外部。翻译完全在网络 (IP) 和传输层(TCP、UDP、...)上完成。以太网的 MAC 地址完全不相关。

如果在网络级别完成,如果原始接口在对话过程中更改其 IP,路由器如何阻止对另一个接口的应答?

实际上,使用哪个接口向/从某个 IP 地址传输流量并不重要。但是,一旦建立了逻辑连接,两个 IP 地址都不能更改。

  1. 在一个非常大的私有网络的情况下,主机比可用端口多,路由器如何处理溢出?

大型专用网络通常不仅使用单个公共 IP 地址来处理 NAT,还使用池。此外,端口是根据需要动态分配的,而不是每个主机静态分配的。此外,连接由源 IP、源端口、目标 IP 和目标端口组成。因此,NAT 路由器可以为不同的目的地使用相同的源端口。