• 【杂谈】没有公网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

  • 相关阅读:
    OSI 与 TCP/IP协议簇
    交换机工作原理
    Windows搭建域环境
    网络安全散装笔记
    Python之正则匹配——RE模块
    Django框架之ORM数据库操作
    Django中ORM的优化
    python遍历文件夹下文件
    numpy.r_ c_
    python调用google map api
  • 原文地址:https://www.cnblogs.com/longfurcat/p/10415287.html
Copyright © 2020-2023  润新知