NAT需要五元组(源地址,源端口,目的地址,目的端口,四层协议),它唯一标识一条Session。
只有NAT内的主机主动向外发送封包(或者在防火墙上做端口映射)时,防火墙才会建立对应的Session。所以,在A和B进行通讯前,必须要让对方的防火墙建立关联到自己的Session,而这就必须要靠对方向自己发送消息来让对方的防火墙建立Session。换言之,通讯前,A和B必须要不断的向对方发送消息(用来穿透对方的防火墙),直到双方都收到对方的消息为止。注意:这里绝大部分防火墙上的NAT都有超时时间,如果你向对方防火墙发送穿透消息,但是对方在一定时间内没有回复的话,你本地防火墙也会关闭这条新建立的Session。所以一般穿透都是不断的向对方发送,一直到双方都接收到消息为止

解决方案 »

  1.   

    OK,Good,需要了想要的。突然发现TCP的打洞估计有点麻烦,因为服务器无法直接向客户端发送信息,所以服务器端的NAT无法建立session,而客户端可以主动外连建立对应的session,这个该去看看咋个实现了。
      

  2.   

    TCP穿透只存在于理论上的实现方案,现实中我还没有看见过实现案例(也可能是收费方案)。
      

  3.   

    追问几个问题:
    1,一般的路由器比如家用路由器是否也具备NAT的功能?!
    2,多级NAT网络架构的时候,NAT设备必须支持发夹转化或者是回环转化的功能,但又说有的NAT设备不支持回环转化,但是感觉多级NAT网络架构十分常见,太多了,这个结构下,比如QQ,怎样保证通信??