【杂谈】没有公网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
【杂谈】没有公网IP的电脑如何与外部通信的更多相关文章
- 利用端口映射解决:拥有公网IP有限,内网需要访问因特网
动态端口映射: 内网中的一台电脑要访问新浪网,会向NAT网关发送数据包,包头中包括对方(就是新浪网)IP.端口和本机IP.端口,NAT网关会把本机IP.端口替换成自己的公网IP.一个未使用的端口, ...
- CentOS下OpenVPN实现公网IP映射到内网(iptables转发功能)(转)
说明:这种方案的实现前提是必须要有一台拥有公网IP的电脑,OpenVPN搭建过程很普通,关键技术在于iptables的转发.搭建教程可能有点旧了,可以只看iptables的关键点技术. 方案背景: 公 ...
- 【转载】如何查看本机电脑的公网IP
在实际使用电脑的过程中,很多时候我们需要知道本地电脑的当前公网IP地址,我们都知道个人电脑的公网IP是不固定的,可能每天的对外公网IP都不一样,如果要查看当前本机电脑的对外公网IP,方法也很简单,直接 ...
- [网络]让局域网的电脑通过路由的公网ip可以被访问到的设置
http://公网IP:服务端口/访问路径(http://110.16.166.135:8081/pra/unionpay/v_asyn_notify.jspx这个地址就会通过公网ip来访问到你的ip ...
- 公网IP和私有IP
IP地址是为了区分网络中不同主机所分配的一个地址,通过IP地址可以访问到每一台主机. IP地址分为公有地址和私有地址,公有地址由Internet NIC负责(比如中国互联网信息中心http://ip. ...
- 【小技巧解决大问题】使用 frp 突破阿里云主机无弹性公网 IP 不能用作 Web 服务器的限制
背景 今年 8 月份左右,打折价买了一个阿里云主机,比平常便宜了 2000 多块.买了之后,本想作为一个博客网站的,毕竟国内的服务器访问肯定快一些.满心欢喜的下单之后,却发现 http 服务,外网怎么 ...
- 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?
本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢 ...
- 公网Ip和私网ip
IP可以分为Public IP 和 Private IP,出现这种规划的原因在于IPv4所能表示的IP太少而电脑太多以至于不够用,然而只有Public IP才能直接连接上网络,所以对于那些公司,学校, ...
- 没有公网的IP的用户有福了,即使您没有公网IP,我们要一样可以让您与ER对接,同时可远程访问
EasyRadius从7.10起,开始向使用者平摊使用费用,即服务器托管费用.维护费用,向用户征收少量费用.即300元/年/1000用户,600元/年/无限制用户. 按比较高的费用1000用户计费,即 ...
随机推荐
- (PMP)解题技巧和典型题目分析(0903-3班)
B.项目有依赖 D A A B B C B C D B A B B A B
- 周报数据采集之生存图片(execl方法)
https://blog.csdn.net/Luzaofa/article/details/81675364 Python之Excel chart另存为图片大家好,好久没有更新博客了,这一段时间有点忙 ...
- sf-1 算法
算法基础 算法 算法(Algorithm):一个计算过程,解决问题的方法 DNiklaus Wirth:“程序=数据结构+算法” 时间复杂度 时间复杂度:用来评估算法运行效率的一个式子 时间复杂度-小 ...
- python csv读写
https://blog.csdn.net/taotiezhengfeng/article/details/75577998
- JS入门经典第二章总结
document:在对网页编写脚本时,我们使用document对象代表网页.要引用一个属性,只需在document对象后加一个“.”号,然后再加上要引用的属性名. alert():该函数弹出一个消息框 ...
- OPC上传ONENET工具
这个去年做过比较死的 今年吸取人家转发网关配置工具的优点重做下
- flask-钩子函数&g对象
常用钩子函数 在Flask中钩子函数是使用特定的装饰器装饰的函数.钩子函数可以在正常执行的代码中,插入一段自己想要执行的代码.那么这种函数就叫做钩子函数.(hook) before_first_req ...
- Scala中的Implicit详解
Scala中的implicit关键字对于我们初学者像是一个谜一样的存在,一边惊讶于代码的简洁, 一边像在迷宫里打转一样地去找隐式的代码,因此我们团队结合目前的开发工作,将implicit作为一个专题进 ...
- MQTT协议学习总结
一.MQTT介绍 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通 ...
- day_10初级函数
今天讲了函数初级 函数:完成特定功能的代码块,作为一个整体对其进行特定的命名,该名字就是代表函数 --现实中很多问题要通过一些工具进行处理 ,,可以将工具提前准备好并命名 通过名字就可以找到这个工具 ...