路由器何时会从其 NAT 表中删除条目?

路由器何时会从其 NAT 表中删除条目?

路由器何时会从其 NAT(网络地址转换)表中删除一个条目?

我们家里使用的大多数路由器都维护一个 NAT 表,用于将公网 IP 和端口转换为私网 IP 和端口。这是一种保护本地网络和弥补公网 IPv4 地址短缺的极好机制。但是,NAT 可用于映射的公网端口总数是有限的资源,最多只有 65536 个(16 位整数的数量)。所以,我猜路由器必须维护其 NAT 表并在某个时间回收已完成的映射。

但是,路由器如何识别已完成的连接并安全地将其删除?

答案1

但是,路由器如何识别已完成的连接并安全地将其删除?

对于 TCP/SCTP,它对 TCP 端点相互发送的常见“连接关闭”消息(FIN 或 RST)做出反应。(并且通常还存在空闲超时,例如,即使未看到关闭消息,空闲连接也会在 7 天后被遗忘。)

对于 UDP/ICMP/等,它有一个简单的空闲超时(但要短得多)——通常流在空闲 5 分钟后就会被遗忘。路由器实际上并不知道无论流是否已经结束,它都只是假定它已经结束。

(基于 UDP 的协议(例如 VPN 服务)通常可以选择发送定期的“保持活动”数据包,以防止流被中间 NAT 和防火墙遗忘。)

还要注意的是,每个协议都有独立的端口命名空间。也就是说,TCP 端口 1-65535 完全独立于 UDP 端口 1-65535 或 SCTP 端口 1-65535。某些协议(例如 GRE 和 ESP)根本没有端口(因此与“1:多”NAT 不兼容)。

但是,NAT 可用于映射的公共端端口总数是有限的资源,最多只能为 65536(16 位整数的数量)。

从技术上讲,相同的本地端口号只要整个 (localIP、remoteIP、localport、remoteport) 组合保持不同,就可以重复使用。因此,不需要总共有 ​​65535 个本地端口 - 实际上,每个不同的 remoteIP:remotePort 都可以有 65535 个本地端口。

但只有一些NAT 网关实际上以这种方式重用端口 - 据我所知,它使 NAT 穿越/打洞变得更加困难,并且使 STUN 等协议几乎无用。

相关内容