前言

  前几天突然想到的问题,自己先猜测推理了一番,最后在谢希仁版《计算机网络》找到了权威的解答。这里记录一下自己的思考过程。

网站是如何找到我们的?

我们知道,互联网中的两台电脑要进行通信,就必须彼此知晓对方的位置。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的电脑如何与外部通信的更多相关文章

  1. 利用端口映射解决:拥有公网IP有限,内网需要访问因特网

    动态端口映射:   内网中的一台电脑要访问新浪网,会向NAT网关发送数据包,包头中包括对方(就是新浪网)IP.端口和本机IP.端口,NAT网关会把本机IP.端口替换成自己的公网IP.一个未使用的端口, ...

  2. CentOS下OpenVPN实现公网IP映射到内网(iptables转发功能)(转)

    说明:这种方案的实现前提是必须要有一台拥有公网IP的电脑,OpenVPN搭建过程很普通,关键技术在于iptables的转发.搭建教程可能有点旧了,可以只看iptables的关键点技术. 方案背景: 公 ...

  3. 【转载】如何查看本机电脑的公网IP

    在实际使用电脑的过程中,很多时候我们需要知道本地电脑的当前公网IP地址,我们都知道个人电脑的公网IP是不固定的,可能每天的对外公网IP都不一样,如果要查看当前本机电脑的对外公网IP,方法也很简单,直接 ...

  4. [网络]让局域网的电脑通过路由的公网ip可以被访问到的设置

    http://公网IP:服务端口/访问路径(http://110.16.166.135:8081/pra/unionpay/v_asyn_notify.jspx这个地址就会通过公网ip来访问到你的ip ...

  5. 公网IP和私有IP

    IP地址是为了区分网络中不同主机所分配的一个地址,通过IP地址可以访问到每一台主机. IP地址分为公有地址和私有地址,公有地址由Internet NIC负责(比如中国互联网信息中心http://ip. ...

  6. 【小技巧解决大问题】使用 frp 突破阿里云主机无弹性公网 IP 不能用作 Web 服务器的限制

    背景 今年 8 月份左右,打折价买了一个阿里云主机,比平常便宜了 2000 多块.买了之后,本想作为一个博客网站的,毕竟国内的服务器访问肯定快一些.满心欢喜的下单之后,却发现 http 服务,外网怎么 ...

  7. 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?

    本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢 ...

  8. 公网Ip和私网ip

    IP可以分为Public IP 和 Private IP,出现这种规划的原因在于IPv4所能表示的IP太少而电脑太多以至于不够用,然而只有Public IP才能直接连接上网络,所以对于那些公司,学校, ...

  9. 没有公网的IP的用户有福了,即使您没有公网IP,我们要一样可以让您与ER对接,同时可远程访问

    EasyRadius从7.10起,开始向使用者平摊使用费用,即服务器托管费用.维护费用,向用户征收少量费用.即300元/年/1000用户,600元/年/无限制用户. 按比较高的费用1000用户计费,即 ...

随机推荐

  1. c# 将object尝试转为指定对象

    主方法: /// <summary> /// 将object尝试转为指定对象 /// </summary> /// <param name="data" ...

  2. struts2 升级至2.3.32时访问页面报错 File "/struts-tags" not found

    Apache struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web 应用的开源MVC框架,主要提供两个版本框架产品: struts 1和str ...

  3. noip第27课资料

  4. 网络编程——I/O复用

    int select( int nfds, fd_set FAR* readfds, fd_set * writefds, fd_set * exceptfds, const struct timev ...

  5. 常用maven仓库

    常用Maven仓库网址:http://mvnrepository.com/http://search.maven.org/http://repository.sonatype.org/content/ ...

  6. Gson centos日期转换失败

    https://4aiur.github.io/2018/03/26/gson-dateformat-pattern/ 问题描述: 线上的日志里报了一个JsonSyntaxException的异常: ...

  7. 包建强的培训课程(14):Android与ReactNative

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  8. ElasticSearch是如何实现分布式的?

    面试题 es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)? 面试官心理分析 在搜索这块,lucene 是最流行的搜索库.几年前业内一般都问,你了解 lucene 吗?你知道倒排索引的原理 ...

  9. 查看windows到期时间

        查看windows到期时间    Slmgr.vbs  -xpr

  10. 吴恩达机器学习笔记41-支持向量机的优化目标(Optimization Objective of Support Vector Machines)