NAT网络原理

words: 781    views:    time: 2min
nat


总结一下为什么需要NAT网络,以及NAT网络的原理和作用

IP分类

IP本质上就是一个32位整数,分成前后两段,分别为网络号和主机号。为了可读性,用点分制将其分成了4个字节,一个字节8位从0到255。早期为了方便路由寻址,直接将IP分成了五大类,每一类规定了确定位数的网络号和主机号,后来为了更灵活高效的使用IP,改成了CIDR方法,可以根据具体情况定义网络号和主机号的位数。

NAT网络

但不管如何分类,可用IP始终是有限的,而设备总在增加趋近于无限,所以会有IP不足的问题。解决这个问题的办法是网络分为广域网和局域网,广域网使用公网IP,局域网使用私有IP,这样可以表示的设备数就可以是公网IP与私有IP的乘积,远大于32位IP原本所能表示的设备数了。但是在局域网进入广域网进行通信时就需要进行地址转换,这个转换就称为NAT(Network Address Translation)。

一般家用路由器都会自带NAT功能,当向外发送数据经过路由器时,NAT路由器会将数据包IP层里的源IP改为路由器的公网IP,以及将传输层的源端口改为路由器分配的端口,然后记录一条(私有IP:端口)与路由器(公网IP:端口)的映射记录,这个过程称为源网络地址转换SNAT(Source Network Address Translation)

相反,NAT路由器在收到返回数据时,会根据映射记录修改返回数据包中IP层的目的IP和传输层的目的端口,从而完成转发,称为DNAT(Destnation Network Address Translation)

内网穿透

NAT虽然能够上网,但前提是要内网机器主动请求公网IP才行,否则NAT设备不会存在相关的映射记录。解决办法是在公网部署一台代理服务器,并暴露一个访问域名,然后使用内网服务主动与代理服务器建立连接,这样在NAT设备上就有了内网机器与代理服务器之间映射关系,然后在代理服务器上建立应用层代理(管理与内网的连接然后对外开放)。如果用户去访问代理服务器,就可以与内网机器进行互通,从而可以实现内网穿透

聊天服务

两个独立局域网中的主机进行微信或QQ聊天时也并不是直接连接的,而是都连接到了公网的聊天服务器。两边的NAT路由器都会保存相应的映射关系,消息发送时都是先发到聊天服务器,然后再发送到另一边的客户端,这也是为什么客户端就算离线了,重新上线还能收到之前消息的原因。


参考: