我们知道,内网的主机将向外网发送数据可以通过NAT获取一个合法的ip,进而向外部发送数据。
我疑惑的是,当外部向该主机返回数据时,因为目的IP是NAT分配的,必然数据会发送给NAT,那么NAT如何确定该数据包应该返回给哪个内网的主机的呢?
网上的一个解释是,NAT在为内部主机分配地址时会同时为该主机分配一个虚拟端口号,在收到返回数据时通过端口号确定数据的目的主机,但如果这样的话,目的主机在收到数据后,因为端口号被占用(虚拟端口号),那么该主机又是如何确定数该提交给哪个进程的呢?
你的话越看越难懂。
NAT机的虚拟端口是和外部通讯用的,NAT程序本身会侦听这个端口,受到数据后再通过内网把数据转给内网主机。
啊,我原先理解有问题,NAT分配的IP 与端口号是与内部主机的内部IP以及端口号是绑定的(不单是主机IP),这么的话就能理解了。
路由器上维护的是NAT分配的IP加端口到内网机器的IP加端口,这样返回的数据,路由器就知道该怎么转发回去了