计算机网络为何要分层?

计算机无疑是非常复杂的,当初微软公司开发Windows操作系统时,总计有2000名开发工程师,耗费整整3年才开发出来。微软创始人比尔盖兹也坦诚,自己只是精通其中一部分代码,至于其它的只能了解个大概。从这个事实可以推测出,当初为何要将计算机网络抽象成七层。如果不高度抽象,把计算机网络所有功能混合在一起,那将是一团浆糊。
计算机网络的先驱,将计算机网络按照功能将其划分成多个层级。每个层级只包含一小块内容,每一块内容内部如何实现不重要,但是只要保证与上下层的接口严格按照预先定义的即可。将复杂计算机系统切割成独立的、相对简单的小模块,每一模块的工程师只驾驭独立的一块,这样就简单多了。
将计算机网络抽象为物理层、数据链路层,可以将这块内容预留给硬件工程师、通信工程师去研究。这块内容研究的是如何将来自高层的数据,发送方如何信源编码、信道编码、映射、调制、上载波、射频,接收方如何从信道里下载波、解调制、逆映射、信道解码、信源译码、将数据提交给高层。
计算机网络工程师,所做的工作就是研究如何将物理层、数据链路层提交上来的01数据流,提交给网络层。但是且慢,每层都需要对数据的完整性负有不可推卸的责任。如果数据校验出错了,那就不能浪费时间与感情让上层继续处理了,这其实很好理解。
每层需要对数据完整性负责,这其中也包括物理层。物理层其实在信道编码时,参杂了很多冗余数据,比如code 1/2,意味着每传输有效数据1bit,加入了另外一个冗余1bit位。Code 5/6,意味着每传输有效数据5 bits,加入了另外一个冗余1bit。
无线传输的物理层也有自己FCS,一旦校验出错,会使用冗余位来试图恢复原始数据。如果冗余位数多,恢复原始数据时可能的。但是万事有利必有弊,冗余位多了,势必有效传输速率就下降了。为了提高有效传输速率,将会减少冗余位,这样物理层的接收方很有可能就无法恢复原始数据,造成误码。物理层的接收方会通知发送方误码,然后发送方重传?当然可以这样实现,但是一般并不这样实现。物理层编码的冗余,其实已经尽最大可能纠错了。如果在纠错的情况下依然产生误码,将把误码的工作留给其上一层。物理层已经够复杂了,还是把数据重传的任务留给链路层吧。
不用说链路层接收方一下子就会发现数据出错了,把数据一扔了事。链路层的发送方很快就会知道数据出错了,为什么呢?
因为链路层有超时定时器,如果数据在规定时间内没有得到确认,将默认为出错了。这个重传机制是不是似曾相识?TCP重传机制不就是这样的吗?
数据链路层的重传功能,这说的是无线传输。在以太网有线传输,数据链路层并不具有数据的重传功能,只要发现数据校验出错,扔了便是,自然会触发发送方的某一个层面来修复数据。如果带着一个问题学习,为何无线与有线传输在数据重传有以上的差异,将会很快让自己学习上一个台阶。答案其实很简单,可靠性与概率问题。
链路层的数据经过校验没有问题,提交给网络层。按理说,数据是没有问题的,为何网络层还要再次校验呢?
数据从网卡的缓冲存储区搬运到内存一定是100%可靠的吗?
在同学们的脑海里,数据在计算机里是以01存在的,那只是一个逻辑抽象而已。数据在内存里以电压不同状态存在的。超过规定阈值判为1,否则判为0。
既然数据无法100%可靠,需要每层在第一时间完成校验,否则就是浪费感情。当然网络层校验出错,也是一扔了事,只校验不修复。
网络层剩下的工作还有大把,需要明确数据是自己的,还是代理别人转发的,这是两条截然不同的转发路径。
如何判定是自己的还是别人的?
查路由表。
路由表是天上掉下来的吗?
不是。路由协议努力的结果。
这部分就是网络工程师需要擅长的,路由协议其实就是几个进程而已,对计算机而言,就是几个提供路由表来源的包工头,需要一起参与竞标,只有竞标成功的路由表才能进入路由表,提供路由的转发工作。谁能竞标成功呢?带着这个问题去看书效果会更好。另外竞标的标的是什么?有效的学习是带着问题学习,每次自己解决一个问题,就是上一个台阶。
如果是别人的,那就将数据报文从出接口发出即可。至于出接口的链路层、物理层如何工作,网络分层已经将其屏蔽了,网络工程师即使不知道实现细节,也不影响工作。但是如果知道底层的实现细节,你会发现一个新大陆。你会很轻松地回答这样的问题,为何有了IP地址,还需要MAC地址?
如果是自己的,将数据提交给传输层,网络层的工作就完成了。传输层当然也会第一时间去校验数据,如果出错怎么办?
  • 扔了,当做什么都没有发生,UDP会这么做,应用层会重传数据。

  • 扔了,当做什么都没有发生,TCP也会这么做,发送方的TCP会重传数据。但是这样有效传输速率很低效。

  • 扔了,触发多次duplicated ACK,会触发发送方的TCP Fast Retransmit算法,可以更快修复丢失的数据。

当数据被重传修复好,就可以提交给应用层了。接下来的工作就和网络工程师没有多大关系了。所以即使你不懂应用层协议http,也不影响你成为优秀的网络工程师。
计算机是非常复杂的,计算机网络是其中最简单最好学的一块内容。可以将其做为学习计算机的一个入门的内容。兴趣是最好的老师,怀着一颗好奇心,把计算机网络学好。至于将来做什么,那不是水到渠成的事吗?带着问题学习是高效的学习,而不是抱着一本书从头看到尾,看完了也忘完了。
(0)

相关推荐

  • 计算机网络的 89 个核心概念

    "脚本之家 ",与百万开发者在一起 出处:程序员cxuan(ID:cxuangoodjob) 计算机网络中的概念也是非常庞杂,理解起来比较困难,所以这里,我给大家汇总了计算机网络中 ...

  • 王道考研 计算机网络笔记 第三章:数据链路层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

  • 主旨报告 | 中国工程院 余贻鑫:分层分群的电网体系结构(附下载链接)

    2021年全国配电网智能调控技术交流会于4月28-29日在山东烟台召开.本次会议由中电联配电网调度控制运行专委会主办,国网山东省电力公司.国网烟台供电公司协办,东方电子股份有限公司.烟台海颐软件有限公 ...

  • 关于差异教育、分层教学的批判性观点(之二 专题文献摘录40)

    学生的差异其实是一个很重要的教育资源,并且能对教学效果和学生的学习成绩起到非常重要的影响作用.因此,尊重差异是一种本质的回归.以生为本,以人为本,接受.尊重.调适和利用学生的差异,从教育的角度来说,就 ...

  • 关于差异教育、分层教学的批判性观点(之一 专题文献摘录39)

    差异教育的观念先要改变.家长是否能接受自己的孩子在C班学习数学,尽管我们可以隐去等级,但显然分班的依据就是学生的学业水平.我们可以"教育公平"的名义随机分班,但显然丧失了因材施教的 ...

  • 计算机网络硬核指南

    本篇主要是对计算机网络一些核心思想理解,属于内功心法,初学者适合入门,非初学者可以学习其设计思想,总之希望帮助大家提高对网络的理解: 深入浅出Linux网络硬核指南 本系列从网络通信理解到云计算网络等 ...

  • 嵌入式软件架构设计分层思路

    在正规的项目开发中,项目往往是并行开发的,也就是说硬件设计.底层软件设计.应用软件设计等是同步进行的.比如说在开发板上调试模块驱动,在其他平台上调试应用程序再移植到目前这个平台等. 嵌入式专栏 1 为 ...

  • 妥妥读《三国》(五)|| 满清借三国立正统 张妥分层次析经典(第580期A)

    上期结尾: 唐朝的文化达到了非常高的阶段,一些杂耍也应运而生.杂耍里边就包含着民间的传说.晚唐著名诗人李商隐写过一首<娇儿诗>,里边有"或笑张飞胡,或笑邓艾吃"的诗句. ...

  • 如何学好计算机网络?

    Wireshark是应用层的应用,为什么能抓到整个包(包括osi五层模型所有协议信息)? 一个网络包从下到上解析到应用层,不应该只有应用层的数据吗?是怎么保存到例如传输层,网络层信息的呢?   Wir ...

  • 如何对不同层次的学生进行分层指导?

    盘龙完小李二芳 面向全体学生是素质教育的一大特点,也是素质教育的基本要求,但由于学生之间有个体差异,如果我们按统一的教学模式来进行教学,必然有一些学生感到吃不饱,而一些学生听不懂,教学成绩差是显而易见 ...

  • 如何通过RFM模型做用户分层,进行精细化运营?

    诸葛君说:说到用户运营,大家或许会说用户画像,用户分层,社群运营,粉丝运营等一系列的名词,在日常工作中你可能也做过用户分层方面的实践,比如运营社群,当用户量只有几百的时候,我建几个群,每天发发消息,做 ...