热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何生动形象、切中要点地讲解OSI七层模型和两主机传输过程?

先回顾一下OSI七层模型有些啥内容:两主机通信的过程,从发送者(以下简称A)到接收者(以下简称B),属于从7层(应用层)->1层(物理层)封装,然后传输到远端,再从1层(物理层)->7层(
先回顾一下OSI七层模型有些啥内容:

两主机通信的过程,从发送者(以下简称A)到接收者(以下简称B),属于从7层(应用层)->1层(物理层)封装,然后传输到远端,再从1层(物理层)->7层(应用层)解封装的过程。

1、 当A打开了QQ这个软件,相当就到达应用层了;因为软件会根据你的操作调动机器底层的硬件工作了。


2、 当A往QQ这个软件的聊天窗口里面输入信息,发出后,QQ会将这个信息保存在本地聊天记录文件MSGEX.db(一般就保存在QQ目录下以你的QQ号码为文件夹里)。以某种格式编码/保存某种信息,这可以理解为表示层了。


3、 当A打开与B的聊天窗口,输入信息,按下“输入”按钮,用户的操作就完结了,剩下都是机器自己的操作了。实际传输之前QQ会先建立A与B的会话连接,才真正开始传输信息/数据(你可以理解借传输文件理解:你发送文件给对方,要等待对方按下接收,才算建立了会话,然后才开始传输。)这算会话层了。


4、 会话建立后,会将A发的信息斩件,如A发送“你吃了饭没有”?传输层将这句话斩成“你”“吃”“了”“饭”“没”“有”6个数据段,标记号使用的端口号,然后准备发出去。


5、 接上一层,信息还未发出去,这时候在网络层做路由选路,可以理解为,从A家出去,可以分别经“联通”“电信”“移动”3个网络中的一个再到B家。

网络层根据路由协议负责选路(根据链路质量、带宽、开销等方法论)。假设最后选了2条,可能就A->联通->B发送“你”“吃”“了”3个数据段,A->电信->B发送“饭”“没”“有”3个数据段。

选路后,这一层要标记IP包头,包头主要内容是源IP地址,目的IP地址,使用什么协议。其中源、目的IP相当于你寄信的时候的收发的地址与邮政编码,标记出发送者与接收者。而协议相当于这封信到底用什么语言书写。(只有保证2端使用同种语言,才能确保通信起来,否则你用英文写信给大妈,大妈怎么看得懂呢?)


6、 然后再到数据链路层,数据链路层主要是负责同一个子网内的通信的。例如A、B连接在同一台二层交换机,就属于同一个子网,那么数据帧的通信室是不需要通过网络层的(即三层交换机或者路由器),直接在这台二层交换机就过去了。这一层打的是MAC地址的帧头,对于上述通信过程来说,就是为数据帧打上A的机器的MAC与A的网关的MAC。这一层的工作就完成了。


7、 最后一层了,经过上述斩件、打完各层标签后的6个数据帧,物理层将他们翻译文6段0、1表示的比特流,然后通过光纤、铜缆进行传输。


8、 当比特流传输到了远端,接着B的机器按照上述的1~7的步骤反方向运行一次即可(即有物理层到应用层)。就是一层层读取标签,传输给标签标记着的相应对象,然后摘除标签,再读取上一层标签,直到最后B的应用程序能够读到A往应用程序输入的数据为止。

--------------------------------------------------------------------------------------------------------------------------------------------

对于题主的评论,补充2个图;

2个主机之间的通信,对于2台主机来说,肯定是都需要跨越7层的,而平常说的只需要去到2层或者3层,其实是对于中间系统而言的,就是说中间的交换机、路由器而言;

例如图1的假设两端的通信实体在一个局域网内,其实传输的数据包去到交换机时,交换机拆开二层帧头,再查自身的MAC地址表,发现表里面有对应的MAC地址,然后对应的对口是哪个,接着就把帧发送到该端口转发出去,它的任务就完成了。根本不需要到达网络层的意思是,根本都不需要拆卡3层的IP包头来读取里面的信息。

通过转发,最好到达B主机,然后从1层拆到7层,B用户的主机最终就读取到信息了。


对于图2,由于A、B两通信实体跨域广域网,所以光靠MAC地址表,肯定是查不到的,这时候路由器会把IP包头也拆开,读取目的IP地址,再查路由表,就知道往哪个端口发出去了。然后层层转发,就可以达到目的地了,接下来就和图1的一样了。


OSI参考模型
OSI,是英文Open System Interconnect的缩写,中文翻译开放系统互联,一个抽象七层模型,但其核心思想一点也不抽象,非常具体,其核心思想:

1) 通信两端的主机能够理解对方的语言

这是要求主机使用相同协议格式来发送数据

2) 希望通信系统模块化,每个模块提供标准接口

每个模块给和直接耦合的模块提供标准化的流程接口,每个模块内部无论怎样实现没有硬性规定,但外在的接口一定是标准件,这样耦合的模块可以无缝对接起来。

这样做的好处有:
(1) 由于使用标准接口,每个通信模块可以独立开发,增加自由度,提高生产效率
(2) 增加代码的重复利用率,由于通信模块的标准化的外在接口,应用程序可以直接使用现成的通信模块,而无需重新编码,这大大减轻了开发者的负担,间接地提供了生产效率。

以上的种种好处对于初学者,如云里雾里。

人类的学习有个特点,当遇到难以理解的抽象问题,总是希望在现实生活里找到可以类比的事物,咱们先来谈谈汽车产业的标准化。



最早美国的汽车生产商、如福特、通用,各自在自己的小作坊里生产,产量很低,轮胎尺寸也没有约束,自己生产多大的轮胎,就用多大的轮胎。

福特改进了汽车流水线,经过一个若干道工序,
1)冲床压制框架外壳 2)车体倒转焊接 3)除毛边 4)装配大梁、防震、引擎 5)内部装潢 6)加装散热器、油压系统 7)安装轮胎

一辆小汽车就诞生了,随着产业规模越来越大,产业分工越来越精细化,有了汽车零部件供应商,比如轮胎,如果汽车生产商对轮胎尺寸规格大相径庭,那无疑会增加供应商的成本,而采用标准化的轮胎尺寸,供应商只需生产几种标准尺寸的就可以了,无论哪家汽车厂商都可以使用,规模经济成本自然会下降,所以标准化是双赢,以上就是汽车产业的标准化。

计算机网络遵循着同样标准化的演进之路,众所周知,最早的计算机网络是美国人搭起来的,名字是ARPA网,ARPA是英文Advanced Research Projects Agency的缩写,中文是美国国防部高级研究计划署,ARPA网使用了TCP/IP作为计算机网络互联协议,在基于BSD操作系统里实现了这些协议,TCP/IP的流行引起了业界的关注,于是以TCP/IP为框架模型,国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合提出并制定了这个七层的OSI参考模型

1)应用层 2)表示层 3)会话层 4)传输层 5)网络层 6)链路层 7)物理层

用户数据经过以上七道工序的流水线,一串0、1组成的二进制流诞生了,根据物理层是光纤、电缆、还是空气,二进制流转化为光信号、电信号、电磁波信号在物理介质(物理层)里传输,经过若干个中继交换机(链路层)的交换、经过若干个中继路由器(网络层)的转发,最终到达数据的终点。



我们来打个比方,假设A公司老总要寄文件给B公司的老总。

老板会喊他秘书过来,说把这玩意寄给B公司的老总。

秘书拿到快递后,首先选取了“倪丰快递”,并且查到了B公司的地址,把文件装到了快递信封里,填好快递单,就交给了快递小哥了。

而倪丰快递则是把近期收到的快递装成了一个集装箱,找到了某卡车司机,说,把这箱子运到 B 市的集散中心去。

然后这封快递送到了 B 公司的老总秘书那里去,秘书拆开快递,把文件递给了 B 公司老总。

纵观整个过程,我们发现,
1. 老总在把快递交给秘书时,他并不关心秘书是怎么打包的,也不关心秘书找了什么法子寄出去的,他只期待对方老总能收到即可;

2. 秘书则既不关心“倪丰快递”是如何具体用什么运输方式运到 B 市的,又不关心这份文件的内容,只期待这封快递能够被送达对方的公司地址;

3. “倪丰快递”则只关心装着快递的集装箱能够被司机运往 B 市集散中心,却不关心司机究竟走了什么路线,开了什么牌子的货车,也不关心这封快递信封里装了什么东西;

4. 司机只关心怎么把集装箱运到目的地,而不会关心集装箱里面装的是什么。

OSI 7 层模型则与之类似,都是下层为上层提供传输服务,不关心上层传输的内容,而上层也不关心下层传输的手段,只期望能将信息最终发到通信对端的相应层次上。

再补充一句,虽然设计上是下层和上层是服务和被服务的关系,互相不关心实现细节,实际上出于这样或那样的原因,多少还会有一些相关性,并不完全独立,但是层次结构还是明确的。



推荐阅读
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 西北工业大学作为陕西省三所985和211高校之一,虽然在农业和林业领域不如某些顶尖院校,但在航空航天领域的实力尤为突出。该校的计算机科学专业在科研和教学方面也具有显著优势,是考研的理想选择。 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 应用链时代,详解 Avalanche 与 Cosmos 的差异 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
  • 虚拟机网络设置与数据库远程连接优化指南
    本文针对个人计算机上虚拟机网络配置与数据库远程连接的问题,提供了一套详细的优化指南。在探讨远程数据库访问前,需确保网络配置正确,特别是桥接模式的设置。通过合理的网络配置,可以有效解决因虚拟机或网络问题导致的连接失败,提升远程访问的稳定性和效率。 ... [详细]
  • VMWare中bridged和NAT的区别
    概述:VMWare提供了三种工作模式,它们是bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式)。要想在网络管理和维护 ... [详细]
author-avatar
浅小影HLGC_215
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有