【杂谈】没有公网IP的电脑如何与外部通信
前言
前几天突然想到的问题,自己先猜测推理了一番,最后在谢希仁版《计算机网络》找到了权威的解答。这里记录一下自己的思考过程。
网站是如何找到我们的?
我们知道,互联网中的两台电脑要进行通信,就必须彼此知晓对方的位置。IP地址就是对电脑地址的一种表示。其中公网IP具有全网唯一性,可以唯一标识一台电脑,故可以依此进行寻址并通信。
但是,学生使用校园网,电脑没有公网IP,只有局域网的IP,不具有全网唯一性,一样可以访问外部网络,接收网站的响应消息。我们知道,网站肯定是有公网IP的,我们找到它没问题,问题就在于网站是如何找到我们的?
网关
确实我们的电脑没有公网IP,但是我们局域网的网关(有IP地址的路由器)是有的,我们所有访问外部的请求,都是通过这个网关来处理的。所以,从因特网角度看,是网站服务器、局域网网关,这两个设备在进行通信。它们都有公网IP,找到彼此肯定没问题。也就是说它外部网站响应请求的时候不需要找到我们,知道网关地址即可。
IP数据报源地址怎么填?
底层构建IP数据报时,肯定要填写源地址,问题是源地址填的是什么,是我们电脑的IP,还是网关的IP?
如果是我们电脑的IP,服务端反过来不就找不到我们的电脑了;如果是网关的IP,那服务端确实可以找到网关,把数据发给它,但是问题来了,网关收到数据后,该转发给局域网内的哪台电脑呢?
我猜测:网关内应该有一张映射表,即局域网电脑A发给网站B,就存储一条A -> B 的记录,后续如果收到B的数据,那就反过来发给A。
教材的解答
我依稀记得,有个NAT地址转换的概念,可能跟这个有关。于是今天回学校翻开书本,果然就找到了答案。
工作原理图
下面这张图就很直观地展示了NAT路由器的工作原理。
1.前面说到的源地址的填写问题,也得到了解决,即主机A填写的就是它的IP地址。但是当数据报到达NAT路由器时,它会把IP数据报中的这个源地址替换成它自己的IP地址。
2.对于主机B来说,它根本不知道主机A的存在,它只知道它在跟NAT路由器进行通信。
3.我猜测的地址转换表也确实存在,如表4-10。出乎我意料的是,NAT路由器可以有多个公网IP,使得可以有多个局域网主机同时接入因特网。一般,一个时刻一个公网IP只能供一台局域网使用。如果只有一个公网IP,那情况就是,局域网主机轮流使用这个公网IP。
作为服务器
我们知道,要让你的电脑对外提供服务,不管是文件服务还是网站服务。都要进行以下步骤:
1.启动程序监听某个端口
2.设置进站规则,开放端口
在没有公网IP的情况下,局域网外的电脑无法通过你的IP地址定位到你,所以无法接受你提供的服务。但是对于局域网内的电脑,这个IP地址还是有效的,这些电脑可以使用你的服务,如FTP文件服务。
参考资料
[1] 谢希仁. 计算机网络[M].第六版.北京:电子工业出版社,2013:179-181