2)Address and Port-Dependent Mapping:
对于一个内网的EndpointP,如果与之通信的外部为EndpointGB1,那么EndpointP就会被NAT映射成EndpointG1;如果与之通信的外部为EndpointGB2,那么EndpointP就会被NAT映射成EndpointG2。也就是只要之通信的外部为EndpointGB发生变化,那么映射的外网EndpointG就会变化。
2)Address and Port-Dependent Filtering:
对于这种过滤类型,NAT在自己的一个外网EndpointG1收到来源是EndpointGA1数据包,这个时候NAT要判断自己是否曾经通过自己的EndpointG1给EndpointGA1发送过数据包,如果曾经发过,那么NAT就允许该数据包通过NAT并路由给内网与之对于的内网EndpointP1;如果没发过,那么NAT会不允许该数据包通过NAT。
[4] Server S收到失败反馈,通过ConnectA1发送指令让Client A 启动端口映射预测过程。端口映射预测可以简单、可以复杂,大体就是让Client A往Server的不同端口、不同ip发送数据包,以便Server收集到Client A的端口映射样本,以便能够根据样本的端口映射变化规律预测Client A的NAT的Mapping规则。
[5] Server S根据[4]的预测情况,通过ConnectB1发送给Client B接下来Client A可能的映射端口列表也就是可能的外网EndpointGA1、EndpointGA2 ... EndpointGAn,然后让Client B都往这些外网EndpointGA1、EndpointGA2 ... EndpointGAn发送数据包。
[6] 然后Server S通过ConnectA1发送指令让Client A 先bind内网EndpointPA然后往Client B的外网EndpointGB发送Connect请求(这个时候,假设预测算法有效的话,那么Client A的内网EndpointPA将会映射为EndpointGAi),由于在步骤[5],Client B已经往Client A的EndpointGAi发送过数据包,根据过滤规则(Address and Port-Dependent Filtering),Client B的NAT会允许Client A的EndpointGAi的数据包通过NAT并转发给Client B。于是,它们就建立其连接进行通信。