路由器上启用NAT后会有保存一个会话表,里面包含着每一条会话的ID、协议、源地址、源端口、目的地址、目标端口、转换后的地址、转换后的端口、条目老化时间、进行转换所需要的IP报文序列号和确认号的差值等等
如果说是你内部的192.168.1.2这个地址首先发起会话,那么就会将这个连接的详情写入NAT的会话表,当外部的信息返回时根据这个会话表记录的各项元素就会找到192.168.1.2这个主机了
如果是外部先向你的内部主机发起会话,报文到达你的路由器时,首先查看有没有已经保存的会话表,没有的话就会根据你所设定的NAT规则来建立一条会话记录写进会话表,如果你事先没有关于192.168.1.2这个内网地址的NAT规则 那么这个外部发起的会话就无法建立
不过如果你说的外部进来的数据是承载于某个存在外部服务器的网络程序的 比如说QQ 那么在你登陆QQ的时候 实际上你和腾讯的服务器之间已经建立了连接 你的这个连接已经被记录到你的MAT会话表里面了 当你的好友从外面发信息进来时 实际上就是根据你和腾讯服务器之间的NAT会话表(或者由此产生的一些规则而建立的新的NAT会话表)进来的。当然这里面还是有一些细节,不过每个程序或者每个路由器上或许实现不同。
总之不管细节如何 原则上就是当外面的数据来时 先查看有没有相关的会话表 有的话就按照会话表的转换结果将数据转发给内网IP主机 如果没有相关的NAT会话表 就一定要建立一条 然后才能把数据转进来