一开始面试官问我NAT是什么?我是拒绝的,因为我特么不懂。
后来我觉得我是搞路由器的,应该是要懂一下下的。后来我就等了,我就觉得说,我不懂NAT竟然好意思说自己是搞路由器的,真特么逗!不过没关系,我本身就很逗,这一点我早已习惯。
好!废话少说,咩系NAT?——
网络地址转换(Network Address Translation)!
家里的电话或手机连上WiFi后,我们就可以上网,但问题是,我们其实是处于局域网当中,一般ip地址是192.168.1.100什么的。但实际上我家的电脑ip是192.168.1.100,你家的也是192.168.1.100,小明他家的手机也是192.168.1.100,外网的应用要发信息给局域网中的192.168.1.100,到底发给我还是发给小明?
重点是,根本不是同一个网段,外网根本ping不通我家的192.168.1.100,如何发消息给我?
实际上是路由器搞了些手脚。
当你用192.168.1.100发消息出去的外网的时候,人家不知道你是192.168.1.100,因为你发的数据包的原地址ip都被改了,改成了你家的路由器得到的那个外网ip,端口号也可能改了,如下图:
你自己有个应用192.168.1.100:6666发了东西出去外网,这些数据包到路由器被他整容了,整成了7.7.7.7:9999,外网只认识7.7.7.7:9999这张脸,不认识192.168.1.100:6666。所以外网想发东西给192.168.1.100:6666,实际上他只会发给7.7.7.7:9999,路由器收到之后,又会把目标地址改成192.168.1.100:6666,这样就算是不同的局域网的两个应用,只要连上外网,依旧也可以通信。
大体上是这样,实际上还有很多坑。NAT往往会阻挡外网主动连接内网的服务,一般是内网有应用主动访问外网的服务,然后外网服务再回应内网的应用。所以会涉及一些反向代理东西,这是后话,以后再说。
大家晚安。