OSI七层模型是ISO(国际标准化组织)制定的一个关于通信协议设计的参考模型. 它将通信协议中必要的功能分为了七层, 上下层进行交互时所遵循的约定叫”接口”, 同层交互时所遵循的约定叫”协议”.
虽然OSI模型并没有得到普及, 实际应用意义也不是很大, 但是对理解协议内部运作有很大的帮助. 本文将以一个”对话”的例子来解释分析一下OSI七层模型各层的功能和作用.
OSI七层模型概述
我们先以两张图来大致了解一下OSI各层的作用和对数据的处理, 看看它们都干了哪些事.
发送端从第7层至第1层传输数据, 接收端从第1层至第7层接收数据. 对发送端而言, 在每个分层处理由上一层传过来的数据的时候都会附上当层协议所必须的首部信息, 然后传给下一层; 而对接收端而言, 在每个分层上将会进行首部信息和内容的分离, 然后传给上一层, 最终将数据恢复原样.
假设有用户A要发送一封内容为”早上好”的邮件给用户B, 那么这封邮件的发送过程对应OSI七层模型又是什么样的呢, 我们来逐层分析一下.
应用层
应用层主要主要是提供应用程序间的通信, 即对不同的软件提供特定的接口和网络服务, 如E-mail(SMTP协议)/文件传输(FTP协议)等. 当数据经过应用层时, 该层会给数据加上/分离应用层头部信息.
发送端(用户A)
当用户A写好邮件”早上好”, 点击发送的那一刻, 邮件就进入了应用层处理.
应用层会给数据前端附加一个首部信息, 该首部信息标明了邮件内容和收件人B, 然后传给下一层.
接收端(用户B)
当附有首部信息的数据传至应用层的时候, 会被用户B主机上的邮件软件的收信功能获取, 然后分离首部信息和数据正文并保存邮件. 应用层还提供异常处理, 比如用户B的邮箱空间已满或无法接收邮件, 则会返回一个错误给A.
表示层
表示层主要是对数据格式的处理.
- 应用层传输过来的数据格式可能是多种多样的, 可能是音频, 也可能是视频. 为了便于传输, 表示层将它们统一转换为适合网络传输的格式(比如全部转换为01码进行传输).
- 又比如对文字而言, 发送端和接收端的编码格式不一定相同, 表示层先将发送端的编码转换成网络传输的标准格式, 再将标准格式转换成接收端指定的编码格式.
同样, 表示层和表示层之间为了时别编码格式, 也会添加本层的首部信息再交给下一层去处理.
会话层
会话层主要是对通信进行管理, 决定采用何种连接方式是该层的主要责任. 比如何时建立连接, 何时断开连接, 保持多久的连接. 但是需要注意的是, 会话层只是对何时建立/断开连接进行管理, 并不具有实际传输数据的功能.
发送端(用户A)
假设现在A有5封邮件要发送给B, 这5封邮件的发送方式可以有很多种.
- 比如每发送一封邮件就建立一次连接, 随后断开连接.
- 比如建立一次连接后将5封邮件全部发送过去, 再断开连接.
为了标明数据传输的顺序, 会话层也会再数据前端附上本层的首部信息再传给下一层.
传输层
尽管会话层决定了建立和断开连接的时机, 但是实际建立和断开连接是在传输层进行的.
- 传输层的主要作用是在两台主机之间创建连接.
- 除此之外, 传输层会在两台主机之间确认数据是否成功并完整发送, 如果数据没有成功并完整到达, 它会进行重发. 保证数据传输的可靠性也是传输层的重要作用.
发送端(用户A)
A主机要发送”早上好”给B主机, 但是在发送过程中由于一些原因导致数据没有发送过去或者只发送了一部分过去. 那么B主机在收到数据后A主机会进行确认数据发送情况.
如果B主机全部没有接收到数据, A主机会进行重新发送并再次请确认; 如果B主机只是接收了部分数据(如只接收到”早上”), A主机会将剩下的数据(如”好”)进行重新发送并再次确认.
网络层
网络层主要负责地址管理和路由选择.
简单来讲, A主机到B主机之间有多条路可以到达, 网络层在这多条路中选定一条路, 这条路上有多个结点, 它为每个结点进行逻辑地址定义.
网络层给上层接收到的数据附上地址信息的首部再发送给数据链路层.
数据链路层
网络层通过若干结点将发送的路径分为多段, 每一段都是单个链路, 数据链路层主要负责单个链路上的数据传输(互联设备之间的传送和识别数据帧).
网络层负责的是端对端的通信(发送路径的起点和终点), 而数据链路层负责的是每个区间的通信(两个相邻结点).
同样的, 数据链路层也会在数据前附上自己的首部信息再传给下一层.
物理层
物理层主要是进行比特流传输. 即01比特流(01序列)与电压的高低, 光的闪灭之间的互换.