1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

网络是种什么东西?

本帖由 漂亮的石头2021-01-28 发布。版面名称:知乎日报

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    485,181
    赞:
    46
    [​IMG] 车小胖,公众号:chexiaopangnetwork 阅读原文

    每个城市的自来水网,类似于计算机网络的局域网。通常自来水网是这样工作的:有一个大型的水库,经过 N 道工序的洁净消毒处理,达标的自来水进入管网。源头的管网,通常是很粗大的管道,这些粗大的管道,可以理解为主干。然后当进入小区、街道的时候,管道会变得细一些。当管网进入每家每户的时候,管道会变得更细。水就顺着主干、次主干、毛细管道流入千家万户。

    [​IMG]

    水是单向流动的,从源头(上游)顺着各个层级的管道,向用户(下游)的方向推(push)动。也可以理解为拉(pull)的方式,因为用户需要打开水龙头。

    问大家一个问题,自来水管网,如果有物理环路,水会在环路里一直转圈圈吗?

    这个问题我思考了许久,应该是不会的。水能够在管网里单向流动,依靠是上下游之间的压力差,迫使水永远朝着下游的方向流动。所以自来水管网,即使出现了物理环路,水依然不会在环路里转圈圈。

    但是即使不会产生原地转圈圈的现象,自来水网也很少设计成有环路的网络。而是采用树状的发散结构。因为万一发生上下游压力差=0 的极端情况,水会一直在环路里转圈圈。

    水库的是自来水网的源头,可以理解为树根。主干管道可以理解为树的主干。次级管道可以理解为树枝。而树叶可以理解为千家万户的一员,而连接树叶与树枝之间的毛细管,可以理解为自来水入户的毛细管道。

    这道问题显然是问:计算机网络到底是什么? 为何还要花那么多文字写一些看似无关的内容?

    计算机网络,与自来水网,有很多相似的知识。数据的源头、主干网络、传输网络、接入网(毛细管道),通过与自来水网的对比,可以有一个形象而感性的认识。

    但是计算机网络与自来水网最大的不同是,自来水网里每一滴水会流到何方?目的地是哪里全靠运气,是一个随机的过程。

    计算机网络承载数据的单位是数据包,可以理解为自来水网里的每一滴水。每一个数据包流到谁家是需要精确定位的。

    油腻的老王喜欢爱情武打片,那么承载爱情片的数据包,会在老王点击鼠标的一瞬间。会从服务器(大型水库)顺着主干、次主干、毛细管道精确流动到老王的电脑上,老王看得心旷神怡。

    幼稚园王小萌小朋友,喜欢看动画片。动画片也会在小萌点击鼠标之后,精确流动到小萌的 iPad 上,小萌看得津津有味。

    如果计算机网络不能精确定位数据包的目的地,把老王的片子错误地推送给小萌,而把小萌的片子推送给老王,这显然不合适。谁还敢用这样的网络?

    计算机网络第一个要实现的任务,如何精确定位数据包的接收者的位置?

    这就需要给每一个上网用户进行地址编码,而实现这个地址编码的技术,就是大名鼎鼎的 IP 地址编码。每一个用户分配一个独一无二的 IP 地址,这个 IP 地址可以理解为用户的位置信息。那么老王订阅内容的数据包外包装,写上老王的 IP 地址信息,那么计算机网络将老王的数据包,发到老王的家中,这样就可以实现第一个任务。

    老王订阅的这些数据包最终归宿是哪里呢?

    如果老王是在线观看,数据包最终会形成一帧帧图像显示在电脑屏幕上,然后这一帧帧图像,会在几十毫秒之后被下一帧数据所覆盖。长江后浪推前浪,前浪死在沙滩上。

    如果老王选择下载到文件里,那么这些数据包会以文件的形式存储在硬盘里。如果老王不喜欢而选择删除,这些文件所占用的硬盘空间,会被文件系统回收用于存储其它文件。文件依然在在哪里,不会因为被删除而消失,但是可能被别的文件覆盖。

    而用户在线看的视频、网页,一般也会在关闭浏览器、软件之后释放掉。所谓释放,是这些数据所占用的内存空间被释放。可以被其它数据所覆盖。

    在互联网、计算机网络经常听到订阅(subscribe)。它真实意思是什么呢?

    这是一种用户主动拉取(pull)数据的模式。用户要先请求,然后数据才会从服务器流到用户家中。用户如果不主动请求数据,数据就永远不会莫名其妙溜到用户家中。

    老王自从看了武打片,电脑上经常会莫名其妙跳出一个小广告,老王就很纳闷,可是老王我并没有主动订阅该广告,为何它会流动到我的电脑上?

    老王的电脑在过往的浏览经历中,被悄悄地安装了恶意软件,尽管老王没有主动订阅小广告,可是这些恶意软件却学雷锋帮助了老王订阅了小广告。

    一个数据包的完整生命周期,从数据的源头(服务器),以文件输入、或视频输入进入网络,通过各个层级的物理管道,精确到达数据的订阅用户,然后以昙花一现的方式呈现在屏幕上,或者以文件的方式永远地保存在用户的电脑上。

    计算机网络,所要完成的任务还有很多很多。数据包在管道里传输,信号会不断衰减,如何能保证数据包在到达目的地,依然可以解码出原始的数据包?

    这就是网络设备存在的必要性,交换机、路由器可以完成信号的中继,确保在信号衰减到面目全非时,将其修复成原始的模样。

    但是交换机、路由器需要判断自己接收到的数据包是否还有修复的必要性?

    假如接收到数据包已经无法还原成原始的数据包了,那么修复数据包完全是「脱裤子放屁」,多此一举。

    如何判断一个数据包是否原始的模样?

    这个很好解决。只要数据的发送者,在数据包的末尾附上数据包的校验码。网络设备在接收数据包之后,用同样的校验算法,计算出数据包的校验码,与接收到的校验码进行比对。如果相同,那么数据是正确的,可以继续处理。否则直接丢弃处理。

    计算机网络,为了避免一根链路的失效而影响全局,通常在设计网络时,会有多条备份冗余链路。这些冗余链路的存在,通常会形成物理的环路。计算机网络没有自来水网的压力差,无法保证数据包朝着单一方向流动。那么数据包万一在环路里一直转圈圈,数据包的生命周期将会与日月同在,直到网络设备断电或者物理环路的消失,是不是很可怕?

    为了避免数据包的环路,通常网络设计成无环的,即整体网络是树状的发散结构。如果无法避免物理环路,可以将多条物理链路绑定成一条逻辑虚拟链路,或者配置成可以使用路由算法控制的三层链路。

    在路由算法收敛之前,万一发生了环路,如何应对?

    为了防止一个数据包生命周期万寿无疆,通常数据包的源头将它的寿命限制为 TTL = 255 秒。每经过一个三层路由设备,减去 1 秒。那么经过 255 次路由设备,生命周期=0,一旦寿命=0,将会直接丢弃。

    可是这个美好的愿望有一个小 bug,只有 TTL 减一的三层路由设备才能利用这个机制将包最终丢弃。那些二层交换机压根无权 TTL-1,那么意味着一旦数据包在二层网络发生了环路,将永远在环路里滞留。滞留带来的结果是致命的。环路上堆积的数据包越来越多到达处理的上限。后续的数据包将会被无情的丢失。一方面交换机焦头烂额累的上气不接下气,另一方面后续的数据包被无情丢弃。网络的崩溃往往是一个小小的环路造成的。

    阅读原文
     
正在加载...