OSI七层模型诞生过程:

在70年代中期,Honeywell Information System公司的一个小组开发一些原型系统,为了支持数据库系统的访问,需要一个结构化的分布式通信系统体系结构。于是这个小组研究了现有的一些解决方案以及为标准化的数据库正在研究中的一些表示服务的相关概念,在1977年提出了一个七层的体系结构模型。

在思考如何建立一个结构化的分布式网络模型之前,我们还需要明白当时为什么会有这些需求诞生,这就离不开时代背景了:20世纪70年代末至20世纪80年代初,微型计算机得到了广泛的应用,各机关和企事业单位为了适应办公自动化的需要,迫切要求将自己拥有的为数众多的微型计算机、工作站、小型计算机等连接起来,以达到资源共享和相互传递信息的目的,而且迫切要求降低联网费用,提高数据传输效率。但是,这一时期计算机之间的组网是有条件的,在同网络中只能存在同一厂家生产的计算机,其他厂家生产的计算机无法接入。并且在此期间,各大公司都推出了自己的网络体系结构。

由以上的材料我们可以看出当时通信行业的局限性:

1.没有统一的网络体系标准,各个公司各自为阵,产品难以兼容。

2.没有清晰的模型结构导致协议开发速率低下,难以拓展。

3.网络架构极为粗糙,可以实现的功能很少,不仅无法接入较多的计算机,也无法完成访问数据的基本要求;通信费用昂贵,不利于推广。

设计思路
从大方向来观察怎样的网络设计能够克服我们刚刚分析到的三点局限性:

1.对于第一点“没有标准的网络体系”,虽然有点笼统,但是从这一点入手能给我们一个网络设计的总纲领。为了易于标准化,我们设计出的应该是一个能够包含整个网络通信过程,并能够商业化的模型。只有包含整个通信过程才能在通信的每一步无缝衔接(遵循一个标准),而符合商业化则是说模型较为简单,并且易于迭代拓展,各个公司能够接受其作为标准。

2.对于第二点“协议开发速率低下”,那么我们来思考是怎样的模型才能够加快协议的开发开发。结合现代工业的高效率,我们可以发现精确分工的必要性。解决方式便是给定对应协议一个明确的功能边界,让协议在这个边界中完成自己的功能。具体实现也就我们设计的模型应该划分层次,每个层次的协议只能够实现本层范围内的功能,超过范围的功能只能由其它对应层的协议进行实现。打个比方:汽车(一种协议)只应该在路上跑,不能设计在天上飞的功能,这个功能只能由飞机(另外范围内的协议)实现。同时,明确的分工也需要完美的衔接,这样才能组合成一个整体,发挥价值。再打个比方:一个螺丝钉(一个协议层次)需要和对应的槽(另一个协议层次)相互配合才能让自己的存在有意义。

3.对于第三点的“实现的功能很少”,首先,功能的低下,实际上是目前的协议单薄,而当功能精细化后,协议的实现不仅方便,也利于之后的拓展加深。其次,标准化易于学习,当大批人员涌入行业后,很多事情便是水到渠成了;对于“通信昂贵”这一点,我们来分析一下成本主要存在于哪些方面,成本简单可以划分为协人力成本、制造成本、材料成本、隐性成本(如不同厂家产品衔接成本)。以人力成为为例子,人力成本的节约在于体系标准化之后从业者只用按照一个标准学习,不用再像之前各体系都招人,使得人才培养简单,另外设备精细化后更利于机器流水生产,人力成本占总成本的比例自然下降。其实我们可以看到,解决了前面两点后这一点也就迎刃而解了。

以上解决方法其实都有一定的相辅相成的作用,总结一下从大方向得出的结论:

1.模型应该覆盖整个通信流过程。

2.模型采用分层次构架,并能够精确衔接。

3.模型较为简单。

具体设计(由上到下)

应用层

信息是通过人类的活动进行产生的,但需要机器进行传输,那么人和机器如何实现交流呢?答案很简单,应用程序。而一个需要通信的应用程序如果只有框架是无法实现各种功能的,它离不开背后大量的数据协助。因此,网络模型首先需要实现的就是为应用程序提供支持,所以我们的最上层——应用层也随之诞生了。以http协议为例,浏览器作为对应的应用程序,当人通过键盘或者鼠标等输入设备发出一项指令(如网页跳转),这时http协议便通过请求对应网页的服务器获取信息。

表示层
当应用层获取了所需的信息后便准备向下传递了,但在传输的过程中遇到了一些困难,一个既定事实是每台计算机可能有它自己表示数据的内部方法,例如,IBM主机使用EBCDIC编码,大部分PC机使用的是ASCII码。那么怎样保证不同的计算机可以彼此理解对方发出的信息呢?既然我们需要完成一个标准化的通信过程,这一点是必须克服的。类比翻译的过程,一种很好的解决方式便是利用通用编码进行中间的数据传输,然后再转换为自己的语言。举一个小例子你就懂了:我只会说中文,而日本友人只会说日文,那么我们两个是无法交流的。但如果我们都会说英文,交流时我先在心里想好要说的话是什么,再用英语说出来,日本友人听到英文,在心里转换为日语,他就能弄懂我的意思。同时,此功能和应用层有着明细的区别,需要重新进行划分,表示层就这么诞生了。除此之外,压缩和加密这一系列和编码有关的操作也应该由这一层完成。

会话层
有了表示层的编码操作,双方设备在互相解析对方信息时已经没有问题了。但随着通信过程的推进,我们发现本端编码发送的信息其实对端程序根本无法接收到。这个比较好理解,因为一台设备上本来就运行了很多应用程序,那么具体应该将收到的信息交给哪个程序解码便成了问题。在生活中,如果将很多相同扣子按照两两一对系上绳子,然后混合在一起,这时我们如果直接观察已经无法区分哪两个是一对了,但却依然可以靠着绳子快速的区分出来。按照这个思路,我们这个问题的解决方式便是建立程序间的连接了,会话层也因此诞生。其需要实现的核心功能有三点:首先,程序上的连接(或者称为一个会话)一定是软件层面的,逻辑层面的。第二,为了区分不同的传递的精确性,会话应该是一对一的。最后,本层需要对会话有一定的管理功能,比如进行连接建立或终止。以发QQ消息为例,当我发送出来的数据传输到了你的设备上了后,只能由与我建立会话连接的QQ程序进行接收,这样就保证了会话的独立性和可用性。完成了这一步后,进行编码和逻辑上的传输已经没有问题了,我们按照通信模型继续向下推进,接下来便是在信道上的传输过程。

传输层
既然通过最上面的三个层次已经保证了逻辑上传输的有效性,现在我们开始思考,在真实的物理链路上怎么传输呢?在OSI七层模型推出之前,美国还是使用阿帕网进行通信,当时的阿帕网设计如下:

中间由IMP(接口处理机)组成的便是通信子网了,通信子网的功能是将一台主机的信息传输到另一台主机。这里也有一个既存事实,即世界上各种通信子网在性能上存在着很大差异,电话交换网、分组交换网、公用数据交换网、局域网等通信子网虽然都可互连,但它们提供的吞吐量、传输速率、数据延迟通信费用各不相同。对于会话层来说,却要求有一性能恒定的接口。另外,我们需要明确的是,网络的发展一定是循序渐进的,在网络模型制作的过程中一定要考虑现有的情况;其次,为了满足更多主机间的连接,通信子网之间的有效互联是必须被实现的。现在我们知道了实际的通信过程需要依赖通信子网来完成,怎样有效的去连接逻辑与物理两大层面就成为我们接下来需要解决的问题,传输层也因此诞生了。

为了调节上述通信子网的差异,传输层采用分流/合流,复用/解复用技术满足上层的需求。此外为了实现更有质量或更有效率的传输数据,同时也为会话层的调控做基础准备,传输层还要具备差错恢复,流量控制等功能。最后,传输层的服务对象是会话层,而这个与会话层连接的接口,我们也称为端口。具体应用我们举一个小例子:当我发送一封邮件给对方时,会话层下放的数据会通过相应的端口进入传输层继续传输,而对方主机接收邮件后,传输层在屏蔽通信子网差异的同时通过所带的端口号准确发送给上层处理。

网络层
从这里开始,我们层次的划分便是依据通信子网的传输过程了。通信子网保证了主机间信息的交互,这也是我们模型设计一定要明确的目的。有了这个目的,最重要的思路也出来了,那就是我们需要标识源和目的地址,再通过一定的方式进行寻路,将信息传递到目的地。地址是基础,一个没有名字的目的地是很难找到的。寻路是手段,因为接入网络的设备数量较多,并且会快速增加,网络复杂性随之增加。并且如果入网设备距离较远,是必定不能直接连接的,之间必须通过其它中转设备进行转发,这也是通信子网所具有的特点,能有效快速的寻路决定了信息传递的速率。也是在这样理念的指导下,网络层诞生了。

在网络层中用来的标识地址也就是我们现在所熟悉的IP地址,而寻路则是靠着“路由表”和“最长掩码匹配原则”。按照设计,每一个网络层设备“路由器”(在阿帕网中类似的设备叫做IMP)的不同接口应处于不同网段,不同路由器相连的接口处于同一网段,并且一个网段中可以包含多个IP地址。在路由器中存在路由表,其中记录了去往不同网段的转发信息,并按照最长掩码原则进行匹配,其核心功能是将信息从一个网段转移到另外一个网段。整个体系最大的优点便是保证了信息通信的最优性和冗余性,最优性指的是当有多条路径到达终点时,会选择最优的路由发送,如果有多条最优路径才进行负载分担;冗余性指的是当最优路径失效后,次优路径能作为备用来保证信息能够正常到达。如果想用尽量少的词来记住网络层,那就是“路径选择、路由及逻辑寻址”。

数据链路层

在通信子网实际的传输过程中,链路拓扑按照网络特点划分了很多种类,为了适应不同链路,我们需要制定与之对应的标准,一个标准的集合我们便称为数据链路层。可见,不同网络的数据链路层有着很大的区别,这里我们以多路访问环境的数据链路层为例进行分析。

网络最初使用较多的是PPP(一种点到点链路)架构,也就是两台设备直接通过一条链路相连,链路中间不能有其他设备接入。网络层完成了信息的宏观寻址操作,在PPP网络环境下其实已经可以完成正常的通信了。但是我们需要知道的是,为了高效使用链路带宽,另外一种网络底层架构逐渐兴起,并局域网应用广泛,简单的局域网组成如下:

这种网络结构称为多路访问,其特点是在同一个网段中可以有多台设备,为了方便互联,所有网线会连接到中间设备(今天称之为集线器),并由其进行统筹协作。现在我们来看看,如果在多路访问环境下直接和PPP环境一样使用IP地址进行转发会出现什么问题?以图四为例,第一,如果服务器发送信号访问网络PC1,集线器因为不知道目的设备的具体位置,只能把接收到的信息原封不动的复制到自己的所有其它接口发送,因此每一台PC都会得到同样的信息,又因为这些PC都不知道是否这个信息就是发给自己的,所以都会接收处理。这样一来,既浪费了链路带宽,又占用了其余PC的内部资源。第二,当服务器需要与外网互访时,因为本局域网环境中有两个路由器作为网关,同理,每个路由器都会接收到服务器发送的信息。而路由器发现目的IP地址不是自己的时候,便会查找路由表,一旦有对应IP地址的信息,路由器都会进行转发。这样的话,目的设备不仅会收到两份相同的数据,同时也造成了带宽的浪费。我们可以从这个例子中看到,由于多路访问网络的特点,直接用IP地址进行转发很不精确,也严重的占用了设备与链路资源。那么我们怎么来解决这个问题呢?这时候我们可以想一下,为什么点到点环境能够直接用IP地址进行转发呢?这是因为PPP环境中一个网段只有两台设备,本端发送给对端的信息也只有对端会接收,不存在精确这个问题。除此之外,随着网络技术的发展,半双工模式(一条链路同时刻只能一端发送信息)逐步取代了单工模式,这本是一个好消息,但多路访问结构因为链路利用效率高,利用集线器连接的各个链路在半双工的情况下传递信息便容易发生冲突,降低了传输效率,这也是我们需要解决的重要问题。这里需要明确的是,我们无法改变在一条半双工的链路上无法同时通信的事实,但是可以避免不同链路之间的冲突。于是我们沿着这两个思路对多路访问环境的数据链路层进行架构。

多路访问环境的数据链路层第一个需要实现目标是做到同一网段中的精确传输,所以对每一个设备需要有一个极为精确的标识,而IP地址是人为规划出来的,可能重复和改变,显然不符合我们的要求,这时MAC地址应运而生,这个地址由每个设备出厂自带并精确到了并全球唯一。现在到了制定规则的时候,对比之间我们提到的问题,首先,如果设备接收信息的目的MAC地址和自己不同,那么自己直接丢弃,减少CPU的浪费;再来,中间设备记录这些源MAC地址与接口的关系,进行精确转发。 只要做到了这两点,实际上信息传递的过程已经变为了点到点模式,精度大大提高,可见MAC地址是多么的重要。第二个目标是避免不同链路之间的冲突,首先明确链路之间的冲突是因为集线器仅是将不同链路简单连接,并没有做冲突保护,所以我们必须在集线器的基础上将这些链路进行有效的区分。由以上两点可见,中间设备是网络的核心,需要其增加隔绝冲突和精确转发的功能,因此网桥和交换机也就随之依次出现了,当然集线器因为价格便宜的原因现在仍然在一些特定环境中使用。

最后,为了满足最底层数据的发送的需求,数据链路层还需要将数据帧(本层数据的专有名称)转化为比特流的格式再进行传输,这是因为只有比特流才方便进行向物理信号的转换。

物理层

通过上面六层的努力现在已经将体系完成的七七八八了,但毕竟最终传递的不是0或者1这样的数字而是物理信号,物理层也正是为解决这一点而诞生。物理层的核心功能便是将从上层得到的比特流转化为对应的电信号,再进行调幅等处理,最后发送到链路上传输,也或是在接收过程中将得到的电信号处理得到比特流传递到上层。最后,出于对不同网络环境中数据链路层有很大区别的考虑,物理层也为不同的数据链路层制定了相应的规范,例如以太网网环境(一种广播多路访问结构)和点到点环境中比特流和电信号相互转换的规则便是有所不同的。

附:一张超级强大的OSI七层模型图解

本文内容为个人理解,如有错误的地方,欢迎指正!

OSI七层模型设计思路相关推荐

  1. 【网络编程】一、如何记住OSI七层协议模型,看完还记不住的来打我。

    学过计算机网络这门课的童鞋,一定都知道OSI七层协议模型. 那么现在闭上眼,能按顺序说出来的童鞋麻烦右上角点个赞,让博主看看有多少? 哇,0个赞,不是吧. 没关系,下面跟着博主的思路,看完本篇之后,我 ...

  2. 二网络专题OSI七层模型、TCP/IP协议栈

    一.OSI七层模型 OSI由ISO(国际标准委员会)规定. OSI七层模型 层级 名称 常用协议 7 应用层 http. 应用层 6 表示层 LLP 5 回话层 ssl.TLS 4 传输层 tcp.u ...

  3. TCP/IP四层模型和OSI七层模型

    TCP/IP四层模型和OSI七层模型对应表.我们把OSI七层网络模型和Linux TCP/IP四层概念模型对应,然后将各种网络协议归类.     表1-1  TCP/IP四层模型和OSI七层模型对应表 ...

  4. OSI[七层]与TCP/IP[四层]模型简述简图

    OSI参考模型(OSI/RM)的全称是开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它是由国际标准化组织(Interna ...

  5. 计算机网络7层协议模型,计算机网络(一) OSI七层模型及TCP/IP dubbo协议

    3.TCP/IP 四层模型: TCP/IP协议:是一个网络通信模型,是OSI 七层模型的简化,为4层模型,泛指众多(TCP,UDP,IP等)协议: OSI TCP/IP 功能 协议 应用层 应用层 文 ...

  6. osi七层网络层_OSI层速成课程

    osi七层网络层 介绍 (Introduction) Have you ever wondered how data is sent through the network from one mach ...

  7. osi七层协议和tcp/ip四层协议

    (大部分内容为转载) OSI(Open System Interconnection)是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范,共包含七层协议.OSI七层协议是由ISO (I ...

  8. OSI七层 TCP/IP四层 TCP/IP协议栈: 不同的通信协议的大集合

    应用层: 网络服务与最终用户的一个接口. 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP 表示层: 数据的表示.安全.压缩.(在五层模型里 ...

  9. 工业总线通信与OSI七层模型

    OSI七层模型 分层 应用层是什么协议,不受底层的影响.比如CANopen的底层可以是Ethercat,也可以是CAN Bus. 同样,串行通信的底层可以是485也可以是232. 485自动收发电路 ...

  10. OSI 七层参考模型

    值得注意的是, OSI 参考模型本身并不是一个完整的网络体系结构,因为它并未确切地描述用于各层的协议和服务,它仅仅告诉我们每层应该做什么.不过, ISO 已经为各层制定了标准,但它们并不是参考模型的一 ...

最新文章

  1. 数据、人工智能和传感器按COVID-19新冠流感排列
  2. flexnet licensing 启动多个服务_又小又灵巧,浪潮边缘计算服务器获深度评测高分...
  3. Android ADB被占用 重启 ADB方法
  4. ANSYS FLEXlm License Manager的卸载方法
  5. 第一章 1 常用库之time
  6. Workbox.routing v3.x 中文版
  7. Android JNI作用及其详解
  8. 抖音新特效:蚂蚁呀嘿安卓教程
  9. Git服务器的搭建和使用
  10. (全程图解)Axure RP8.0安装、破解、汉化教程
  11. 微信图片dat转jpg工具(自动区分JPG、PNG、GIF)
  12. 互联网大佬打脸啪啪啪啪史
  13. dropify图片上传插件的上传数据
  14. 号称最为简明实用的Django上手教程(下)
  15. 成长了,记录一下,增值税发票识别写入excel文件里
  16. 网友自制 MIUI 13 海报被疯传
  17. 入网许可证_入网许可证查询
  18. 华为 中兴 海康嵌入式软件工程师面试题
  19. 三硬币问题的EM算法实现
  20. 三张图看微软业务:Office是最大收入来源

热门文章

  1. 【每日算法Day 87】今天我脱单了,所以大家不用做题了!
  2. Kubeflow:连接云计算和机器学习的“桥梁”
  3. 重构:改善既有代码的设计 精彩书评二
  4. 末日帝国——Agile公司的困境 (5)
  5. 博客营销之博客平台的选择和优化
  6. 5.1傅里叶展开,傅里叶级数推导--非常棒
  7. 《机器学习实战》原书数据与代码(基于Python3)汇总
  8. Scala中的Apply方法与伴生对象
  9. 对数线性模型:逻辑斯谛回归和最大熵模型
  10. Attention机制的小理解