zoukankan      html  css  js  c++  java
  • 互联网是怎么通讯的

    这个问题实在是太大,随便一个细枝末节就可能写一本书,所以今天主要站在远处来感性的认识他,也就是纵观全局;

    看完本篇文章我们要明白两个问题:

    1.   互联网是怎么连接全球终端电脑的?
    2.   不同地区的电脑如何实现通讯(聊天,文件传输)?

    首先来解决第一个问题,  互联网怎么把全球的电脑连接起来。

    在中国常见的网络提供商如电信,网通,当然还有其他的一些,这些大的网络服务提供商(以下简称 IPS)多是经过国家批准的

    (获得国家批准的IPS才有权连接到海外其他国家的骨干网),这几家公司会搭建自己的网络线路,基本上是从城市到农村依次铺开,

    以前是电话线,现在新铺的线路都会采用光纤了。铺设的过程中会设置很多汇总点,

    首先有一个铺设的起点(以下称 骨干节点),接下来在每个省设一个汇总点(S点),每个省下面的市设一个汇总点(C点);

    注意,具体在那些地方设点这里只是个假设,实际上可能跟我想的不一样,但是不影响理解

    几家IPS就不断的扩开大自己的铺设面积,直到覆盖全国。

    同理,其他国家也是这样一个网络形式。

    前面提到 获得国家准许的 IPS 可以允许连接到国外,也就说如果你用这个获批的IPS的宽带服务,你就连接到了全球因特网(前提是这个IPS没有在汇总点阻拦你)

    互联网 顾名思义 就是一张网,不是一条线,  举个例子  xx国家跟我们关系不好,不跟我们的出口IPS连接,那么我们任然可以线连接到一个跟xx过有关系的国家在连过去。

    现在我们知道全球的电脑终端是怎么连接起来的了,现在来看第二个问题。

    你现在要用qq国际版跟一个外国有人发送文件,从你点击发送按钮到对方接受完都发生了那些事情?

    这家伙有点复杂,正如文章开头说的那样,这里只是雾里看花,浅层了解一下:

    先来一张OSI七层模型:

    有些书本上讲的表晦涩难懂,这里我用一个实际例子来说明这几层的作用可能更通俗易懂;比如 tom 给 jack 发送一封Email,

    tom把邮件写好交给 一个邮箱软件(比如outlook,qq邮箱,163邮箱等),这个邮箱软件就是工作在应用层的,负责和用户交互,

    用户把邮箱交给outlook让他帮你发出去,这个时候 outlook 并不是就帮你发出去了,他先把你的数据(字节流)交给他的下层 表示层,

    这一层的功能就是定义数据的表示,比如你在邮箱软件哪里定义使用ascii码发送,还比如用户要加密发送,

    到这里,表示层就会在 应用层传给他的数据的前面 加上额外数据信息,这个额外信息里面就定义了这个数据需要怎么表示(比如这个地方需要加密)的一些信息,

    然后把所有数据交给会话层,会话层是用来管理回话的,比如发送邮件这属于一个远程连接会发,所以继续交给下层,如果你只是要保存到本地,那这个地方就可能直接交给硬盘处理了;

    现在就来到传输层了,传输层就是用来选择传输方式的,用那种协议传输(对应 TCP UDP),【TCP 需要三次握手,可靠,但是比起UDP慢,UDP快,但是不可靠,可不可靠是相对的】

    继续交给网络层,网络层是用来选路的,上文已经说了,互联网是网状的,所以 tom 发送邮件给 jack  有很多条路都可以到达,而网络就是为你选择最优路径。接下来交给数据链路层,

    数据链路层主要功能就是记录mac地址(解释一下为什么要记录mac地址,因为很多用户上网都是通过路由器的,只有一个公网ip,而下面的用户只有一个私有的局域网ip,而mac地址是唯一的)

    接下来物理层,物理层职责就是传递比特流(可以通过网线或光纤);

    上面那么多步骤简单来说就是,数据从上往下传递的过程中在每一层都增加了对应的额外信息,到达最底层的时候数据等于  用户原始数据+每一层添加的额外信息;

    到此,数据到达最底层物理层,接下来的传递又是怎么样的呢?

    为了方便讲解,这里我们假设 tom  用的电脑是独立ip的 ,不是局域网络;

    数据从物理层传递到 tom所在网络的上一个汇总点,直到传递到骨干节点最顶端,由骨干节点连接到国外的 jack  ,然后由国外的骨干节点依次往下找到jack的终端。

    由于数据是一层层传递出去的,所有在任何地方都有可能被拦截,比如你现在上不了 谷歌  一样。  上面已经说了,互联网是网状的,具体走那些路线到达jack终端,其实我们是不知道,

    网络层会帮你选择最优线路(网络层的选择依据是什么,这就需要更深入的了解了)。

    到此,这封邮件已经传递到了jack的终端了,但是到达终端并没有完,jack还需要用一个邮件软件来打开邮件,这个过程包含一个发送相反的逻辑;

    到达jack终端后会解析这个数据包,然后根据这个数据包的额外信息,判断 这个数据是要给系统的那个端口那个进程来处理。

    首先数据就是被物理层收到,然后传递给链路层,链路层传递到网络层,网络层根绝解析数据的额外信息,判断这个数据的来源,把解包后的数据交给上层传输层,直到把最终数据解析和

    展示出来交给应用层的邮件软件来阅读;在传递的每一步都是通过解析额外数据来判断需要对数据做什么处理,给谁处理,怎么处理;

    简单来说就是  发送过程是在每一步添加数据头(额外信息),称作压包,接收过程其实就是不断的解包;

    再来看一张OSI和TCP/IP四层模型的对比:

    OSI只是一个规范,TCP/IP模型借鉴了OSI的规范但没有完全遵守,但是实际生活中都是普及TCP/IP模型;

    从这个对应关系可以看出来,TCP/IP其实就是简化版的OSI模型,功能完全一样,没什么说的;

  • 相关阅读:
    Reversing Encryption(模拟水题)
    Alphabetic Removals(模拟水题)
    Mishka and Contest(模拟水题)
    DFS中的奇偶剪枝(技巧)
    三分法搜索
    最短的包含字符串 (尺取)
    Android开发:最详细的 NavigationDrawer 开发实践总结
    Android开发:最详细的 Toolbar 开发实践总结
    Android开发:Translucent System Bar 的最佳实践
    Android微信智能心跳方案
  • 原文地址:https://www.cnblogs.com/codeAB/p/6269419.html
Copyright © 2011-2022 走看看