转载: https://blog.csdn.net/yangpl_tale/article/details/49444699

网络中的七层协议为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。那么介绍一下在网络七层协议中传输数据时的工作原理是:
在数据的实际传输中,发送方将数据送到自己的应用层,加上该层的控制信息后传给表示层;表示层如法炮制,再将数据加上自己的标识传给会话层;以此类推,每一层都在收到的数据上加上本层的控制信息并传给下一层;最后到达物理层时,数据通过实际的物理媒体传到接收方。接收端则执行与发送端相反的操作,由下往上,将逐层标识去掉,重新还原成最初的数据。由此可见,数据通讯双方在对等层必须采用相同的协议,定义同一种数据标识格式,这样才可能保证数据的正确传输。

这个模型学了好多次,总是记不住。今天又看了一遍,发现用历史推演的角度去看问题会更有逻辑,更好记。本文不一定严谨,可能有错漏,主要是抛砖引玉,帮助记性不好的人。总体来说,OSI模型是从底层往上层发展出来的。

这个模型推出的最开始,是是因为美国人有两台机器之间进行通信的需求。

需求1:-> 物理层Physical(以二进制数据形式在物理媒体上传输数据)

科学家要解决的第一个问题是,两个硬件之间怎么通信。具体就是一台发些比特流,然后另一台能收到。于是,科学家发明了物理层:

主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。

需求2:-> 数据链路层Data Link(传输有地址的帧以及错误检测功能 )

现在通过电线我能发数据流了,但是,我还希望通过无线电波,通过其它介质来传输。然后我还要保证传输过去的比特流是正确的,要有纠错功能。

于是,发明了数据链路层:

定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。

需求3:-> 网络层Network  (为数据包选择路由)

如果我有多台计算机,怎么找到我要发的那台?或者,A要给F发信息,中间要经过B,C,D,E,但是中间还有好多节点如K.J.Z.Y。我怎么选择最佳路径?这就是路由要做的事。

于是,发明了网络层。即路由器,交换机那些具有寻址功能的设备所实现的功能。这一层定义的是IP地址,通过IP地址寻址。所以产生了IP协议。

需求4:-> 传输层Transport (提供端对端的接口协议,TCP/OCP等)

现在我能发正确的发比特流数据到另一台计算机了,但是当我发大量数据时候,可能需要好长时间,例如一个视频格式的,网络会中断好多次(事实上,即使有了物理层和数据链路层,网络还是经常中断,只是中断的时间是毫秒级别的)。

那么,我还须要保证传输大量文件时的准确性。于是,我要对发出去的数据进行封装。就像发快递一样,一个个地发。

例如TCP,是用于发大量数据的,我发了1万个包出去,另一台电脑就要告诉我是否接受到了1万个包,如果缺了3个包,就告诉我是第1001,234,8888个包丢了,那我再发一次。这样,就能保证对方把这个视频完整接收了。

例如UDP,是用于发送少量数据的。我发20个包出去,一般不会丢包,所以,我不管你收到多少个。在多人互动游戏,也经常用UDP协议,因为一般都是简单的信息,而且有广播的需求。如果用TCP,效率就很低,因为它会不停地告诉主机我收到了20个包,或者我收到了18个包,再发我两个!如果同时有1万台计算机都这样做,那么用TCP反而会降低效率,还不如用UDP,主机发出去就算了,丢几个包你就卡一下,算了,下次再发包你再更新。

TCP协议是会绑定IP和端口的协议,下面会介绍IP协议。

需求5:-> 会话层Session(解除与建立与别的接口的联系)

现在我们已经保证给正确的计算机,发送正确的封装过后的信息了。但是用户级别的体验好不好?难道我每次都要调用TCP去打包,然后调用IP协议去找路由,自己去发?当然不行,所以我们要建立一个自动收发包,自动寻址的功能。

于是,发明了会话层。会话层的作用就是建立和管理应用程序之间的通信。

需求6:-> 表示层Presentation(数据格式化,代码转换,数据加密)

现在我能保证应用程序自动收发包和寻址了。但是我要用Linux给window发包,两个系统语法不一致,就像安装包一样,exe是不能在linux下用的,shell在window下也是不能直接运行的。于是需要表示层(presentation),帮我们解决不同系统之间的通信语法问题。

需求7:-> 应用层Application(文件传输,电子邮件,文件服务,虚拟终端)

OK,传输的数据根据应用层的协议进行服务

记忆口诀 : 一个比较令人头疼的问题是如何不缺不漏而且按顺序记住这7层呢?脑动大开的网友给出了许多记忆口诀(不知道你喜欢哪个?):

1. All    People    Seem    To    Need   Data    Processing

2. Please   Do   Not   Tell   Stupid   People   Anything

3. Please   Do   Not   Take   Sales  People's   Advice

补充:

Socket:

这不是一个协议,而是一个通信模型。其实它最初是伯克利加州分校软件研究所,简称BSD发明的,主要用来一台电脑的两个进程间通信,然后把它用到了两台电脑的进程间通信。所以,可以把它简单理解为进程间通信,不是什么高级的东西。主要做的事情不就是:

A发包:发请求包给某个已经绑定的端口(所以我们经常会访问这样的地址182.13.15.16:1235,1235就是端口);收到B的允许;然后正式发送;发送完了,告诉B要断开链接;收到断开允许,马上断开,然后发送已经断开信息给B。

B收包:绑定端口和IP;然后在这个端口监听;接收到A的请求,发允许给A,并做好接收准备,主要就是清理缓存等待接收新数据;然后正式接收;接受到断开请求,允许断开;确认断开后,继续监听其它请求。

可见,Socket其实就是I/O操作。Socket并不仅限于网络通信。在网络通信中,它涵盖了网络层、传输层、会话层、表示层、应用层——其实这都不需要记,因为Socket通信时候用到了IP和端口,仅这两个就表明了它用到了网络层和传输层;而且它无视多台电脑通信的系统差别,所以它涉及了表示层;一般Socket都是基于一个应用程序的,所以会涉及到会话层和应用层。

引用OSI七层模型:

OSI七层模型简单理解相关推荐

  1. OSI七层模型简单介绍

    OSI七层模型 简单介绍 七层模型,亦称OSI(Open System Interconnection).参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OS ...

  2. OSI七层模型个人理解

    个人比较喜欢从下往上理解,新手做笔记,如理解有误,欢迎评论纠正. 需要注意,随着时代的发展,OSI已经被TCP/IP 4层模型淘汰,在当今世界上并没有大规模的使用. tcp/ip四层模型:https: ...

  3. OSI七层模型的理解

    前言: 学习网络工程,OSI是必不可少的一个通信知识点,理解osi模型是最为基础的要求,但是osi模型官方解释总是让人有点摸不到头脑,但是我们又必须的理解它.掌握它,那么我们有什么办法来又快有好记的掌 ...

  4. OSI七层模型 简单易解(超详细)

    首先了解一下各个分层 三点综合,网络分层像"快递".网络分两个系统,端系统和中间系统,端系统相当于快递里的卖家和买家,中间系统是帮着端系统去调解,快递发件的快递公司,发件的是网络平 ...

  5. 通过OSI七层模型理解UDS、OBD、KWP2000、CAN等协议

    0.前言 最近在学习汽车诊断方面的知识,一大堆术语.协议.标准扑面而来.在一段迷茫过后,稍微有了点方向感.通过OSI七层模型搭建出诊断的基本框架. 特此记录,以作小结. 1.概念梳理 1.1. 汽车诊 ...

  6. 理解OSI七层模型(了解OSI七层模型,数据如何传输,封装,解封装)

    文章目录 理解OSI七层模型 什么是OSI七层模型 理解OSI七层模型 举例子 七层协议,分析过程: 数据传输过程 封装数据 解封装数据 数据是如何封装和解封装 理解OSI七层模型 第一层:物理层. ...

  7. 20190502(OSI七层模型理解/Websocket理解/)

    1.OSI七层模型了解 物理层:网卡,网线,集线器,中继器,调制解调器 数据链路层:网桥,交换机,HUB 网络层:路由器 网关工作在第四层传输层及其以上 物理层 在OSI参考模型中,物理层(Physi ...

  8. OSI七层模型具体解释

    OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最基本的功能就是帮助不同类型的主机实现传输数据 . 完毕中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...

  9. 请举出OSI七层模型在实际应用中的实例

    答案1: 请举出OSI七层模型在实际应用中的实例,就是问OSI七层模型在实际操作中的例子,比如说会话层的应用例子是打开多个浏览器窗口这种. 注:不是解释这七层模型 举例: 就用QQ聊天为例子,用户在Q ...

最新文章

  1. 中间件(1)分布式缓存
  2. java解析sql查询字段_sql解析json格式字段 如何获取json中某个字段的值?
  3. 修正CS2.0中的日历头显示错误
  4. Java PropertyPermission equals()方法与示例
  5. mysql 8.0.11-Windows (x86, 64-bit)下载地址与安装教程
  6. Leetcode-437. 路径总和 III(Java)
  7. Python for循环 - Python零基础入门教程
  8. [zz]Maya C++ API Programming Tips
  9. yacc c语言语法分析器,GitHub - waxnkw/yacc: 简陋版语法分析器
  10. skype api java版 打电话
  11. 异数OS TCP协议栈测试(五)--关于QOS与延迟
  12. 「springcloud 2021 系列」nacos配置管理 这样用就对了
  13. Java 求解加油站
  14. AndroidX适配教程
  15. 中国石油大学《物理化学》第一阶段在线作业
  16. date time 分开存储如何合并_关于TDateTime的TDate与TTime合并的问题 | 菲菲的家
  17. ESX通过命令行重启虚拟机
  18. SAP案例教程FI财务后台配置
  19. 解读 Apache 多个顶级数据库项目的成长经历与开源文化理念
  20. Linux磁盘分区与LVM详解

热门文章

  1. c# jarray 快速提取_C#编程之C# JArray与JObject 的使用
  2. Excel“查找”结果如何高亮显示,当前单无格背景颜色
  3. 全能虚拟服务器,服务器做全能虚拟主机
  4. nmap端口扫描参数设置
  5. Quartz 定时任务时间设置
  6. DuiVision开源界面库介绍
  7. java 字节流 图片_Java下载图片一. 通过字节流传输
  8. 40多个常用的 Oracle 查询语句
  9. mysql字段attributes_mysql8 参考手册-INFORMATION_SCHEMA USER_ATTRIBUTES表
  10. Android自动化测试第三季-金阳光-专题视频课程