IT修炼内功鼻祖“OSI通讯协议”

Wesley13
• 阅读 662

IT修炼内功鼻祖“OSI通讯协议”


一、OSI的来源及定义


我们平常所说的7层通讯协议指的就是OSI参考模型。是上个世纪80年代,为了更好的让以太网推广和为了更好使网络应用更为普及,国际标准化组织在1985年研究提出了一套网络互联模型——即OSI(Open System Interconnect),开放式系统互联模型,一般都叫OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都用相同的规范,大家就能互联互通了。

它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。各层具体的解释和含义如下:

IT修炼内功鼻祖“OSI通讯协议”


二、OSI标准下网络通讯的流程

光看各层的书面定义其实是很难理解在网络信息传递过程中,各个层所起的作用的。下面就个人理解OSI时假想的场景给大家举个例子:有两个集团军的司令私交不错,但由于军事演习的时候个人的通讯设备全都被禁用了,A集团军的司令想通知B集团军的司令演习后请他吃饭,只能通过军队的通讯系统(7层通讯)进行信息传递。

第一层,A集团军司令(“应用层”)自己写好要传递的话,即原始通讯内容:“演习过后你用空吗?有空的话我想请你吃饭”。把这句话交给自己的通讯兵。

第二层,A集团军通讯兵(“表示层”),通讯兵一看,这是司令传递的内容,肯定得严格保证安全,于是将原始通讯内容,转化成了军队内部的传递信息的数据格式,并对数据进行了加密。

具体转化分两步:

1、将文字转成拼“yanxiguohouniyoukongma?youkongdehuawoxiangqingnichifan”,

也就是规定数据格式

2、将这段拼音的各个字母改成拼音版的数字标记法展示,如字母y表示成拼音表第四行第四个字母。于是将这串字母变成了一张张如下的卡片(即规定加密方式)

IT修炼内功鼻祖“OSI通讯协议”

第三层,A集团军通讯兵(“表示层”)将整理好的卡片交给A集团军的通讯部门(“会话层”)。通讯部门收到卡片后了解到是需要发往集团军B高层的紧急军事信息,立马着手安排与集团军B建立联系。

第四层,A集团军通讯部门指定具体负责本次军事信息传递的小张(“传输层”),将这些卡片按顺序排好后,打包到一个包裹里(即“报文”)。然后通知传递部门,这是要发往B集团军的紧急军事信息,请安排传递。

第五层,传递部门(“网络层”),找到了B集团军所在的位置和自己去往B集团军的最短可行路线。但发现去往B集团军的路都是山路只能依靠马队传递,一次没法携带这么多卡片,每次传递兵只能携带4个卡片,于是就将整个包裹(“报文”)拆分成了多份(即“帧”)并标记好开头结尾和顺序。

第六层,传递兵(“数据链路层”),拆分好每次传递的小份包裹(“帧”),开始往走山路的马队上装小份包裹。

第七层,走山路的马队(“物理层”)将包裹传递到B集团军。

上面讲的是A集团军司令信息传递的过程,B集团军司令信息接收的过程,正好与之相反,但也同样走的是军队规定的7层通讯。

第七层,接到走山路的马队(“物理层”),运送过来的包裹;

第六层,B集团军通讯部门的传递兵(“数据链路层”),将一份份的小包裹(“帧”)都接收好,并对每份小包裹进行确认签收。

第五层,传递兵将小包裹全都扛回传递部门,传递部门再将包裹按标记的开头和结尾以及顺序进行组装,组装成最终的本次通讯的整体大包裹(“报文”)

第四层,B集团军通讯部门(“传输层”),指定B集团军通讯部门的小李负责本次重要军事信息的传递与反馈接收(“会话层”)

第三层,B集团军通讯部门的小李(“会话层”),将整个包裹(“报文”)转交给B集团军司令的通讯兵。

第二层,B集团军司令的通讯兵(“表示层”),按军队加密协议和传输格式,将卡片先转化成的拼音,再转为文字,并将最终翻译出的原始通讯内容转交给司令;

第一层,B集团军司令(“应用层”)接到原始通讯内容,想着老战友还惦记请我吃饭,心里特别开心。随即决定要回复……

三、技术角度回顾

上面一个完整的通过这7层的网络通讯顺利完成。接下来我将用技术术语再描述一遍这7层协议。服务器A的应用进程1想要传递信息到服务器B的应用进程2:

IT修炼内功鼻祖“OSI通讯协议”

(1)应用层:它是为应用程序提供通信服务的。比如我们熟知的:http、ftp、smtp、amqp等都是应用层协议。“应用层”的作用就是把应用进程的原始通讯内容转交给“表示层”。

(2)表示层:这一层的主要功能是定义数据格式及加密。例如,ftp允许你选择以二进制或asii格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择asii格式,发送方将把文本从发送方的字符集转换成标准的asii后再通知“会话层”建立会话发送数据。

(3)会话层:其主要功能是按照在应用进程之间的约定,按照正确的顺序收发数据,和按照约定的通讯形式进行对话的开始、控制和结束。通讯形式可以按照半双工、单工和全双工的方式建立会话。

注:会话层把一次通讯分成多个连接,会话层保证一次通讯的完整性

(4)传输层:传输层的作用是向高层(会话层)屏蔽它之下层数据通信的细节。它会把高层要传递的信息封装成报文,也会把下层接收到的信息转化成报文展现给高层。传输层负责提供两节点之间数据的可靠传送,当两节点的联系确定之后,传输层则负责监督工作。该层常见的协议:TCP/IP中的TCP协议和UDP协议。

注:传输层保证一次连接的完整,也就是说本次会话你愿意建立连接多少次我不管,那是会话层管的,我传输层只保证每次连接传递数据的可靠和完整性。

(5)网络层:通过路由选择算法,为报文通过通信子网选择最适当的路径。他定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包(帧)的分段方法。这一层定义的是IP地址,通过IP地址寻址。

(6)数据链路层:数据链路层的功能就是实现系统实体间(设备之间)信息块的正确传输,通过进行必要的同步控制、差错控制、流量控制,为网络层提供可靠、无错误的数据信息。它在发送时把数据变成帧(接收时把帧变成数据)

(7)物理层:物理层负责连接计算机与设备或者计算机与计算机,比如网卡与通讯电路的连接,它描述了设备的机械标准,比如接口类型、每一条线的电气特性、以什么速率、带宽发送。它传输的是比特流。物理层常用多个规范完成对所有细节的定义。示例:rj45,802.3等。

以上仅是技术理论上的两个计算机应用进程间的通讯,实际的通讯中并不是从计算机A直接到计算机B,而是需要通过中间的很多中继节点,这些中继节点仅承担信息的传递,因此他们相当于现实中的“驿站”,并不对货物(通讯内容)进行解析。具体如下图:

IT修炼内功鼻祖“OSI通讯协议”


四、附录补充

1、“单工、半双工和全双工****”通讯方式的普及

单工数据传输只支持数据在一个方向上传输;发送方只能发送信息,接收方只能接收信息,不能实现双向通信,举例:电视,广播。

半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接收或发送信息,可以实现双向通信。举例:对讲机。

全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力;在同一时间可以同时接收和发送信息,实现双向通信,举例:电话通信。

IT修炼内功鼻祖“OSI通讯协议”

2、常见误区“Socket****是哪层协议”

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

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

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

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

如需转载请私信后台留言发现文章有错误、对内容有疑问,都可以通过关注宜信技术学院微信公众号(CE_TECH),在后台留言给我们。

注:文章封面原图素材来源于网络,若有侵权请留言删除。****

IT修炼内功鼻祖“OSI通讯协议”

IT修炼内功鼻祖“OSI通讯协议”

本文分享自微信公众号 - 宜信技术学院(CE_TECH)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这