路由器|为什么我在公司里访问不了家里的电脑?

路由器|为什么我在公司里访问不了家里的电脑?

文章图片

路由器|为什么我在公司里访问不了家里的电脑?

文章图片

路由器|为什么我在公司里访问不了家里的电脑?

文章图片

路由器|为什么我在公司里访问不了家里的电脑?

文章图片

路由器|为什么我在公司里访问不了家里的电脑?

文章图片

路由器|为什么我在公司里访问不了家里的电脑?

文章图片

路由器|为什么我在公司里访问不了家里的电脑?

文章图片

路由器|为什么我在公司里访问不了家里的电脑?

文章图片

路由器|为什么我在公司里访问不了家里的电脑?

文章图片

路由器|为什么我在公司里访问不了家里的电脑?

文章图片


因为IPv4地址有限 , 最大42亿个 。 为了更好的利用这有限的IP数量 , 网络分为局域网和广域网 , 将IP分为了私有IP和公网IP , 一个局域网里的N多台机器都可以共用一个公网IP , 从而大大增加了\"可用IP数量\" 。

当我们需要发送网络包的时候 , 在IP层 , 需要填入源IP地址 , 和目的IP地址 , 也就是对应快递的发货地址和收货地址 。

但是我们家里的局域网内 , 基本上都用192.168.xx.xx这样的私有IP 。
如果我们在发送网络包的时候 , 这么填 。 对方在回数据包的时候该怎么回?毕竟千家万户人用的都是192.168.0.1 , 网络怎么知道该发给谁?
所以肯定需要将这个192.168.xx私有IP转换成公有IP 。
因此在上篇文章最后 , 留了这么个问题 。 局域网内用的是私有IP , 公网用的都是公有IP 。 一个局域网里的私有IP想访问局域网外的公有IP , 必然要做个IP转换 , 这是在哪里做的转换呢?

答案是NAT设备 , 全称Network Address Translation , 网络地址转换 。 基本上家用路由器都支持这功能 。
我们来聊下它是怎么工作的:
nat的工作原理
为了简单 , 我们假设你很富 , 你家里分到了一个公网IP地址 20.20.20.20 , 对应配到了你家自带NAT功能的家用路由器上 , 你家里需要上网的设备有很多 , 比如你的手机 , 电脑都需要上网 , 他们构成了一个局域网 , 用的都是私有IP , 比如192.168.xx 。 其中你在电脑上执行ifconfig命令 , 发现家里的电脑IP是192.168.30.5 。你要访问的公网IP地址是30.30.30.30 。
于是就有下面这样一张图

当你准备发送数据包的时候 , 你的电脑内核协议栈就会构造一个IP数据包 。 这个IP数据包报头里的发送端IP地址填的就是192.168.30.5 , 接收端IP地址就是30.30.30.30 。 将数据包发到NAT路由器中 。
此时NAT路由器会将IP数据包里的源IP地址修改一下 , 私有IP地址192.168.30.5改写为公网IP地址20.20.20.20 , 这叫SNAT(Source Network Address Translation , 源地址转换) 。 并且还会在NAT路由器内部留下一条 192.168.30.5 -> 20.20.20.20的映射记录 , 这个信息会在后面用到 。 之后IP数据包经过公网里各个路由器的转发 , 发到了接收端30.30.30.30 , 到这里发送流程结束 。

如果接收端处理完数据了 , 需要发一个响应给你的电脑 , 那就需要将发送端IP地址填上自己的30.30.30.30 , 将接收端地址填为你的公网IP地址20.20.20.20 , 发往NAT路由器 。 NAT路由器收到公网来的消息之后 , 会检查下自己之前留下的映射信息 , 发现之前留下了这么一条 192.168.30.5 -> 20.20.20.20记录 , 就会将这个数据包的目的IP地址修改一下 , 变成内网IP地址192.168.30.5 这也叫DNAT(Destination Network Address Translation , 目的地址转换) 。之后将其转发给你的电脑上 。