【杂谈】没有公网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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库