网络协议的分层传输机制:OSI模型解析

72 阅读8分钟

开放式系统互联模型(Open System Interconnection Model,缩写为OSI)是一个概念模型,用于理解和实现网络协议。

它通常被称为七层模型,因为它包含七个层级,每个层级都有其特定的功能和责任。OSI模型通过定义数据传输的标准,有助于标准化数据通信和信息处理。

分层的概念

OSI 模型的分层概念将系统划分为多个层,每一层都有每一层的作用,举例说明就像我们在公司工作中,各种部门之间的工种是不一样的,通过部门间配合,最终交付产品。

这种模块化设计使系统开发、测试和维护更加容易,它还使得不同的厂商可以按照统一的规范实现各自的层级,从而促进市场的标准化。

协议栈

OSI 模型的每个层级都与一组特定的协议相关联,负责处理特定的通信功能。例如,当从主机 A 传输消息到主机 B 时,数据在主机 A 的第三层进行了封装,然后在主机 B 的第三层进行相应层级的解封装,数据能够成功传递。这是因为主机 A 和主机 B 都使用相同的协议,进行各自层级的封装和解封装。

数据格式

协议通常将传输的数据切割成多个数据包,每个数据包由三部分组成:

  1. 头部:包含一些元数据和控制信息。
  2. 身体(内容):实际的数据内容。
  3. 尾部:可能包含校验和和结束标志等信息。

这个结构可以类比到收取快递的情景中,最外层的快递袋就相当于数据包的头部和尾部,而袋内的商品就是身体部分。

再类比下网络协议,还以购买商品包装为例。商品自带的包装盒相当于上层协议,而外层的快递袋相当于下层协议,下层协议会包含上层协议的内容。

数据封装流程(从上到下):

层级描述
应用层(第7层)添加应用层数据(例如消息、文件)
表示层(第6层)添加表示层数据(例如加密、压缩)
会话层(第5层)添加会话层数据(例如会话标识符)
传输层(第4层)添加传输层数据(例如源/目标端口号)
网络层(第3层)添加网络层数据(例如源/目标IP地址)
数据链路层(第2层)添加数据链路层数据(例如MAC地址)
物理层(第1层)将数据转换为物理信号进行传输

数据解封装流程(从下到上):

层级描述
物理层(第1层)将接收的物理信号转换为数据
数据链路层(第2层)移除数据链路层信息(例如MAC地址)
网络层(第3层)移除网络层信息(例如IP地址)
传输层(第4层)移除传输层信息(例如端口号)
会话层(第5层)移除会话层信息(例如会话标识符)
表示层(第6层)移除表示层信息(例如解密、解压缩)
应用层(第7层)恢复应用层数据(例如消息、文件)

物理层

物理层依赖于传输媒介,重要性不言而喻,例如以太网电缆、光纤电缆、电台广播和卫星通信等,负责在计算机和设备之间进行数据传输。

链路层

链路层的主要任务是对信息进行打包。在物理层传输的是二进制数据,没有标准格式,所以链路层首先将二进制流处理成数据帧。

数据的传输是基于物理地址(如MAC地址)进行的,可以直接将数据帧从一个节点传递到另一个直接相连的节点,无需进行路由操作。这种情况下,网络是一个扁平化的结构,所有节点都在同一个广播域内,彼此直接相连。

为了检测和纠正传输中的错误,链路层还实施差错控制,包括检错算法和纠错算法。检错算法会在数据校验不正确时丢弃数据,要求发送方重新发送。而纠错算法不仅能检测错误,还能纠正错误,比检错算法更复杂。

在无线通信中,由于传输中出错的概率较高,重新传输的成本也较高,因此无线链路层协议更倾向于使用纠错算法机制,而有线通信链路层协议更倾向于使用检错机制。

网络层

随着网络规模的扩大和复杂性的增加,链路层的能力可能变得有限,无法满足网络的需求。此时,引入网络层可以提供更高级的功能,提供路由功能,用于数据的转发。

当主机 A 向主机 B 发送网络层数据时,大致原理如下:

  1. 首先判断 A 和 B 是否在同一个子网内。如果是,则直接将数据发送给B;如果不在同一个子网,需要发送给子网的网关。
  2. 网关要么自己路由到下一个节点,要么将数据传递给能进行路由的设备。
  3. 数据被传递出去后,如果 B 恰好与网关连接,直接发送数据,路由过程结束。
  4. 如果没有连接,数据将一直发送到下一个路由器,循环重复,直到到达B主机。

传输层

传输层面向地址中的端口,用于将数据传递给相应的软件。它扮演着连接上下层的桥梁角色。下面三层与网络设备密切相关,上面三层与软件密切相关。

传输层面向的是地址(这里的地址指的是网络层确认的主机地址)里的「端口」,传输层会把数据传给「软件」使用。当我们在使用 API 开发网络接口的时候,通常是把端口和网络地址一起使用,这样可以直接定位到某个主机的某个进程。

在互联网协议中,TCP和UDP 是两个主要的传输层实现。

业务层

业务层是指位于传输层之上的三个层级,它们更接近软件应用,因此被统称为业务层。

由于传输层位于操作系统内部,无法直接理解软件的业务逻辑,所以为了实现软件之间的相互通信,需要在传输层之上定义更高级的协议。

业务层涉及的协议非常多样,其中一些常见的协议包括:

HTTP 协议:

我们在浏览器中访问的网页内容是通过HTTP协议传输的。HTTP 协议定义了客户端和服务器之间的通信规则,包括请求和响应的格式、状态码等。

SSL/TLS 协议:

为了增强通信安全性,设计了 SSL 协议,用于加密 HTTP 流量。后来 SSL 升级为 TLS 协议,TLS 协议通过加密和认证机制,确保通信的保密性和完整性。

DNS 协议:

DNS 协议最初用于域名查询,将域名转换为对应的IP地址。由于早期的DNS协议存在安全隐患,后来引入了新的加密协议来加强安全性。

这些业务层协议使得软件应用能够进行高级的功能和服务交互。它们定义了数据的格式、通信的规则和安全性要求,为应用程序提供了统一的接口和标准化的通信方式。通过这些协议,不同的软件可以在网络上相互交流和协作。

总结两句

OSI模型是一个分层的网络协议模型,数据从上至下进行封装和传输,数据的传输是自上而下的,并且每一层都会将上一层的数据封装在自己的数据单元中。

在发送端,每一层都会添加特定的头部或尾部信息,将上一层的数据封装起来形成一个新的数据单元。这个新的数据单元成为该层的数据包或帧。

在接收端,逆向的流程被用于解析数据。每一层都会逆向操作,从接收到的数据中提取并解析出上一层的数据。每一层根据自己的协议规范,识别并处理相应的头部或尾部信息,然后将剩余的数据传递给上一层。

这种逆向的解析过程在接收端的每一层依次进行,直到最上层的应用程序获得完整的数据,并进行相应的处理和展示。

通过分层的封装和解析过程,数据可以在不同层级之间进行有效的传输和处理。每一层都负责特定的功能和任务,通过添加和解析头部或尾部信息,确保数据在网络中的可靠传递和正确解析。


题图生成:Pixabay;内容优化:ChatGPT;内容来源:《深入理解计算机系统》

如果您对本篇文章中提到的问题有任何疑问或想法,请在评论区留言,我将尽力回复。

微信公众号「小道研究」,获取更多关于前端技术的深入分析和实践经验。