OSI七层参考模型

前言

最近由于已经入职了,签的工作是PLC相关的,计划干工控这行了。
于是在学习一些公司的产品参考手册(PLC、变频器、触摸屏等),其中接触到了一些工业通信协议(也不知道这么描述是否正确)的知识。但其中过程接触到了很多常见的名词,应该是非常常见的知识点,但我没学过,其中OSI(OpenSystemInterconnect)七层参考模型和TCP/IP四层参考模型很常见,目前接触到的文章都会提及。
故此记录,但笔者无法完全理解这两个模型。
本文先记录OSI七层参考模型。

参考文章

参考:
1.https://blog.csdn.net/M10_2339656216/article/details/119752566
2.https://www.zhihu.com/question/49335649
3.https://baike.baidu.com/item/%E4%B8%83%E5%B1%82%E6%A8%A1%E5%9E%8B/1441391?fr=aladdin
只列出一部分,具体请参考文章中,笔者已经给出了。

OSI七层参考模型

总论

其实看看百度百科就可以大致清楚了,就是人为提出的参考模型,然后对应7层。见下图1
那我们常听到的一些协议和这个有什么关系呢?
其实大部分就是对应这里面的,只不过有些协议只用到其中的某些层,或者说,在有些协议中,将一些层集合到一层里了,所以就有了一些所谓的五层模型。
比如说我们常听到的232通信协议,其实232就是对应物理层,比如说232电平规定-3V ~ -15V为逻辑“1”;+3 V~ +15V为逻辑“0”。232是全双工,最少可以使用3根线,TxD、RxD、GND,也就是所谓的三线制。而其接口格式有(DB-9)与(DB-25)两种规格,传输距离很短,不过50米。
还有485通信协议,其实也是对应物理层,485电平是使用差分电平信号作为高低电平的,电压差为+2V ~ +6V为逻辑“1”,电压差为-2V ~ -6V为逻辑“0”。485是半双工,使用2根线来做压差,也就是所谓的二线制,有时485被称为422-2,二线制422。如下图2所示。
高电平对应逻辑“1”,低电平对应逻辑“0”,这就是所谓的正逻辑;
高电平对应逻辑“0”,低电平对应逻辑“1”,这就是所谓的负逻辑。
很明显,232是负逻辑,485是正逻辑。
当然,还有422通信,其实也是只是物理层。。。422是4根线,也就是所谓的四线制,如下图3
关于几种常见的物理层电平协议,可以多搜一搜资料就清晰了。
https://www.cnblogs.com/yangfengwu/p/5838059.html
https://blog.csdn.net/ezconn/article/details/100868399
https://blog.csdn.net/wujinglin7/article/details/117360299
https://blog.csdn.net/weixin_39866774/article/details/110994075
这些电平协议常见的接口有DB9、DB25(应该不用了)、RJ45(水晶头)等,
这里可能有同学会觉得奇怪,明明就是2根线、3根线、4根线的接线,为什么还得用DB9(9根线接口)或DB25(25根线接口)呢?不是浪费吗?
在我理解来看,这里应该是为了方便和电脑连接而设计的。应该并没有将DB9里所有的线都用上(毕竟有9根线呢)。如下图4所示(网上找的)。

在这里插入图片描述
图1
在这里插入图片描述
图2
在这里插入图片描述
图3
在这里插入图片描述
图4
根据上面的图1,笔者计划从最高层也就是应用层开始写。
接下来主要是参考
https://blog.csdn.net/M10_2339656216/article/details/119752566
https://blog.csdn.net/MS_blogger/article/details/78939915
https://zhidao.baidu.com/question/26454391.html

第七层:应用层(ApplicationLayer)

暂且理解为用户数据吧,其数据单元也常常简写为APDU。直接面向用户,可以理解成接收用户的需求(比如说我们要传什么数据)。
该层常见的协议有:HTTP、FTP、TFTP、SMTP、SNMP、DNS、TELNET、HTTPS、POP3、DHCP。

第六层:表示层(PresentationLayer)

很多资料提到说是数据加密、压缩等。这一层的作用,笔者理解成数据类型吧,比如说要传的是照片还是视频。
并且照片有jpg、png、bmp等格式,视频同理,有mp4、avi等格式。就简单理解成格式工厂的功能了。。
比如说,有个图片,我无法读取,那可以在确保数据不丢失的前提下,转换成我能读取的格式。
该层常见的协议有:JPEG、ASCll、EBCDIC、TIFF、GIF、PICT、ASCII、EBCDIC、encryption、加密格式等。

第五层:会话层(SessionLayer)

这一层,很多资料的描述是建立、管理、终止会话(在五层模型里面已经合并到了应用层)。
对应主机进程,指本地主机与远程主机正在进行的会话。我的理解就是主机开启与从机通信的进程。
在https://blog.csdn.net/weixin_61269220/article/details/124146628 中,举例了微信、QQ的会话,
我觉得比较形象。

https://easylearn.baidu.com/edu-page/tiangong/bgkdetail?id=df49f120a5e9856a5612607b&fr=search
常见的会话层协议有:
结构化查询语言( SQL, Structured Query Language )
网络文件系统( NFS , Network File System )
远程过程调用( RPC , Remote Procedure Call )
X WINDOWS、ASP

第四层:传输层(TransportLayer)

这一层,顾名思义,就是传输的。
在https://www.zhihu.com/question/49335649 中已经讲得比较形象了,我们要将计算机A的数据传给计算机B,
但是计算机有很多个程序,我们要知道数据从计算机A的哪个端口传输到计算机B的哪个端口,这也就是为啥有些资料说,
传输层的功能就是建立端口到端口的通信,
而关于计算机常用的一些端口号,
请参见https://blog.csdn.net/weixin_42828010/article/details/127500199
但还没完,这层的功能不止于此,
在https://blog.csdn.net/M10_2339656216/article/details/119752566 中,
提到了传输层还提供了节点间可靠与不可靠的传输机制。
这里可能又会有疑惑了,为啥又叫可靠又叫不可靠呢?这是因为传输层协议又不止一种,有的可靠,有的不可靠。
就如同上面几层一样,都是有多个协议的!

该层常见的协议:TCP/IP中的TCP协议(TransmissionControlProtocol)、UDP(UserDataProtocol)协议、Novell网络中的SPX协议和微软的NetBIOS/NetBEUI协议、TLS等

其中TCP协议是可靠的,而UDP协议是不可靠的。
这里又会有疑惑了,如何定义“可靠”?判别标准是啥?
别急,TCP和UDP的传输,请参考https://baijiahao.baidu.com/s?id=1748118781144468893 ,这篇文章很通俗!

看完后应该大致能明白TCP传输过程比UDP复杂很多,TCP报文相较UDP都复杂很多。
TCP是三次握手,还有重传机制的。
如果看完还没感觉,这里有总结,请参考https://blog.csdn.net/B1azar/article/details/124832240

以下摘抄都是参考https://blog.csdn.net/M10_2339656216/article/details/119779976

摘抄开始

TCP在连接和取消连接上,有三次握手、四次挥手。
TCP在数据正确性与合法性上,TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和;同时可以使用md5认证对数据进行加密。
TCP在保证可靠性上,采用超时重传和捎带确认机制。
TCP在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。
TCP在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法)。
为满足TCP协议的这些特点,TCP协议做了如下的规定:
①数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组;
②到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认;
③超时重发:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片;
④滑动窗口:TCP连接每一方的接收缓冲空间大小都固定,接收端只允许另一端发送接收端缓冲区所能接纳的数据,TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出;
⑤失序处理:作为IP数据报来传输的TCP分片到达时可能会失序,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层;
⑥重复处理:作为IP数据报来传输的TCP分片会发生重复,TCP的接收端必须丢弃重复的数据;
⑦数据校验:TCP将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验和有差错,TCP将丢弃这个分片,并不确认收到此报文段导致对端超时并重发。


摘抄结束

网络层(NetworkLayer)、数据链路层(DataLinkLayer)

奇怪,不是一层一层讲吗?怎么一下蹦出两层?
别急,因为网络层常见的的IP和数据链路层常见的MAC经常一起出现!

网络层(NetworkLayer)

在https://blog.csdn.net/M10_2339656216/article/details/119752566 中,
描述网络层为“进行逻辑地址寻址,实现不同网络之间的路径选择,协议有ICMP IGMP IP等”。
要理解网络层,首先就得理解网络,对于网络里常常遇到的
IP(InternetProtocol)地址和MAC(MediaAccessControl)地址,应该先要有基本概念,
请参考https://baijiahao.baidu.com/s?id=1747576032946712930 。这篇文章很通俗!

其实也不难啦,MAC就是6个字节,出厂就设定好了的,唯一不变,也常常被称为物理地址!我们的网卡就是如此。
IP有IPv4和IPv6,IPv4对应的IP地址为4个字节,IPv6对应为16个字节。
IP与MAC不同的是,同一个网里的IP不能一样,而且即便在IP地址是可更改的,只要我们按照要求更改就行!
IP地址还往往与子网掩码一起使用,于是又有了子网、网段的概念。
对于同一个网里(也可称为局域网(LocalAreaNetwork)内部、子网内部、同一网段)的设备,
它们之间通信可以不经过网关。

上面提到了常用的网络层协议——IP协议,关于IP协议,请参考:
https://blog.csdn.net/weixin_50964512/article/details/123687542
https://blog.csdn.net/weixin_49472648/article/details/126672931
https://blog.csdn.net/qq_29344757/article/details/78570272
其中笔者认为分片理解是有些难,以下链接给了解答,请参考
https://blog.csdn.net/m0_60797416/article/details/127846800

关于MAC地址,具体请参考
https://baike.baidu.com/link?url=IV3wNooCoG_b87i1_n-Tjqk_HDGTK1Kse6TXiV7yQa7zVLwadvMMZr6wKJsmbMZQvkDRjaSsCGQitaI2Zo1jpj8-f9zj6oYWJTcc1A7iM4oHnoa0FsjltTvuDxrpSWdd
下面是以上链接的描述
(这一段我认为是描述主机和从机不在同一网段的通信过程,
就是要经过路由,或者说网关,一个网关往往称为一跳)。

网络上的数据包从初始点开始的,经过一个个中间节点最终到达目标节点的。
数据包是如何从初始节点开始识别一个个中间节点,然后最终找到目标节点的呢?
实际上初始节点是根据目标节点的地址,将目标节点的IP地址映射到中间节点的MAC地址,找到第一个中间节点。
从第一个中间节点出发,根据目标节点的IP地址映射到第二个中间节点的MAC地址,从而找到第二个中间节点。
以此类推,直到当找到最后一个中间节点后,从最后一个中间节点出发,根据目标节点的地址映射到目的节点的MAC地址,
从而将数据包传送给目标主机。

所以数据包的传送过程就是:
不断地将目标节点的地址映射到一个个中间节点的MAC地址,再从一个个中间节点出发,直到找到最终的目标节点。
但具体经过哪些节点(网关),是根据路由算法计算出最佳路径(也就是要经过哪些IP的网关),或者根据IP头里配置的信息可以选择松散源或严格源,而松散源和严格源可以用来确定哪些IP的网关必须经过!

数据包传送的关键是将目标节点的IP地址映射到中间节点的MAC地址。
IP地址与MAC地址的映射要通过ARP地址解析协议来完成,它可将网络中的IP地址映射到主机的MAC地址,

如交换机可以根据网络中的IP地址来找到本地主机的MAC地址。具体过程是:
当交换机接收到来自网上一个数据包时,会根据该数据包的目标IP地址,查看交换机内部是否有跟该IP地址对应的MAC地址,如果有上次保留下来的对应的MAC地址,就会将该数据包转发到对应MAC地址的主机上去。
如果在交换机内部没有与目标)地址对应的MAC地址,则交换机会根据ARP协议
将目标IP地址按照“表”中的对应关系映射成MAC地址 ,数据包就被转送到对应的MAC地址的主机上。
如果理解还有困难,请参考http://t.zoukankan.com/huty-p-8518749.html ,
这篇更为基础。为了链接避免丢失,我把该链接内容摘抄保存,如下。

摘抄的片段,比较通俗易懂!

在当今的以太网络通信中,在IP数据包中有两个必不可少的地址,那就是IP地址和网卡地址(即MAC地址),在数据包中,无论是IP地址还是MAC地址,都有源地址和目标地址,因为通信是双方的,所以就必须同时拥有双方的地址!在同一IP网络中通信,将会发生以下事件:

主机A与主机B通信,这时主机A肯定首先要封装这些需要发给主机B的数据包,那么对于主机A来说,自己的IP地址和MAC自己肯定能够轻易得到,对于主机B的IP地址这时主机A也应该知道,要不然它就不清楚自己将要和谁通信,当有了自己的IP地址,MAC地址以及主机B的IP地址后,主机A在数据包中可以正确地写上源IP地址,目标IP地址,接下来的工作就是写入自己的MAC地址(即源MAC),最后还必须正确写入目标主机B的MAC地址,可这时主机A才发现自己根本没有目标主机B的MAC地址,那该怎么办呢?这时主机A就通过比较上面已经封装好的源IP和目标IP,通过子网掩码计算一下,发现源IP和目标IP恰好在同一个IP网络内,那么它想要得到目标主机B的MAC地址就有办法了,首先主机A就向本网段发过一个ARP请求,这个ARP请求包中包括主机A的源IP地址,源MAC地址,目标主机B的IP地址,而目标MAC地址为广播MAC地址(全部为F),因为我们要找的就是目标MAC,所以这里用广播MAC地址,又因为是以太网,所以整个局域网的所有主机都能收到这个请求MAC地址的数据包,当然主机B也能收到,因此在主机B收到此ARP请求后,立即构建一个包括自己的MAC地址的ARP回应包,回应给主机A,当主机A收到这个ARP回应后,终于完成了找寻目标MAC的重大任务,从而把目标主机B的MAC地址正确封装进上面还未封装结束的正准备发给主机B的数据包,在这时,源IP和源MAC以及目标IP和目标MAC都已正确存在于数据包中,那么这里主机A向网络内发出这些数据包,因为目标地址在本网段,所以本网段所有主机都能收到这个数据包(这是以太网的特性),最后只有真正的目标主机B能够打开这些数据包,在此,同网段两台主机之间的通信就此圆满结束!在这里应该注意另外一个问题,因为主机A要寻找的目标主机B在同一网络,所以主机A能够通过ARP得到目标主机B的MAC地址,从而完成通信,当主机A在封装数据包时检测到目标主机并不在本网段,在这时,数据包不能把目标主机的MAC地址顺利封装进去,那么就用到另一种方法,那就是网关,主机A在准备发向主机B的数据中,封装好自己的IP地址和MAC地址,同时也封装好目标主机B的IP地址,数据包封装到这里,主机A就利用上面得到同网段目标主机B的方法去请求得到网关的MAC地址,同样也是用ARP去广播,因为网关必须和本机在同一网段,理所当然,网关能够收到这个ARP请求并能正确回应给主机A,这时主机A在数据包中封装好自己的IP地址和MAC地址,同时也封装好目标主机B的IP地址和网关的MAC地址,把数据包从网卡发出去,因为目标MAC是网关的,所以网关收到这个数据包后,发现目标MAC是自己,而目标IP却是别人,所以它不可以再往上打开这个数据包,它要做的工作就是把这些数据包发给下一跳路由器(如果网关自身就是一台路由器的话),如果网关是一台普通PC,那么它就发给路由器,让路由器把这些数据包正确传输到远程目标网络,到达远程网络后,它们的网关再将数据包发给数据包中的目标IP,即源主机A苦苦寻找的目标主机B,从而真正结束不同网络之间的通信,回应的数据包也是用同样的方法到达目的地,在这里,还需要注意的是,当网关把数据包发给下一跳路由器时,这个数据包必须由网关把目标MAC改成下一跳路由器的MAC地址(通过ARP得到),否则下一跳路由器收到目标MAC不是自己的数据包,会丢弃不予理睬,下一跳路由器再发给下一跳路由器同样要把目标MAC地址改为下一跳路由器的MAC地址再发出去!

最后还可以总结出:在网段通信时,数据包中的地址就是源IP,目标IP,源MAC,目标MAC,根本用不到网关,而当检测到需要把数据包发到远程网络时,这时,目标MAC就必须改变了,在还没有出内网时,目标MAC必须写成网关的MAC地址发出去,当网关收到时,再把目标MAC地址改成下一跳的MAC地址发出去,而源IP和源MAC以及目标IP不曾改变,就算到达了公网上,目标MAC仍然在不断改变着,直到最后,这个数据包到达目标IP的网络,最终通信结束!
摘抄结束!

数据链路层(DataLinkLayer)

上面虽然提到了数据链路层,但更多还是网络层的知识,因为更多是提到了IP协议。还提到了子网内部的设备之间如何通信的、子网内部的设备与另一个子网内部的设备如何通信(通过一跳又一跳的网关)、MAC与IP如何进行对应(或者说如何获取MAC,并且保存局域网里MAC与IP对应的表,因为这样下次再向同一个计算机传输数据时,就不需要再去发送ARP请求来获取目标计算机的MAC了,因为上次通信已经获取了,类似于缓存的效果)。
首先我们要明确数据链路层是干嘛的,要解决什么问题,关于数据链路层,请参考https://blog.csdn.net/chenlong_cxy/article/details/124788397
关于该层,笔者理解是:
网络层常用的IP协议给我们解决了同一个局域网下(或者说同一网段下),计算机A如何找到计算机B,还解决了不在同一网段时,计算机C如何找到计算机D。
那这样,计算机已经建立好了连接,可以相互传数据了,而且物理层已经规定好了:如逻辑“0”和逻辑“1”应该是怎么样的电信号(当然也有可能是光信号)、通信应该用什么样的介质、有什么样的接口、多台机器之间又有怎么样的拓扑连接方式(很多资料喜欢描述为网络拓扑,但其中的“网络”一词容易将人误导,让人认为拓扑连接方式,如总线型、星型、环型等,是网络层的内容,但其实不是,应当是物理层的内容)。
在物理层规定好了的前提下,通信的双方都知道逻辑“0”和逻辑“1”应该是怎么样的光信号或电信号。但0和1都是二进制,也就是一个bit,我们还需要将bit组合起来,组成帧数据,这样机器之间才能通信,如果机器只能识别0和1,那数据量小,干不了事。所以要将bit位组合起来,成为有意义的数据帧!
如CAN总线,不仅规定了逻辑“0”和逻辑“1”将一位位的bit组合起来,就组成了CAN总线里的标准数据帧、扩展数据帧、遥控帧等,所以说CAN总线是工作在OSI模型第一层和第二层的;又如红外NEC协议,将一位位bit组合,有了引导码、地址码、命令码、结束码,红外NEC虽然也能一对多(光发出去,广播式),但没有组网的概念,也不存在网关,但从功能上看,笔者认为红外NEC协议,工作在第一层(这个肯定没毛病)和第二层(也确实组成数据帧),但没有第三层(也就是寻址,找设备),没有第四层大部分功能(稳定性传输,超时重发、流量控制),不过NEC有校验机制(反码校验机制,而不是常用的CRC校验),综上,NEC应该工作在OSI第一层和第二层。

不过这时可能又有同学会有疑惑,组成数据帧?那IP协议不也有IP头吗?而且TCP协议也有对应的TCP头呀!为什么IP协议属于网络层,而TCP协议属于传输层呢?
其实不能理解了,虽然IP头可以视为一帧数据,但是这帧数据主要解决的是寻址问题(设备A如何找到设备B),因此属于网络层;而TCP头也可以视为一帧数据,但是TCP头主要解决的是提高传输的稳定性问题(其中一些机制就是保证稳定传输的),因此属于传输层。

第一层:物理层(PhysicalLayer)

物理层不需要多说了,就是对应逻辑“0”、逻辑“1”。不同协议对应的逻辑不同,学过的有485、422、CAN、232、TTL、红外NEC等。不过红外NEC挺特殊的,其逻辑“0”和逻辑“1”与众不同,并且其还规定了引导码(起始码)、结束码。

总结

感谢本文中各链接的作者,给我提供了很多信息!
本文讲述了笔者对于OSI七层参考模型中各层的理解,其中对于各层,请参考对应的目录!
笔者初步接触到这一块知识点,有诸多不懂,也许笔记写得有问题,烦请各位同学指出,谢谢!同时也希望笔者的文章能给同学们带来一定帮助!共同进步!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值