内网和公网

其实就是局域网和广域网的

广域网可以理解为一个很大的局域网,这里面的设备通过光缆或者卫星进行通信(链接是需要介质的)

如果局域网和局域网之间连介质都没有,那么不可能相互访问,比如我家里面的几个树莓派连在我的一个交换机上,这个交换机链接了和我的私有硬盘集群,我的树莓派和树莓派之间可以访问,但你的电脑怎么都不可能访问我的树莓派,也不可能访问我的硬盘

但就算有介质,也只是理论上能访问到

NAT

我们都知道,ipv4的地址是有限的,所以现在的网络运营商一般只会给你家的端口分配一个公网ip(也可能没有,等会讲),那么你家里只有一个公网ip,怎么通过这一个ip支持那么多设备链接互联网呢,就是通过NAT转化

一个内网设备想要和公网通信,他的包中一定要有这四个数据才能做到双方的精准定位

这个包会被发到路由器上,显然服务器不能根据你的内网ip再把他的包发给你,这个时候就是NAT起作用的时候了

原理

报文先从客户端发到路由器上,在这个过程中,路由器会记录下源 IP 和源端口号,在转换前后的对应关系,形成 NAT 表项

路由器将源 IP 和源端口号转换后的报文发送到服务器,服务器回应的报文,目的 IP 和目的端口端口号,就是请求报文中的源 IP 和源端口号。这样,报文就能根据目的 IP,到达用户的路由器上

路由器收到来自服务器的报文,根据 NAT 表项,将目的 IP 和目的端口号,从外部 IP、外部端口,转换为内部 IP、内部端口。这样,报文就能顺利到达用户电脑的浏览器上

NAT 通过记录端口号、IP 地址的对应关系,将出方向报文的源 IP、源端口号从内部地址转换为外部地址,将入方向报文的目的 IP、目的端口号从外部地址转换为内部地址,让内网设备也能正常访问 Internet

不便之处

但如果是内网设备作为服务器,我们都知道,服务器是不能主动向客户端发送包的,因为客户端很多且不固定,作为服务器,一个服务的ip和端口应该是固定的,不过你不主动发包,路由器就不能给你建立NAT表项