c++ programmer
分类: C/C++
2016-12-24 17:14:48
NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。NAT分为两大类,基本的NAT和NAPT(Network Address/Port Translator)。
① 基本的NAT实现的功能很简单,在子网内使用一个保留的IP子网段,这些IP对外是不可见的。子网内只有少数一些IP地址可以对应到真正全球唯一的IP地址。如果这些节点需要访问外部网络,那么基本NAT就负责将这个节点的子网内IP转化为一个全球唯一的IP然后发送出去。(基本的NAT会改变IP包中的原IP地址,但是不会改变IP包中的端口)。基本NAT的设备可能我们见的不多。
② NAPT不但会改变经过这个NAT设备的IP数据报的IP地址,还会改变IP数据报的TCP/UDP端口。
③ Cone NAT 对于同一源地址与不同公网IP进行通信,会创建不同的Sessiion但是会分配同一端口,这是穿透能够实现的基础。
ClientA→NAT A→Server S←NAT B←ClientB
① ClientA和ClientB都连接到Server S(UDP方式连接),这样服务器S就得到了A和B的公网ip和端口;
② 假如A想向B发送信息,则A通知S说明自己想同B通信;
③ S通知B:A想与你通信。B发送一个“打洞包”到Client A的公网地址(这个打洞包不需要携带任何有效信息)NAT A会丢弃这个包;
④ A向B的公网发送信息,由于③中打了一个B→A的洞,所以NAT B会转发这个消息到B私有地址,A实现向B发送消息。