接着上一篇来谈一谈去中心化,上一篇我讲了几种NAT,包括对称NAT、完全锥形NAT、IP限制锥形NAT和端口限制锥形NAT。这一篇我们来讲一讲NAT如何穿透,具体从以下三种组合模型来讲解。
一、完全锥形NAT+任何一种NAT
这种组合适最容易穿透的,如图所示,网关A是完全锥形NAT,网关B是任意NAT,或者调换网关类型也是一样的,这里就以前者为例:
第1步:客户端A通过网关A给服务器发送报文,报文中带有客户端A的公网IP+端口(112.93.116.102:6839)。
第2步:服务器再通过网关B给客户端B发报文,这条报文中带有客户端A的公网IP+端口;
第3步:客户端B收到这条报文后直接通过网关B给客户端A的公网IP+端口发送报文,网关B上会产生映射表,此时由于网关A 是完全锥形NAT,可以直接穿透,将报文发送给客户端A,客户端A此时通过解析报文可以获取到客户端B的公网 IP+端口(157.123.80.165:6954);
第4步:客户端A通过网关A给客户端B的公网IP+端口(157.123.80.165:6954)发送报文,此时通过查询此前生产的映射表也 可以穿透,发送给客户端B;
二、限制锥形NAT+限制锥形NAT
这种组合相较于第一种稍微有点麻烦,如图所示:
第1步:客户端A通过网关A给服务器发报文,该报文中含有客户端A的公网IP+端口(112.93.116.102:6839);
第2步:服务器再通过网关B给客户端B发报文,让客户端B给客户端A的公网IP+端口(112.93.116.102:6839)发报文;
第3步:客户端B通过网关B给客户端A的公网IP+端口(112.93.116.102:6839)发报文,此时由于网关A是限制锥形NAT过不去;
第4步:客户端B完成第3步后,即可给服务器发报文,让服务器告诉客户端A,给客户端B的公网IP+端口发报文(即给网关B法报文);
第5步:服务器接到客户端B的请求后,通过网关A将请求发送给客户端A;
第6步:客户端A通过网关A给网关B法报文,由于之前的第3步,因此网关B是可以被直接穿透的,客户端B收到报文;
第7步:客户端B通过网关B给客户端A发报文,此时网关A是可以穿透的,至此,穿透完毕。
三、限制锥形NAT+对称NAT
这种组合是最难穿透的,也是最麻烦的,如图所示:
第1步:客户端A通过网关A给服务器(192.168.2.100:9800)发报文;
第2步:服务器(192.168.2.100:9800)通过网关B给客户端B法报文,该报文中带有客户端A的公网IP+端口(112.93.116.102:6839);
第3-01步:客户端B通过网关B给服务器的另一个端口(192.168.2.100:9801)法报文,该报文中带有客户端B的一个公网IP+端口;
第3-03步:服务器(192.168.2.100:9801)通过网关A给客户端A发报文,客户端A此时获取到一个客户端B的公网IP+端口;
第3步:客户端B通过网关B给网关A发报文,此时由于网关A是限制NAT,发不过去;
第3-02步:客户端B通过网关B给服务器的第三个端口(192.168.2.100:9802)法报文,该报文中带有客户端B的另一个公网IP+端口;
第3-04步:服务器(192.168.2.100:9802)通过网关A给客户端A发报文,客户端A此时获取到第二个客户端B的公网IP+端口;
第4步:客户端B通过网关B给服务器(192.168.2.100:9800)发报文,让服务器通知客户端A给自己回报文;
第5步:服务器(192.168.2.100:9800)将该报文通过网关A发给客户端A;
第6步:客户端A收到请求后依次通过网关A、网关B发送报文给客户端B,在此过程中由于网关B是对称NAT,客户端A并不知道客户端B准确的公网端口,只能从第3-03步和第3-04步生成的端口中挨个遍历穿透,基本情况下是完全可以穿透的,OK至此网关B被穿透;
第7步:就是从客户端B通过网关B,给客户端A发报文,此时网关A由于第3步,是可以被穿透的,这种组合穿透完毕。
终于将所有的NAT组合穿透过程讲完了,希望能帮到大家,有哪里讲的不正确的也希望大家提出了相互探讨。