OSI参考模型

协议:计算机与计算机之间通过网络实现通信时实现达到的一种“约定”,遵循这一“约定”进行处理方可进行通信,协议不同则无法实现通信

如图为协议分层
分层的最大好处在于“封装”
协议分层


上图只是将协议简单的分了两层进行说明,下面OSI模型则将这样一个复杂的协议分成了易于理解的七层。

OSI参考模型
7应用层
6表示层
5会话层
4传输层
3网络层
2数据链路层
1物理层
  • 应用层:为应用程序提供服务并规定应用程序中通信相关的细节,包括文件传输,电子邮件,远程登陆(虚拟终端)等协议。
  • 表示层:将应用处理信息转换为网络可传输的格式,或将下一层数据转换为上层能够处理的格式,即负责数据格式的转换。
  • 会话层:负责建立和断开会话连接,以及数据的分割等数据传输相关的管理。
  • 传输层:起可靠传输的作用,之间通信双方节点上进行处理,不需要在路由器上处理。
  • 网络层:将数据传输到目标地址。主要负责寻址和路由选择。
  • 数据链路层:负责设备之间的数据帧的传送和识别,将0,1序列划分为具有意义的数据帧传送给对端。
  • 物理层: 负责光/电信号的传递方式。
    在这里插入图片描述
### OSI参考模型概述 OSI(Open Systems Interconnection)参考模型是一种理论化的网络架构设计框架,用于描述计算机网络中不同层次的功能和交互方式。该模型分为七个独立的层次,每一层都有明确的功能和服务定义[^1]。 #### 结构 OSI参考模型按照自底向上的顺序划分为以下七层: 1. **物理层 (Layer 1)** 物理层负责建立、维护和终止设备间的物理连接。它将二进制数据流转换为电信号或其他形式的信号以便在网络介质上传输。典型设备包括网卡、网线、光纤、集线器和中继器等[^4]。 2. **数据链路层 (Layer 2)** 数据链路层的主要职责是建立逻辑连接、执行硬件地址寻址以及检测和纠正传输过程中发生的错误。这一层还涉及帧同步机制,并通过MAC地址来唯一标识每张网卡。常见设备有交换机和网桥[^4]。 3. **网络层 (Layer 3)** 网络层的核心任务是对数据包进行路由选择,从而实现跨多个网络的数据传递。此层引入了IP地址的概念来进行节点定位,并支持分组转发功能。路由器是最典型的第三层设备[^4]。 4. **传输层 (Layer 4)** 传输层提供了可靠的端到端通信服务,确保消息能够无误地从发送方到达接收方。具体操作包括分割高层数据形成段落、附加源与目标端口号标记、实施流量控制及差错检验等。TCP和UDP协议分别代表面向连接和非连接类型的传输方法[^4]。 5. **会话层 (Layer 5)** 会话层管理应用程序之间的对话流程,例如创建、维持和结束会话链接。此外,它可以协调双方的操作状态,在必要时中断或恢复通讯过程。实例应用像远程登录系统SSH或者即时通讯工具QQ均依赖于本层的支持[^4]。 6. **表示层 (Layer 6)** 表示层关注如何表达信息内容的形式标准化问题,比如字符编码、数据压缩算法的选择以及加密解密手段的应用等方面的工作都在这里完成。这使得来自不同类型平台的信息可以互相理解[^3]。 7. **应用层 (Layer 7)** 应用层直接面对最终用户的各类需求,提供广泛的业务接口和支持环境。常见的互联网协议如HTTP/HTTPS, FTP, SMTP, DNS等等皆位于第七层之上运行[^4]。 #### 功能 每个层次实现了特定范围内的功能性要求,并向上一层交付相应的服务能力。这种模块化的设计理念有助于简化复杂的整体解决方案分解成若干相对简单的部分加以解决[^3]。 #### 应用 尽管OSI模型本身并不强制规定具体的实现细节,但它作为一个通用的标准框架被广泛应用于评估现有技术和指导新开发项目之中。实际上很多现代网络协议并非严格遵循OSI七层划分法而是有所调整优化后的版本,比如著名的TCP/IP四层体系结构就融合了一些原本分开考虑的因素以提高效率降低复杂度[^2]。 ```python # 示例代码展示了一个简单模拟OSI模型各层工作的Python脚本片段 class Layer: def __init__(self,name): self.name = name def process(self,data): print(f"{self.name} processing {data}") def osi_simulation(data): layers = [ Layer('Physical'), Layer('Data Link'), Layer('Network'), Layer('Transport'), Layer('Session'), Layer('Presentation'), Layer('Application') ] for layer in reversed(layers): # 自顶向下封装数据 data = f"<{layer.name}>{data}</{layer.name}>" processed_data = "" for layer in layers: # 自底向上解析数据 layer.process(processed_data) start_tag = f"<{layer.name}>" end_tag = f"</{layer.name}>" if processed_data.startswith(start_tag) and processed_data.endswith(end_tag): processed_data = processed_data[len(start_tag):-len(end_tag)] if __name__ == "__main__": initial_payload="Hello World!" osi_simulation(initial_payload) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值