- 文档/教程
【免费下载链接】90DaysOfDevOps
This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.
本篇是 90DaysOfDevOps 项目 2022 年课程网络专题(Day 21~Day 27)的第二天,接续 Day 21 网络基础概念,完整拆解 OSI 参考模型的七层结构:每一层解决什么问题、使用什么地址与设备、数据在发送端如何被逐层封装(Encapsulation)、在接收端如何被逐层解封装(De-encapsulation),以及段(Segment)、包(Packet)、帧(Frame)等 PDU 命名的由来。读完本篇,你将能够把"主机 A 到主机 B 的一次通信"从头到尾讲清楚,并理解 MAC 与 IP 两套寻址体系为什么缺一不可。
为什么网络需要一套"通用规则"
网络这个行业存在的根本目的,是让两台主机之间能够共享数据。在没有网络的年代,要把数据从这台主机搬到那台主机,你只能把存储介质插到这台机器上,走过去插到另一台机器上,再拷贝过去——完全是人工搬运。网络的出现让这一过程自动化:主机之间通过介质(线缆或无线)自动交换数据。
但自动化有一个前提:所有参与通信的主机必须遵守同一套规则。这与人类语言没有本质区别——两个说英语的人必须遵循英语的语法规则才能互相理解,西班牙语、法语各有各的规则体系,网络通信同样有自己的"语法"。网络世界的这套规则被划分为七个不同的层级,这就是 OSI 模型(Open Systems Interconnection Model,开放系统互连模型)。
OSI 模型:把通信拆成七个抽象层
OSI 模型是一个用来描述网络系统功能的框架。它将计算系统的通信功能归纳为一套通用的规则与需求,目标是让来自不同厂商、不同软件的产品之间能够互操作(Interoperability)。在 OSI 参考模型中,计算机系统之间的通信被拆分为七个抽象层次,自上而下分别是:
| 层号 | 名称(英文) | 名称(中文) | 核心职责 |
|---|---|---|---|
| Layer 7 | Application | 应用层 | 面向应用程序提供网络服务 |
| Layer 6 | Presentation | 表示层 | 数据格式转换、加密与压缩 |
| Layer 5 | Session | 会话层 | 建立、管理与拆除会话 |
| Layer 4 | Transport | 传输层 | 服务到服务(Service to Service)的交付,使用端口 |
| Layer 3 | Network | 网络层 | 端到端(End to End)的交付,使用 IP 地址 |
| Layer 2 | Data Link | 数据链路层 | 节点到节点(Hop to Hop)的交付,使用 MAC 地址 |
| Layer 1 | Physical | 物理层 | 在物理介质上传输原始比特流 |
下面我们逐层展开,看看每一层具体解决什么问题。
物理层(Physical,Layer 1):比特流的搬运工
物理层是 OSI 模型的第 1 层,负责通过某种物理手段把数据从一台主机传到另一台主机。这里的手段既包括物理线缆(如以太网线、光纤),也包括我们常说的 Wi-Fi 无线传输。在较早期的网络设备中,我们还会看到**集线器(Hub)和中继器(Repeater)**这类相对传统的设备,它们的作用就是在物理层上把信号从一个主机转发到另一个主机。
可以这样理解:物理层只关心"比特(1 和 0)能不能过去、信号能不能被识别",它不关心比特的含义。
数据链路层(Data Link,Layer 2):节点到节点,数据打包成帧
数据链路层是第 2 层,它实现了节点到节点(node to node)的传输,此时数据被打包成帧(Frame)。这一层还承担了一部分对物理层可能出现的错误进行纠错的工作。更重要的是,MAC 地址正是在这一层被首次引入。
这也是我们第一次正式提到交换机(Switch)——在 Day 21 的网络基础概念中我们介绍过:交换机负责网络内部的通信,将数据包直接转发给目标主机。交换机正是工作在数据链路层的典型设备。
网络层(Network,Layer 3):端到端,IP 地址登场
你可能常听到"三层交换机"或"二层交换机"的说法,这里的"层"指的就是 OSI 模型。网络层(第 3 层)的目标是端到端(End to End)的交付,这一层我们看到了IP 地址——同样在 Day 21 的概览中首次提到过。
路由器(Router)和主机都存在于第 3 层。记住:路由器的作用是在多个网络之间进行路由转发;凡是拥有 IP 地址的设备,都可以视为"三层设备"。
为什么需要 MAC 和 IP 两套寻址方案?
一个很自然的问题是:既然第 2 层有 MAC 地址、第 3 层有 IP 地址,为什么不能只用一套?
想象一下数据从一台主机发往另一台主机的过程:每台主机都有 IP 地址,但数据在途中要经过多台交换机、路由器,而每一台设备都有自己的第 2 层 MAC 地址。关键在于两套地址的作用范围完全不同:
- IP 地址(Layer 3)= 端到端交付(End to End Delivery):IP 地址会一直跟随这份数据,直到它到达最终的目标主机,中途不管经过多少台设备都不会改变。
- MAC 地址(Layer 2)= 逐跳交付(Hop to Hop Delivery):MAC 地址只在相邻两台设备(主机 → 交换机/路由器)之间生效,每经过一跳就会根据下一跳设备重新封装,它只关心"下一跳"。
至于把 Layer 3 的 IP 地址和 Layer 2 的 MAC 地址关联起来的协议,就是ARP(Address Resolution Protocol,地址解析协议)。ARP 属于后面课程要展开讲的网络协议之一,Day 23 会专门介绍,这里先留个悬念。
传输层(Transport,Layer 4):服务到服务,用端口区分数据流
传输层(第 4 层)负责服务到服务(Service to Service)的交付,它的职责是区分不同的数据流。正如第 3 层和第 2 层各有自己的寻址方案,传输层的"寻址方案"是端口(Port)。一个主机上可能同时运行着多个应用程序(Web 服务、邮件服务、数据库服务……),正是通过源端口和目的端口,传输层才能把数据准确地交给正确的应用进程。
会话层、表示层、应用层(Layer 5/6/7):上三层的边界日渐模糊
对于第 5、6、7 层(会话层、表示层、应用层)之间的界限,业界观点其实已经变得比较模糊——现代网络实践中,这三层的功能往往被合并讨论。相比之下,TCP/IP 模型提供了更贴近当下网络实践的视角:它将网络通信简化为四层(网络接口层、互联网层、传输层、应用层),把 OSI 的上三层大致合并进一个"应用层"。要理解今天实际运行的网络,TCP/IP 模型通常是更实用的参照。
数据封装:发送端自顶向下逐层"加头"
理解了七层结构之后,关键问题是:两台主机实际通信时,数据是怎么走完整个协议栈的?这就引入了网络中最核心的机制之一——封装(Encapsulation)。
以源主机为例,一个应用程序生成了要发往另一台主机的数据,整个封装过程自上而下依次是:
- 数据先到达第 4 层(传输层):传输层为数据添加一个头部(Header),头部承载第 4 层的目标——服务到服务交付,因此包含源端口和目的端口,端口使用 TCP 或 UDP 协议承载。此时"数据 + 端口头部"合称段(Segment)。
- 段向下交给第 3 层(网络层):网络层再添加一个头部,承载第 3 层的目标——端到端交付,因此头部中包含源 IP 地址和目的 IP 地址。"IP 头部 + 数据"被称为包(Packet)。
- 包再交给第 2 层(数据链路层):数据链路层再次添加头部,实现第 2 层逐跳交付的目标,头部中包含源 MAC 地址和目的 MAC 地址。"第 2 层头部 + 数据"被称为帧(Frame)。
- 帧最终转换为 0 和 1 的比特流:经过第 1 层(物理层),通过有线线缆或 Wi-Fi 发送到线路上。
把上面"每层头部 + 数据"的命名整理成一张表,就是网络工程师口中常说的PDU(协议数据单元)命名:
| 层级 | 头部内容 | 该层"头部 + 数据"的专有名称 |
|---|---|---|
| Layer 4 传输层 | 源端口 / 目的端口 | 段(Segment) |
| Layer 3 网络层 | 源 IP / 目的 IP | 包(Packet) |
| Layer 2 数据链路层 | 源 MAC / 目的 MAC | 帧(Frame) |
| Layer 1 物理层 | ——(比特流) | 比特(Bits),如10101010101111... |
解封装:接收端自底向上逐层"去头"
有发送就有接收。既然源主机应用层生成的数据被封装备受层层头部,那么接收端的过程恰好与之相反:数据从物理层进入接收主机后,自底向上逐层去掉对应层的头部(De-encapsulation,解封装),最终把最原始的应用程序数据还原出来,交给接收端的应用层。这正是"发送端怎么套上去的,接收端就怎么脱下来"的对称过程。
结语与课程衔接
至此,我们已经把 OSI 七层模型、每层的职责与寻址方式、以及封装/解封装的完整链路都过了一遍:
- 物理层负责比特传输(线缆、Wi-Fi、集线器/中继器);
- 数据链路层负责逐跳转发与帧(交换机、MAC 地址);
- 网络层负责端到端路由(路由器、IP 地址);
- 传输层负责服务到服务(端口、TCP/UDP);
- 上三层(会话/表示/应用)在现代实践中界限模糊,可用 TCP/IP 模型补充理解。
这套"自顶向下封装、自底向上解封装"的心智模型,是后续一切网络知识(协议、DNS、NAT、DHCP、子网)的基础。接下来的 Day 23 将正式进入网络协议的世界,从 ARP、FTP、SMTP、HTTP/HTTPS、DNS、DHCP 等常用协议入手,继续本次网络专题的旅程。
参考资源
本篇内容为 90DaysOfDevOps 项目 2022 年课程 Day 22 的中文整理,原课程内容大量参考了 Practical Networking 的 Networking Fundamentals 系列视频教程;如需系统学习计算机网络,也可以观看完整的计算机网络安全课程(Computer Networking full course)作为补充。课程完整脉络可回顾 2022 年课程目录 与 Day 21 网络基础概念。
- 文档/教程
【免费下载链接】90DaysOfDevOps
This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.
相关推荐
90DaysOfDevOps 网络篇:OSI 模型七层详解与数据封装全流程(Day 22)
90DaysOfDevOps 网络篇:OSI 模型七层详解与数据封装全流程(Day 22) 本文是 90DaysOfDevOps 2022 网络章节(Day 2
文档/教程90DaysOfDevOps 网络篇:OSI 七层模型与数据封装/解封装全解析(Day 22)
90DaysOfDevOps 网络篇:OSI 七层模型与数据封装/解封装全解析(Day 22) 本篇技术指南围绕 90DaysOfDevOps 2022 网络章
文档/教程90DaysOfDevOps 网络基础篇:OSI 七层模型与数据封装/解封装全解(Day 22)
90DaysOfDevOps 网络基础篇:OSI 七层模型与数据封装/解封装全解(Day 22) 本篇是 90DaysOfDevOps 2022 网络专题的第
文档/教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考