加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

穿越NAT的迷雾:深入理解网络地址转换和NAT穿透,以及STUN、TURN、ICE的关系

发布时间:2019-08-20 05:57:45 所属栏目:教程 来源:我不想种地
导读:副标题#e# NAT是什么? NAT是Net Address Translation的缩写,即网络地址转换。 NAT部署在网络出口的位置,位于内网跟公网之间,是连接内网主机和公网的桥梁,双向流量都必须经过NAT,装有NAT软件的路由器叫NAT路由器,NAT路由器拥有公网IP。 你的家庭和办公
副标题[/!--empirenews.page--]

NAT是什么?

NAT是Net Address Translation的缩写,即网络地址转换。

NAT部署在网络出口的位置,位于内网跟公网之间,是连接内网主机和公网的桥梁,双向流量都必须经过NAT,装有NAT软件的路由器叫NAT路由器,NAT路由器拥有公网IP。

穿越NAT的迷雾:深入理解网络地址转换和NAT穿透,以及STUN、TURN、ICE的关系

你的家庭和办公网络环境大多是经过NAT路由中转的方式联网。这也意味着你在家PC通过WIFI联网,你在PC上通过命令行(ifconfig)查看到的IP地址(内网),跟通过baidu查看到的IP地址(公网),不一样,这也能证明你的PC处于NAT后面。

NAT解决什么问题?

NAT主要用来解决IPv4地址不够用的问题。

IPv4用32位表示网络地址,最大能表示2的32次方(2^32=40亿)个IP地址,但随着各种联网设备的快速增长,IPv4地址不够用了,IPv6又远水不解近渴,怎么办?NAT技术应运而生。

NAT是怎么工作的?

内网地址:RFC1918规定了三个保留地址段落:

  • 10.0.0.0-10.255.255.255;
  • 172.16.0.0-172.31.255.255;
  • 192.168.0.0-192.168.255.255。

这三个范围分别处于A、B、C类的地址段,不向特定的用户分配,被IANA作为私有地址保留。这些地址可以在任何组织或企业内部使用,和其他Internet地址的区别就是,仅能在内部使用,不能作为全球路由地址。

NAT后面的内网主机使用内网地址,也叫本地地址,是主机上内网上的标识。内网主机要跟公网通信,必须经过NAT中转,NAT会自动为经过的网络包做内外网地址转换(这也是NAT的含义),公网地址是主机在互联网上的标识。

NAT原理:内网主机向外网主机发送的网络包,在经过NAT时,IP和PORT会被替换为NAT为该主机分配的外网IP/PORT,也就是该内网主机在NAT上的出口IP/PORT,外网主机收到该网络包后,会视该网络包是从NAT发送的;外网主机只能通过NAT为该内网主机分配的外网IP/PORT,向它发送网络包,内网主机的本地地址对外界不可见,网络包在经过NAT的时候,会被NAT做外网IP/PORT到内网IP/PORT的转换。

可见,NAT维护内网主机内网地址和在NAT上为它分配的外网地址之间的映射关系,需要维护一张关联表。NAT在两个传输方向上做两次地址转化,出方向做源(Src)信息替换,入方向做目的(Dst)信息替换,内外网地址转换是在NAT上自动完成的。NAT网关的存在对通信双方是透明的。

那NAT是如何缓解IPv4地址枯竭问题的呢?答案是端口多路复用,通过PAT(Port Address Translation),让NAT背后的多台内网主机共享一个外网IP,最大限度节省外网IP资源。

NAT背后的多台内网主机是如何实现共享一个外网IP的呢?它是通过修改外出数据包的源IP和端口。

假设内网主机H1和H2位于NAT之后,H1通过本地地址10.0.0.1:port1给公网主机X发送数据包,在经过NAT的时候,该数据包的IP:PORT被修改为NAT的外网地址1.2.3.4:2222。

H2通过本地地址10.0.0.2:port2向公网主机X发送数据包,在经过NAT的时候,该数据包的ip:port被修改为NAT的外网1.2.3.4:3333。

穿越NAT的迷雾:深入理解网络地址转换和NAT穿透,以及STUN、TURN、ICE的关系

虽然H1和H2的IP都被映射到了相同的NAT外网IP(1.2.3.4),但NAT为它们分配了不同的端口(2222和3333),所以可以通过端口区分H1和H2。之后公网主机X向内网主机H1发送网络包的时候,只需要把1.2.3.4:2222作为目标地址:端口,就可以由NAT自动完成转换,正确转交到H1主机。

这便是基于端口复用的NAT方式(NPAT)的工作原理。通过将内网不同连接(主机到NAT)映射到同一公网IP的不同端口,从而实现公网IP的复用和解复用,这种一对多的方式也叫做端口转换PAT或IP伪装。

NAT的约束

NAT把网络分为公网和内网,内网主机可以给外网主机直接发送网络包,而外网主机却不能主动给内网主机发送网络包,也就是说网络通信必须由内网侧主动发起,公网主机不能主动访问内网主机,这是NAT带来的限制和约束。

内网主机主动给外网主机发送过网络包之后,外网主机才有可能给内网主机发送网络包。

NAT的类型

NAT的实现方式分静态转换、动态转换和端口多路复用三种,但目前用的最多的还是端口多路复用,是最典型的一种应用模式。

穿越NAT的迷雾:深入理解网络地址转换和NAT穿透,以及STUN、TURN、ICE的关系

首先,从大的层面上,端口复用型NAT(Net Address Port Translation)可以分为对称型NAT和非对称型NAT。

  • 对称型NAT(Symmetric NAT),内网某主机向公网的不同网络地址(或端口)发送2个不同的网络包,对称型NAT会为这2个不同的网络包产生2个不同出口端口号。换言之,NAT网关会把内部主机“地址端口对”和外部主机“地址端口对”完全相同的报文看作一个连接,在NAT网关上创建一个公网“地址端口对”作为出口地址,只有收到报文的外部主机从对应的端口对发送回应的报文,才能被转换。对称型NAT无法打洞,只能通过TURN Server转发。
  • 非对称型NAT(也叫锥型NAT),内网某主机向外网主机发送网络包,NAT会为该内网主机生成一个公网(出口)IP:PORT,之后,不管该内网主机会通过该出口IP:PORT跟外网所有(如果可以)主机通信,而不会被映射到其他端口(出口IP显然也不会变)。

锥型NAT细分:

  • Full Cone NAT(全锥型NAT):只要内网某主机给外网地址主动发送过一个网络包(NAT会为之生成公网出口IP:PORT),外网任何主机都可以通过该内网主机在NAT上的出口IP:PORT,向该内网主机发送网络包,也就是对外网主机IP和PORT都不设限,这是最宽松的类型。
  • Restricted Cone NAT(IP受限型NAT):如果内网某主机,给外网某IP发送过一个网络包,则外网可以通过该IP向该内网主机发送网络包,注意,只要以该IP作为网络包src ip就行,其他IP作为src不行,不限制端口号。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读