That seems largely correct to me. As far as my understanding goes, the nodes will not 'connect' / set up an open socket to a gateway but just send (not "TCP"-like, but UDP), and gateways that recognise the network key will answer, and might give the device a device ID (OTAA). I suppose the nodes could try different network keys and see what's giving them a response (this might be multiple from multiple gateways), and optionally even twitch between different connections. But maybe @Thomas can say something insightful here.
The polyforwarder simply sends all messages to multiple servers upstream.