路由器端口分配如何不会耗尽

网络工程 路由
2022-02-08 00:05:00

让我们举一个经典的例子。

我的电脑向 stackexchange.com 发送了一个 GET 请求。

以下是我对程序的理解:

为了发送这个请求,我的计算机为这个请求分配了一个临时端口,这就是路由器发送响应的端口。我的路由器会做同样的事情:它会分配一个临时端口,期望从它的路由器获得响应。

一直这样下去,每个路由器分配自己的临时端口并转发请求,直到我们到达一个拥有两台计算机都在自己的NAT下的顶级路由器,消息将被发送到stackexchange的公共IP,它会响应顶部路由器的临时端口,每个路由器都会将消息转发回其子路由器中的临时端口,直到我的计算机得到响应。

然后我的电脑会关闭连接,所有路由器都会递归释放端口。

真的是这样吗?如果是这样,我希望顶级路由器的端口分配始终处于满负荷状态。由于它被设计限制为 65K,并且连接的持续时间不取决于它,而是取决于客户端和服务器,因此没有 CPU 或内存能力可以帮助它。那么它实际上是如何工作的呢?

2个回答

这不是它的工作原理。路由器在第 3 层运行。它们不处理传输层信息(端口),执行 NAT 时除外。这是由您的 PC 和您连接的服务器完成的。所有中间路由器只是将 IP 数据包转发到目的地。

每个路由器分配自己的临时端口并转发请求,直到我们到达顶级路由器

不,只有在内部路由器执行 NAT 操作时才会在您的内部路由器上分配端口。在通过网络转发数据包期间,其他路由器不会在它们上分配临时端口。

在带有服务器的大型环境(数据中心或其他东西)中,他们可以使用虚拟 IP,因此一台服务器可以有 5 个私有 IP 地址,这样就有可能寻址 5 次 ~64k 端口。所以这就是从外部网络的内部部分看起来的样子,也没有问题,因为端口分配包含您的 IP 地址和端口,因此靠近服务器的路由器可以进行转换:您的源 IP 地址 + 您的源端口到 on一台服务器的 5 个本地 IP 地址。要体验端口耗尽,您需要打开到一台服务器的超过 64k 连接,并且您的 PC 仍然很可能会遇到端口耗尽,而不是可以拥有多个私有 IP 的服务器。