美文网首页程序员
关于NAT和P2P约会

关于NAT和P2P约会

作者: XXFAN | 来源:发表于2016-11-06 00:37 被阅读131次

    关于NAT和P2P约会

    NAT是什么?

    简介

    网络地址转换(NAT,NetworkAddress Translation)属接入广域网(WAN)技术,它将内网地址转换为外网地址,能够让多个的内网地址共用一个外网地址来连接互联网。

    出现的原因

    IPv4公网地址不够用。

    基本设计思想

    IP不够端口来凑。NAT设备将内网的不同地址(1. IP不同;2.IP相同但端口不同)转换为外网同一个IP的不同端口,从而就减少了对外网地址的需求量。

    NAT行为类型

    按照RFC 4787的分类方法,NAT主要有两种行为:

    1. mapping Behavior(映射行为):即,内网地址向外发送数据时,NAT设备按照什么规则来创建或重用端口。
    2. Filtering Behavior(过滤行为):即,当外网地址向NAT映射的地址发送数据时,NAT设备按照什么规则来过滤数据。

    每种行为有三种类型:

    1. Endpoint-Independent(地址端口都不依赖型)
    2. Address-Dependent(地址依赖型)
    3. Address and Port-Dependent(地址端口依赖型)

    为方便理解,先假设一个已建立的NAT关系:内网地址A:a<——>NAT设备B:b<——>外网地址C:c。

    映射行为 解释说明(内网向外网发送数据时的行为)
    地址端口都不依赖型 内网地址A:a向外网发送数据,不管外网地址是多少,NAT设备都会映射为B:b。
    地址依赖型 A:a向外网发送数据,只要外网的IP地址为c,不管端口是多少,NAT设备就会映射为B:b;否则映射为其它地址。
    地址端口依赖型 A:a向外网发送数据,只有当外网的IP地址为c且端口为3,NAT设备才会映射为B:b;否则映射为其它地址。
    过滤行为 解释说明(外网向内网发送数据时的行为)
    地址端口都不依赖型 B:b收到外网数据,不管外网的IP和端口是多少,NAT设备都会转发给A:a。换句话说,来者不拒。
    地址依赖型 B:b收到外网数据,只要外网的IP地址为c,不管端口是多少,NAT设备就会转发给A:a;否则,过滤掉。
    地址端口依赖型 B:b收到外网数据,只有外网的IP地址为c且端口为3,NAT设备才会转发给A:a;否则,过滤掉。

    说明:NAT映射后,如果没有数据交互,会在一段时间内被释放掉。

    P2P约会

    背景

    因为NAT的存在,所以两个不同局域网内的终端A和终端B想要建立点对点的通信就会遇到障碍,原因:

    1. 不知道对方经过NAT转换后的公网地址;
    2. 即使知道对方的公网地址,但由于NAT过滤行为的限制,数据也可能因被过滤掉而无法传达给对方;

    下面介绍一种在某些情况下可以建立点对点通信的方法,我们拟人化地称之为P2P约会,约会过程需要借助一个约会服务器来进行牵线。

    实现步骤和原理

    步骤1:注册

    约会双方A和B要先注册到约会服务器,并定时向约会服务器发送心跳包来维持NAT不会被刷新掉。

    注册成功后,约会服务器能够获取终端的信息,主要包括:

    1. 身份唯一标示符
    2. 内网地址(例如:A:a和B:b)
    3. 外网地址 (例如:A1:a1和B1:b1)

    步骤2:约会请求

    当A想要和B约会时

    1. A先向约会服务器请求要和B进行约会;
    2. 约会服务器向A提供B的联系方式(内网地址B:b和外网地址B1:b1);
    3. 另外,约会服务器把A的约会请求转告给B,并向B提供A的联系方式(内网地址A:a和外网地址A1:a1);

    步骤3:互发PING消息

    1. 后面的事情就和约会服务器没有任何关系了,A和B同时尝试分别向对方的内外网地址发送PING消息;

      说明

      • 对于终端A,a1是和约会服务器打的洞,a2是向B发送PING消息打的洞。a1和a2可能是同一个洞,也可能不是,这取决于NAT设备的映射行为类型,当映射行为类型是“地址端口都不依赖型”时,a1等于a2;
      • 对于终端B,和终端A同理。

    什么情况下可以一方可以收到另一方的PING消息?

    1. 双方在同一个局域网内;
    2. 虽然不在一个局域网内,但满足以下几种情况;

    (此处以A向B发送的PING消息进行讲解,反之亦然。)

    • 情况一:B1的NAT过滤行为属于“地址端口都不依赖型”,其他条件不限
    • 情况二:B1的NAT过滤行为属于“地址依赖型”,且b1==b2(即B1的NAT映射行为类型属于“地址端口都不依赖型”),其他条件不限
    • 情况三:B1的NAT过滤行为属于”地址端口依赖型“,且b1==b2(即B1的NAT映射行为类型属于“地址端口都不依赖型”),且a1==a2(即,A1的NAT映射类型属于”地址端口都不依赖型“),其他条件不限

    步骤三:响应PONG

    当一方收到另一方的PING消息后,就响应PONG消息。当任意一方收到对方的PONG消息,就说明双方已经打通可以进行双向交互的通道,即约会成功。

    步骤四:do what you want

    当约会成功后,A和B就可以进行直接通信了,根据业务需要想做啥就做啥,比如下载文件等。

    相关文章

      网友评论

        本文标题:关于NAT和P2P约会

        本文链接:https://www.haomeiwen.com/subject/mobguttx.html