让我们举一个经典的例子。
我的电脑向 stackexchange.com 发送了一个 GET 请求。
以下是我对程序的理解:
为了发送这个请求,我的计算机为这个请求分配了一个临时端口,这就是路由器发送响应的端口。我的路由器会做同样的事情:它会分配一个临时端口,期望从它的路由器获得响应。
一直这样下去,每个路由器分配自己的临时端口并转发请求,直到我们到达一个拥有两台计算机都在自己的NAT下的顶级路由器,消息将被发送到stackexchange的公共IP,它会响应顶部路由器的临时端口,每个路由器都会将消息转发回其子路由器中的临时端口,直到我的计算机得到响应。
然后我的电脑会关闭连接,所有路由器都会递归释放端口。
真的是这样吗?如果是这样,我希望顶级路由器的端口分配始终处于满负荷状态。由于它被设计限制为 65K,并且连接的持续时间不取决于它,而是取决于客户端和服务器,因此没有 CPU 或内存能力可以帮助它。那么它实际上是如何工作的呢?