文章

各种NAT类型之间的区别以及Natter打洞的基本原理

-引言
在前文中我们了解了端口映射的基本概念,在本文中我们将会了解各种NAT类型的基本概念以及区别
前文中提到了应用与外部的通信会占用一种叫端口的东西,我们知道在配置qbittorrent,tr等软件时需要我们去路由器上配置相应的端口映射以便其它客户端能够正常连接到我们,我们才会有上传,那么是不是只有在这种需要公网连接到我们的时候才需要端口映射呢?其实并不是这样的,反而端口映射无处不在,它正是NAT正常工作的基础。
我们在路由器上配置的其实是外部公网到内部局域网的端口映射规则,在我们使用各种app时,NAT也需要为我们的每接创建创建内部局域网到外部公网的端口映射规则。

-为什么内部到外部也需要端口映射?
NAT能让许多用户共享一个公网地址上网,靠的就是端口映射,假设我们的局域网下有两台电脑,它们都通过5000端口请求访问百度服务器的80端口,这时NAT就会将这两个连接映射到外网地址的不同端口上,在两台电脑自己看来,它们都使用的是各自的局域网地址5000端口连接到百度服务器的80端口,但在百度服务器看来,这两个连接分别来自同一个公网地址的两个不同端口,这便实现了同一个公网地址的共享使用

-四种NAT类型
根据私网(内网)地址和端口到NAT出口的公网地址和端口的映射方式,把NAT分为如下四种类型
1.全锥形NAT(FullConeNAT)
2.限制锥形NAT(RestrictedConeNAT)
3.端口限制锥形NAT(PortRestrictedConeNAT)
4.对称型NAT(SymmetricNAT)
通常我们又将它们称为NAT1-4
其中目前比较常用的是全锥形NAT,也就是NAT1,它是最为宽松的NAT类型,只要有内网主机曾经以一个特定端口向外网主机通信过,端口映射就会建立,任何外网主机都可以通过这个建立的映射的外部端口向该内网主机通信。举个例子,你的内网主机A使用5000端口向外网的一个服务器发起连接,NAT将该连接映射到外网地址的50088端口上,那么之后任何主机都能通过你的外网地址的50088端口连接到内网A主机的5000端口。
NAT2相较于NAT1,在回连的地址上做了限制,还是NAT1的例子,但是这回只有内网主机A通信过的那台主机才能通过你的外网地址的50088端口连接到内网A主机的5000端口。
NAT3则是在NAT2的基础上在回连主机的源端口方面做了限制,一台公网主机(IP2:Port2)想给私网主机发送报文,必须是这台私网主机先前已经给这个IP地址和端口发送过报文。(这种比较少见,直接贴原文了)
NAT4则是广大pt玩家和游戏玩家的噩梦,这种NAT方式会使每次连接到映射端口完全随机,完全无法打洞,只能靠公网服务器中转。

-Natter的打洞原理
Natter之所以只能在NAT1下打洞,是因为Natter通过使用特定端口与公网STUN服务器通信达成端口映射规则的建立,STUN服务器会将映射的外网端口发回Natter,这样只需在路由器上配置好本层NAT的端口映射规则,就能完成外网端口->软件监听端口的转换,其它客户端就可以通过这个外部端口连接到你的客户端进行下载。而在NAT2,NAT3下,外部主机的连接受到源限制,只能靠第三方服务器完成打洞。

-End

License:  CC BY 4.0