Let's take a classic example.
My computer sends a GET request to stackexchange.com.
Here's how I understand the procedure:
For sending this request, my computer allocates a temporary port for this request, and that's the port where the router will send its response. My router will do the same: it will allocate a temporary port, to which it will expect to get the response from its router.
It goes on and on, each router allocates its own temporary port and forwards the request, until we get to a top router that has both computers under its own NAT, the message will be sent to stackexchange's public IP and it will respond to the top router's temporary port, and each router will forward the message back down to the temporary port in its child router until my computer gets the response.
Then my computer will close the connection, and all the routers will recursively free the port.
Is that really how it works? And if it does, I would expect the top router's port allocation to always be in full capacity. Since it's limited by design to 65K, and the duration of the connection does not depend on it but on the client and server, there's no CPU or memory power that can help it. So how does it actually work?