网站开发要做什么,在线网页转pdf,为网站做外链的文章,上海做网站的故事哪家好1.关于NAT
NAT技术#xff08;Network Address Translation#xff0c;网络地址转换#xff09;是一种把内部网络#xff08;简称为内网#xff09;私有IP地址转换为外部网络#xff08;简称为外网#xff09;公共IP地址的技术#xff0c;它使得一定范围内的多台主机只…1.关于NAT
NAT技术Network Address Translation网络地址转换是一种把内部网络简称为内网私有IP地址转换为外部网络简称为外网公共IP地址的技术它使得一定范围内的多台主机只利用一个公共IP地址连接到外网可以在很大程度上缓解了公网IP地址紧缺的问题同时也能防止外网攻击保障内网安全。如下图 NAT主要的通过对数据包头的地址替换来完成内网计算机访问外网服务器的。当内部机器要访问外部网络时NAT设备把内网机器的IP与端口号(网络层地址与传输层地址如192.168.1.100:666)转换成 NAT 的外部 IP与端口号(如100.10.10.10:1666)发送给外网服务器数据返回时再把目的IP和端口端口号(100.10.10.10:1666)的数据包替换为内网机器的IP地址和端口号(192.168.1.100:666)发给内网机器。若通讯协议的内容中有IP地址的传递如FTP协议NAT在转换时还要把数据包内涉及协议地址交互的地方替换否则协议就会出现地址混乱。在 NAT设备中维护了这个要替换地址的映射表并根据内部计算机的通讯需求维护该表。外部网络来数据包能否进入内网主要是看是否已经有可转换的映射表项若没有就会丢弃。
下图的例子是内网Client A和Client B访问外网ServerServer回复Client A 和Client B请求NAT转换IP过程中通过映射不同端口号区分不用内网主机。 NAT的外网地址可以是一个IP也可以是一个IP段形成地址池。NAT 还可以把某个外网地址直接影射给内网的某个服务器让外网的用户可以直接访问到这台服务器。NAT的工作隐藏了内网的机器但允许内网主动打开到外网的通讯 “通道”也就是建立映射表项。
NAT的内外网通讯双方不是平等的允许内网机器主动发起连接访问外网当NAT没有对应的地址转换映射表项时会建立一个映射表项数据包经过NAT地址转换后发送给外网的服务器连接建立以后可双向传送数据但却禁止反方向的主动访问在没有对应地址映射表项情况下不允许外网主动访问内网主机因为没有对应的地址映射表项用于转换地址外网发送的数据包会被丢弃。而地址映射表项的建立往往是因为内网主动访问外网或NAT静态设置。
2.NAT类型
NAT分为两大类基本NAT(Basic Network Address Translator)和NAPT(Network Address/Port Translator)。
基本NAT它仅将内网主机的私有IP地址转换成公网IP地址但并不将TCP/UDP端口信息进行转换有动态与静态之区分。静态NAT私有地址与公有地址进行一对一的映射这种一对一映射无法缓解可用公有地址短缺的问题。动态NAT私有地址与公有地址进行一对多的映射先建立公有地址池当私有地址向外通信时会从公有地址池中选择非在用的公有地址进行映射当通信结束时释放映射关系公有地址重新恢复到地址池中待用。
NAPT(Network Address/Port Translator)从名称上我们也可以看得出NAPT不但会转换经过的数据包的IP地址还会转换数据包的TCP/UDP端口。由于现在大部分都属于NAPT故这里不详细讨论基础NAT下文的NAT指NAPT。
NAT有4种类型完全锥形NAT(Full Clone NAT)、限制性锥形NAT(Restricted Clone NAT)、端口限制性锥形NAT( Port Restricted Clone NAT)、对称式NAT(Symmetric NAT)前面3种是锥形NAT(Clone NAT)。
2.1.完全锥形NAT(Full Clone NAT)
完全锥形NAT(Full Clone NAT)所有从同一个内网主机的IP和端口发送出来的请求都会被映射到同一个NAT的外网IP和端口且任何一个外网主机均可通过此映射表项发送数据包到对应的内网主机。外网主机可以主动连接内网主机有点类似于静态NAT。
2.2.限制性锥形NAT(Restricted Clone NAT)
限制性锥形NAT(Restricted Clone NAT)所有从同一个内网主机的IP(标为Src_IP)和端口(标记Src_IP)发送出来的外网请求都会被映射到同一个NAT的外网IP和端口但增加了一个限制只有被内网主机(Src_IP:Src_IP)请求过的外网主机IP才能被使用(此外网主机可使用任意端口)否则外网发送的数据包会被丢弃。限制性锥形NAT也被称为IP限制性锥形NAT或地址限制性锥形NAT。
2.3.端口限制性锥形NAT( Port Restricted Clone NAT)
端口限制性锥形NAT( Port Restricted Clone NAT)所有从同一个内网主机的IP(标为Src_IP)和端口(标记Src_IP)发送出来的外网请求都会被映射到同一个NAT的外网IP和端口但限制只有被内网主机(Src_IP:Src_IP)请求过的外网主机IP和端口才能被使用否则外网发送的数据包会被丢弃。即在IP受限锥形NAT基础上增加了端口的限制。
2.4.对称式NAT(Symmetric NAT)
对称式NAT(Symmetric NAT)所有从同一个内网主机的IP(标为Src_IP)和端口(标记Src_IP)发送到同一个外网主机(IP地址标为目的Des_IP端口标记为Des_Port)的请求都会被映射到同一个NAT的外网IP和端口。即此映射表项只能被**外网主机(Des_IP:Des_Port)**所用。
看一个例子假设有如下网络Client使用666端口访问了Server1的1999端口、1988端口和Server2的1888端口。 根据NAT类型可能产生如下映射表↔符号左表示内网主机IP和端口↔符号右表示NAT的外网IP和端口符号右表示限制条件外网主机地址IP和端口。 实际上大部运营商提供的光猫上网服务都是锥形NAT的而3G、4G网络、公共WiFi等因为安全因素都是对称式NAT。(我们通常在云上购买的服务器就可以理解为是完全锥型NAT)
3.NAT穿透
NAT技术虽然在一定程度上在解决IPv4地址、构建防火墙、保证网络安全方面都发挥了一定的作用因不允许外网主机访问内网主机却破坏了端到端的网络通信。为了让跨越NAT的主机之间有效的P2P通信需要用到NAT穿透或者叫做NAT打洞。
STUNSession Traversal Utilities for NATNAT会话穿越应用程序IETF RFC 3489是一种网络协议它允许位于NAT或多重NAT后的客户端找出自己的公网地址查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。
3.1.检测NAT类型
第一步 对称式NAT、锥形NAT检测
①Client首先使用相同的端口分别连接Server1和Server2Server1获取到NAT映射的IP1:Port1Server2获取到NAT映射的IP2:Port2
②Server2把IP2:Port2发给Server1Server1对比IP1:Port1和IP2:Port2若不相等NAT是对称式否则就是锥形NAT。 第二步 限制锥形NAT、完全锥形NAT检测
①Client首先向Server2发送消息MesgServer2获取到NAT映射的IP2:Port2和Mesg
②Server2把IP2:Port2和Mesg发给Server1
③Server1向IP2:Port2发送消息MesgClient如果收到MesgNAT完全锥形否则就是限制性锥形。 第三步 IP限制锥形NAT、端口限制锥形NAT检测
①Client首先向Server1发送消息MesgServer1使用端口Port_S1接收Mesg并获取到NAT映射的IP1:Port1
②Server1另取一闲置端口Port_Sx(Port_Sx≠Port_S1)Server1使用Port_Sx发送Mesg到IP1:Port1若Client收到MesgNAT是IP限制锥形否则是端口限制锥形。 3.2.NAT穿透原理与能力
NAT穿透原理如下图可以简要分为6步
①Client1和Client2分别与Server连接Server由此获取两者在NAT1和NAT2上的外网映射IP1:Port1和IP2:Port2
②Server把IP1:Port1发给Client2并告之连接Client1
③Client2发送请求IP1:Port1NAT1接收到数据包由于没有对应的映射表项NAT1把数据包丢弃但在NAT2上留下IP1:Port1映射表项
④Client2向Server发送消息请求Server转告Client1连接Client2Server发送IP2:Port2给Client1并告知连接IP2:Port2
⑤Client1连接IP2:Port2
⑥Client2接收到Client1连接穿透成功接收不到则穿透失败。 检测到需要穿越NAT的类型后根据NAT类型特性实施穿透策略。我们可以得出以下结论
序号NAT类型穿越1完全锥形NAT完全锥形NAT2完全锥形NATIP限制性锥形NAT3完全锥形NAT端口限制性锥形NAT4完全锥形NAT对称式NAT5IP限制性锥形NATIP限制性锥形NAT6IP限制性锥形NAT端口限制性锥形NAT7IP限制性锥形NAT对称式NAT8端口限制性锥形NAT端口限制性锥形NAT9端口限制性锥形NAT对称式NAT10对称式NAT对称式NAT
3.3.两种特殊的P2P场景
3.3.1.TCP通信双方只有一方在NAT内网
这是所有P2P场景中最简单的它使用一种被称为“反向链接技术”。 由于Client2拥有外网IP地址所以Client1可以直接发起TCP连接到Client2但如果Client2尝试发起TCP连接到Client1进行P2P通信则会失败。这时Client2不是直接向Client1发起TCP连接而是通过Server给Client1发送一个请求反过来请求Client1连接到Client2即进行反向链接Client1在收到从Server转发过来的请求后会主动向Client2发起一个TCP的连接请求这样在NAT设备上就会建立起映射表项Client1和Client2之间能够正常TCP连接。
3.3.2.UDP通信双方在同一个NAT内网
假设有内网主机Client1和Client2他们对应的NAT为NAT1和NAT2有一个外网服务器Server我们可以把Client1和Client2之间的UDP通信NAT穿透方案优化为
①Client1和Client2向Server发送自己内网IP和端口Server分别记为IP_C1:Port_C1和IP_C2:Port_C2同时Server记下Client1、Client2实际与自己通信所使用的外网IP地址和端口号即对应NAT映射表项外网IP地址和端口分别记为IP1:Port1和IP2:Port2
②Client1请求Server帮助建立与Client2的UDP连接
③Server将Client1的{IP_C1:Port_C1, IP1:Port1}发给Client2同时Server将Client2的{IP_C2:Port_C2, IP2:Port2}也发给Client1
④当Client2收到{IP_C1:Port_C1, IP1:Port1}后开始向IP_C1:Port_C1和IP1:Port1分别发送UDP数据包并且Client2会自动锁定第一个给出响应的IP地址和端口号。同理当Client1收到{IP_C2:Port_C2, IP2:Port2}后也会开始向IP_C2:Port_C2和IP2:Port2分别发送UDP数据包并且自动锁定第一个得到Client2回应的IP地址和端口号。由于Client1与Client2互相向对方发送UDP数据包的操作是异步的所以Client1和Client2发送数据包的时间先后并没有时序要求。 当Client1、Client2在同一个NAT内网时NAT1NAT2如上图正常情况下Client1、Client2分别向对方内网IP端口发送的数据包因为不需要路由先到达因而一般采用内网直联P2P通信。而Client1、Client2分别向对方外网IP端口发送的数据包能否收到取决于NAT是否支持不同端口之间的UDP数据包传输即Hairpin转换特性。
注Hairpin又被称为Hairpin NAT、Loopback NAT或Hairpin Translation翻译“端口回流”“回环NAT”。它能够让两台位于同一台NAT网关后面的主机通过对方的外网地址和端口相互访问NAT网关会根据一系列规则将对内网主机发向其NAT外网IP地址的报文进行转换并从内网接口发送给目标主机。 如上图 Client1和Client2进行P2P连接最好的方式NAT1外网地址端口直联NAT2外网地址端口但是实际上Client1、Client2和Server都无法获取到NAT1、NAT2的外网地址和端口。Client1、Client2只能向对方在NAT3上映射的外网端口发送数据包如果NAT3不支持Hairpin那么Client1、Client2就不能进行P2P通信。