网络通讯----NAT与内网穿透

文章目录[x]
  1. 0.1:NAT定义
  2. 0.2:NAT工作机制
  3. 0.3:NAT类型
  4. 0.4:NAT技术的优缺点
  5. 0.5:内网穿透
  6. 0.6:穿透原理

NAT定义

        NAT(Network Address Translator,网络地址转换)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决IPv4地址短缺而开发的技术。

NAT工作机制

  • 网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向流量必须都要经过NAT网关;
  • 网络访问只能先由私网侧发起,公网无法主动访问私网主机
  • NAT 路由器在两个访问方向上完成两次地址的转换或翻译,出方向做源信息替换,入方向做目的信息替换;
  • NAT 路由器的存在对通信双方是保持透明的;
  • NAT 路由器为了实现双向翻译的功能,需要维护一张关联表,把会话的信息保存下来。

NAT类型

        NAT分为两大类,基本的NAT和NAPT(Network Address/Port Translator)。

        基本的NAT,它仅将内网主机的私有IP地址转换成公网IP地址,但并不将TCP/UDP端口信息进行转换,有动态与静态之区分。由于现在大部分都属于另一种类型,即NAPT,故这里不详细讨论基础NAT。 另外一种NAT叫做NAPT(Network Address/Port Translator),从名称上我们也可以看得出,NAPT不但会改变经过这个NAT设备的IP数据报的IP地址,还会改变IP数据报的TCP/UDP端口。

        NAPT又分为锥型(Cone)和对称型(Symmetric),它们的区别在于,在NAT已分配端口号给Client A的情况下,如果Client A继续用1235端口与另一外网服务器通讯,锥型NAT还会继续用原来62000端口,即所分配的端口号不变。而对于对称型NAT,NAT将会分配另一端口号(如62001)给Client A的1235端口。也就是说,同一内网主机同一端口号,对于锥型NAT,无论与哪一外网主机通讯,都不改变所分配的端口号;而对于对等型NAT,同一内网主机同一端口号,每一次与不同的外网主机通讯,就重新分配另一个端口号。

NAT技术的优缺点

优点

  • 节省合法的公有 IP 地址(最大的优点)
  • 当网络发生变化时,避免重新编址
  • 对外隐藏内部地址,增加网络安全性

缺点

  • 无法从 NAT 的外部向内部服务器建立连接
  • 转换表的生成和转换操作都会产生一定的开销
  • 增加了网络通讯复杂度
  • 通信过程中一旦 NAT 遇到异常需重新启动时,所有的 TCP 连接都将被重置。即使备置两台 NAT 做容灾备份,TCP 连接还是会被断开。

内网穿透

        上图是一个非完整版内外网通讯图由内网端先发起,内网设备192.168.1.2:6677发送数据到外网时候必须经过NAT会转换成对应的外网IP+端口,然后在发送给外网设备,外网设备回复数据也是发给你的外网IP+端口。这只是单向的内去外,那反过来,如果外网的设备需要主动访问我局域网里的某一个设备是无法访问的,因为这个时候还没做NAT转换所以外网不知道你内网设备的应用具体对应的是哪个端口或者不允许入站,这个时候我们就需要内网穿透了,内网穿透也叫NAT穿透。

穿透原理

        如上图所示经NAT转换后的内外网地址+端口,会缓存一段时间,在这段时间内192.168.1.2:6677和112.48.69.2020:8899的映射关系会一直存在,这样你的内网主机就得到一个外网地址(因为存在这个外网的地址,是内网穿透的基础),这个对应关系又根据NAT转换方法类型的不同,得用对应的方式实现打洞,NAT转换方法类型有下列几种:

     (1)Full cone NAT:即著名的一对一(one-to-one)NAT。
       一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。任意外部主机都能通过给eAddr:port2发包到iAddr:port1(纯天然不用打洞!)

     (2)Address-Restricted cone NAT :

限制地址,即只接收曾经发送到对端的IP地址来的数据包。

一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。任意外部主机(hostAddr:any)都能通过给eAddr:port2发包到达iAddr:port1的前提是:iAddr:port1之前发送过包到hostAddr:any. "any"也就是说端口不受限制(只需知道某个转换后的外网ip+端口即可。)

      (3)Port-Restricted cone NAT:

类似受限制锥形NAT(Restricted cone NAT),但是还有端口限制。

        一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。一个外部主机(hostAddr:port3)能够发包到达iAddr:port1的前提是:iAddr:port1之前发送过包到hostAddr:port3.(双方需要各自知道对方转换后的外网ip+端口,然后一方先发一次尝试连接,另一方在次连接过来的时候就能直接连通了。)

      (4)Symmetric NAT(对称NAT)

       每一个来自相同内部IP与port的请求到一个特定目的地的IP地址和端口,映射到一个独特的外部来源的IP地址和端口。

       同一个内部主机发出一个信息包到不同的目的端,不同的映射使用外部主机收到了一封包从一个内部主机可以送一封包回来(只能和Full cone NAT连,没法打洞,手机流量联网就是,同一个本地端口连接不同的服务器得到的外网第地址和IP不同!)
 .
 .
        根据上面的NAT类型不同穿透难度也是随之增加。在NAT穿透结论里,只有两种组合不能穿越,即两侧都是对称型、两侧分别是端口限制锥型和对称型。虽然这两种情况占四种组合可能性的比并不高。但是,理论是美好的,现实是残酷的,生活中对称型NAT的数量并不少。只要是大型组织的网络,一般都采用对称型NAT,因为这类NAT安全性最好。要实现这两种组合情况的穿透一般是通过预测端口号,通过多次尝试找到可以连接的端口,但是成功率不是100%。

参考资料

https://www.cnblogs.com/qqljcn/p/13738595.html
https://info.support.huawei.com/info-finder/encyclopedia/zh/NAT.html
https://zhuanlan.zhihu.com/p/340698491
https://www.zhihu.com/question/38729355
点赞

发表回复

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像(已失效)