架构深渊

慢慢走进程序的深渊……关注领域驱动设计、测试驱动开发、设计模式、企业应用架构模式……积累技术细节,以设计架构为宗。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Symmetric NAT与Cone NAT

Posted on 2008-10-12 16:41  chen eric  阅读(3986)  评论(0编辑  收藏  举报
Symmetric NAT与Cone NAT
     现在我们知道,通过NAT,,内网的计算机向外连结是很容易的。NAT对于内网和外网的计算机是透明的。内网的机器欲访问外面的机器,可在NAT上“打洞”,而且这个“洞”是有方向的。也就是让NAT建一个session,从而建立映射。
    那么,如果同一个进程,与外网的两台机器,同时建立联系,情况又是如何呢。
 
    如图所示:Client A的原来那个Socket(绑定了1234端口的那个UDP Socket),现在又要向另外一个Server S2发送了一个UDP包,那么这个UDP包在通过NAT时会怎么样呢?

    这时可能会有两种情况发生:
1)是NAT再次创建一个Session,并且再次为这个Session分配一个端口号(比如:62001)。
2)是NAT再次创建一个Session,但是不会新分配一个端口号,而是用原来分配的端口号62000。
前者NAT叫做Symmetric NAT,后者叫做Cone NAT。
 
    当然,我们期望的NAT是第二种。呵呵,如果你的NAT刚好是第一种,那么很可能会有很多P2P软件失灵。(不过可以庆幸的是,现在绝大多数的NAT属于后者,即Cone NAT)