跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
OSI七层模型
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:OSI七层模型}} '''OSI七层模型'''(Open Systems Interconnection Model)是国际标准化组织(ISO)提出的一个网络通信框架,用于标准化不同厂商设备之间的通信协议。它将网络通信过程划分为七个逻辑层,每层负责特定的功能,并通过接口与相邻层交互。该模型是理解计算机网络体系结构的核心基础。 == 概述 == OSI模型通过分层设计实现模块化,各层独立工作且仅需了解相邻层的接口。这种设计简化了网络协议的开发与维护,并支持异构系统的互联。七层从下到上依次为: <mermaid> graph TD A[物理层 Physical Layer] --> B[数据链路层 Data Link Layer] B --> C[网络层 Network Layer] C --> D[传输层 Transport Layer] D --> E[会话层 Session Layer] E --> F[表示层 Presentation Layer] F --> G[应用层 Application Layer] </mermaid> === 各层功能对比 === {| class="wikitable" |+ OSI七层功能摘要 ! 层级 !! 名称 !! 功能 !! 典型协议/设备 |- | 1 || 物理层 || 比特流传输、电气特性 || 网线、光纤、集线器 |- | 2 || 数据链路层 || 帧封装、MAC寻址、差错控制 || 以太网、交换机 |- | 3 || 网络层 || 逻辑寻址、路由选择 || IP、路由器 |- | 4 || 传输层 || 端到端连接、可靠性保障 || TCP、UDP |- | 5 || 会话层 || 建立/管理会话 || NetBIOS |- | 6 || 表示层 || 数据格式转换、加密 || SSL、JPEG |- | 7 || 应用层 || 用户接口、服务实现 || HTTP、FTP |} == 分层详解 == === 1. 物理层(Physical Layer) === 负责原始比特流在物理介质上的传输,定义电压、接口形状等机械/电气特性。例如: * '''案例''':双绞线(Cat6)传输差分信号以减少干扰。 === 2. 数据链路层(Data Link Layer) === 将比特流组织为'''帧''',通过MAC地址实现设备间直接通信。关键机制包括: * '''差错控制''':CRC校验检测帧损坏 * '''流量控制''':如滑动窗口协议 * '''MAC子层''':处理冲突(CSMA/CD) <syntaxhighlight lang="python"> # 模拟以太网帧结构 import struct def build_ethernet_frame(dest_mac, src_mac, payload): preamble = b'\x55' * 7 + b'\xD5' dest = bytes.fromhex(dest_mac.replace(':', '')) src = bytes.fromhex(src_mac.replace(':', '')) eth_type = b'\x08\x00' # IPv4类型 frame = preamble + dest + src + eth_type + payload.encode() return frame print(build_ethernet_frame("00:1A:2B:3C:4D:5E", "00:0A:95:9D:68:16", "Hello").hex()) </syntaxhighlight> '''输出''':55555555555555d5001a2b3c4d5e00a959d6816080048656c6c6f === 3. 网络层(Network Layer) === 实现跨网络的'''分组转发'''和'''路由选择'''。核心协议IP提供: * '''逻辑寻址''':32位IPv4或128位IPv6地址 * '''分片重组''':MTU适配不同链路层 <math> \text{TTL} = \text{初始值} - \text{经过路由器数量} </math> === 4. 传输层(Transport Layer) === 确保端到端可靠传输,主要协议对比: {| class="wikitable" |- ! 特性 !! TCP !! UDP |- | 连接方式 || 面向连接 || 无连接 |- | 可靠性 || 确认重传 || 尽最大努力 |- | 流量控制 || 滑动窗口 || 无 |} === 5-7. 高层协议 === * '''会话层''':管理对话(如RPC的会话恢复) * '''表示层''':数据加密(TLS)、压缩(gzip) * '''应用层''':HTTP请求示例: <syntaxhighlight lang="http"> GET /index.html HTTP/1.1 Host: www.example.com Accept-Language: en </syntaxhighlight> == 实际应用 == === 数据封装过程 === 数据从应用层向下传递时,每层添加首部(和尾部): <mermaid> sequenceDiagram participant App as 应用层 participant Pres as 表示层 participant Session as 会话层 participant Transport as 传输层 participant Network as 网络层 participant DataLink as 数据链路层 participant Physical as 物理层 App->>Pres: 应用数据 Pres->>Session: 数据 + 表示层头 Session->>Transport: 数据 + 会话层头 Transport->>Network: 段 + TCP头 Network->>DataLink: 包 + IP头 DataLink->>Physical: 帧 + 帧头尾 </mermaid> === 协议栈实现 === 操作系统内核中的协议栈按层次处理数据包。例如Linux的TCP/IP栈: <syntaxhighlight lang="c"> // 简化的内核sk_buff结构(网络数据包) struct sk_buff { struct net_device *dev; // 网络设备 __u32 ip_hdr; // IP头指针 __u32 tcp_hdr; // TCP头指针 unsigned char *data; // 有效载荷 }; </syntaxhighlight> == 常见问题 == === 为什么需要分层? === * '''解耦''':各层独立演进(如IPv4→IPv6不影响HTTP) * '''标准化''':厂商只需实现特定层(如交换机仅需L2) === OSI与TCP/IP模型区别 === TCP/IP模型将OSI的5-7层合并为应用层,更贴近实际协议: <mermaid> graph LR OSI[OSI七层] -->|对应| TCP[TCP/IP四层] OSI7[应用层] --> TCP1[应用层] OSI6[表示层] --> TCP1 OSI5[会话层] --> TCP1 OSI4[传输层] --> TCP2[传输层] OSI3[网络层] --> TCP3[网络层] OSI2[数据链路层] --> TCP4[链路层] OSI1[物理层] --> TCP4 </mermaid> == 扩展阅读 == * '''MTU与分片''':以太网默认MTU=1500字节,超出需分片 * '''协议分析工具''':Wireshark捕获各层数据包示例 [[Category:计算机科学]] [[Category:面试技巧]] [[Category:计算机网络]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)