- 这个链接的持续时间是多少?它是为单个请求分配的,还是为数据报流分配的?
对于 TCP 等有状态协议,NAT 路由器可以查看连接何时建立以及何时关闭。为了避免僵尸连接,路由器使用额外的超时(例如TCP 老化)来清理可能(!)不再使用的旧条目。通常,这在 5 到 60 分钟之间。
对于 UDP 等无状态协议,路由器仅依赖其内部超时(UDP 老化)。这通常在 30 秒到几分钟之间。请注意,NAT 路由器无法真正知道何时不再使用连接——过早关闭连接会导致外部数据丢失。
正如@jonathanjo 恰当地指出的那样,老化和最终删除连接的必要性是 NAT 的众多问题之一。原则上,分组路由器应该是无状态设备,即。它将每个入口数据包与其路由表匹配并根据结果进行转发 - 仅此而已。NAT 需要路由器来存储、处理和清理大量有状态的数据。
- 端口和接口之间的链接是在数据链路级别通过 MAC 地址完成还是在网络级别通过 IP 地址完成?
您正在混合不同的图层。端口可以是物理层的接口,也可以是许多传输层协议(例如 TCP 和 UDP)上主机的子地址。在两个物理端口之间建立了一条链路。传输层协议可以建立一个套接字连接。
整个要点本质上是多路复用:理论上,一个物理端口可以在一秒钟内为数百万个不同的逻辑连接传输数据。传输层源-目标端口对仅代表两个应用程序之间的单个逻辑连接(例如,Web 浏览器从 Web 服务器请求 HTML 页面)。
编辑后
- 路由器的IP:端口和主机的IP:端口之间的链接是通过MAC地址在数据链路级别还是通过IP地址在网络级别完成的?如果在网络级别完成,如果原始接口在对话过程中更改其 IP,路由器如何阻止对另一个接口的应答?
一个 NAT(或者更确切地说是NAPT)路由器拥有一个转换表,基本上是在 IP:TCP/UDP 端口内部 ~ 在 IP:TCP/UDP 端口对外部。翻译完全在网络 (IP) 和传输层(TCP、UDP、...)上完成。以太网的 MAC 地址完全不相关。
如果在网络级别完成,如果原始接口在对话过程中更改其 IP,路由器如何阻止对另一个接口的应答?
实际上,使用哪个接口向/从某个 IP 地址传输流量并不重要。但是,一旦建立了逻辑连接,两个 IP 地址都不能更改。
- 在一个非常大的私有网络的情况下,主机比可用端口多,路由器如何处理溢出?
大型专用网络通常不仅使用单个公共 IP 地址来处理 NAT,还使用池。此外,端口是根据需要动态分配的,而不是每个主机静态分配的。此外,连接由源 IP、源端口、目标 IP 和目标端口组成。因此,NAT 路由器可以为不同的目的地使用相同的源端口。