NAT转换

距离上一次总结“路由原理”已经十多天了,之所以是拖这么长,是因为期间在通过Socket编程运用“NET转换原理”的时候出现了一些障碍,至今没有完全解决!不管怎样我们还是先总结一下吧!

首先必须来了解一下何为“NAT转换”!“NAT转换”存在的最直接的意义就是解决了IP地址不够用的现状。“局外人”会认为日常生活中我们每台电脑所用的IP地址是唯一的,因为只有这样才不会产生不必要的“冲突”。其实这是不准确的。IP地址其实是分为“公网IP”和“私网IP”,只有公网IP才是全球唯一的。如果我们每个人的IP地址都是唯一的,那么以网络用户发展的速度,IP地址早已经消耗殆尽!如果你上网是通过路由器的话这样你就可以发现你的IP是“168.192.1.100”而另外一个寝室的路由器下一台电脑很可能也会有“192.168.1.100”。而如果我们在搜索引擎栏里输入“IP”时,会发现我们两台电脑的“IP”很可能是一样的。这就是所谓的“NET地址转换”,而具有NET地址转换功能的路由器被称为“NET路由器”。其实就是,当我们的私网下的电脑和外界Internet网络连接的时候,外界并不知道我们的私网IP,而只会默认为你私网主机所处的“公网IP”。而“NET路由器”功能就是想办法把你的私网IP映射成公网IP从而取得和外界的联系,而Internet网络在向你的主机发送数据的时候,并不知道你的内网IP,而只会发送到你所在的公网IP上,由于先前你已经向所在外网IP发送了请求信息,所以NET设备会自动记录下这个“映射表”,从而把数据回送给你的主机。还需要知道的是,国际上规定以下几类为私网IP地址:
10.0.0.0/8: 10.0.0.0~10.255.255.255
172.16.0.0/12: 172.16.0.0~172.31.255.255
192.168.0.0/16: 192.168.0.0~192.168.255.255
所以,你只要一看到你的IP地址在以上范围,那么你的主机一定就处在私网中。


上面所讲叙述的NET 转换,在实际的项目中其实被称为“内外网通信问题”,而解决的方法又被称为“NET打洞技术”。而且在实际的网络地址转换中更多的用的是“NAPT地址转换”:网络地址和端口号转换。也就是说除了要转换IP地址还要转换端口。这里的端口并不是物理硬件上的端口,我们可以理解为计算机软件不同进程的“标志”,也就是说数据报虽然转发到我的主机上了,到底是主机上哪个程序进程进行接收也是需要一个“标志”来区分的。这个标志就是端口。举个NAPT的例子就是:

192.168.1.100/24000—–>172.38.1.5/60001.


而通常来说,实际通信的两台主机一般都是在内网下的,所以问题变为“不同内网间的通信”。而实现不同内网间的通信,前提必须得有个公网IP服务器。我们举个例子吧:
这里写图片描述

首先,Client1向Server发起通信,并传送数据。这个时候NAT1自动为Client随机分配一个Client1端口60000.此时:
192.168.0.20:40000—>202.187.45.3:60000
同时服务器吧数据存在某个缓存里!这时Client2也向Server发起通信,NAT2随机分配Client2端口号60001,此时:
192.168.010:40001—>187.34.1.56:60001
这个时候,Client2已经和Server建立了NAT映射关系,我们这个时候把把已经缓存的数据转发到:187.34.1.56:60001

那么NAT2将会知道实际数据的转发目的地址为192.168.010:40001。这样我们就间接的建立了两个不同主机间的通信。


而关于NAPT,还有一个分类的问题,这里不在赘述,引用文库节选:

这里写图片描述

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

①完全锥形(Full Cone)NAT 这种NAT内部的主机A连接过外网主机C后,NAT会打开一个端口。然后外网的任何发到这个打开的端口的UDP数据报都可以到达A,不管是不是C发过来的[12]。
例如 A: 192.168.8.100 NAT: 202.100.100.100 C: 292.88.88.88 A(192.168.8.100:5000) -> NAT(202.100.100.100:8000) -> C(292.88.88.88:2000)
任何发送到NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000)。
②受限制锥形(Restricted Cone)NAT 这种NAT内部的主机A连接过外网的主机C后,NAT打开一个端口。然后C可以用任何端口和A通信,但其他的外网主机不可以。
例如 A: 192.168.8.100 NAT: 202.100.100.100 C: 292.88.88.88 A(192.168.8.100:5000) -> NAT(202.100.100.100:8000) -> C(292.88.88.88:2000)
任何从C发送到NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000)。
③端口受限制锥形(Port Restricted Cone)NAT 这种NAT内部的主机A连接过外网的主机C后,NAT打开一个端口。然后C只能用原来的端口和A通信,其他的外网主机不可以。
例如 A: 192.168.8.100 NAT: 202.100.100.100 C: 292.88.88.88 A(192.168.8.100:5000) -> NAT(202.100.100.100:8000) -> C(292.88.88.88:2000) 只有C(202.88.88.88:2000)发送到 NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000)。


另外还需要注意的是实际网络的拓扑结构还是比较复杂的,并不简单的“外网—NAT—-私网”。所以具体的问题还要根据实际情况分析。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值