《计算机网络-自顶向下方法》1.5 协议层次及其服务模型 读书笔记

目录

[1.5 协议层次及其服务模型:网络世界的"楼层地图"](#1.5 协议层次及其服务模型:网络世界的"楼层地图")

[1.5.1 分层的体系结构:把复杂的网络拆成"一栋楼"](#1.5.1 分层的体系结构:把复杂的网络拆成"一栋楼")

[1.5.2 封装:数据的"套信封"过程](#1.5.2 封装:数据的"套信封"过程)

本节核心总结(必看)

结语


  大家好~ 继续啃机械工业出版社出版的计算机科学丛书《计算机网络-自顶向下方法》(原书第7版),今天进入第1章「计算机网络和因特网」的1.5小节------协议层次及其服务模型。

  在前四节中,我们分别学习了因特网的整体架构(1.1)、网络边缘(1.2)、网络核心(1.3)以及时延、丢包和吞吐量(1.4)。现在你应该已经对因特网的"硬件骨架"和"性能指标"有了基本了解。但你有没有想过:全世界那么多不同厂家、不同型号的设备,运行着那么多不同的软件,它们是怎么做到"互相听懂对方的话"的?路由器怎么知道该把数据送到哪?浏览器怎么知道网页数据有没有传完?

  答案就在于"协议"(protocol)------网络世界中所有设备共同遵守的"语言规则"。而因特网的协议不是一锅大杂烩,而是被有组织地分成了多个"层"(layer),每层负责不同的功能,层层叠加上去就构成了完整的网络通信体系。本节就来拆解这个"分层"的设计思想和数据在层与层之间传递的"封装"机制。

  全程依旧避开复杂公式,用生活化比喻拆解所有核心概念,搭配卡通配图,帮大家轻松理解~


1.5 协议层次及其服务模型:网络世界的"楼层地图"

  要理解协议层次(protocol layer),我们先从一个问题出发:因特网为什么不能"一锅端"------把所有通信功能都放在一个大协议里搞定,而非要分成好几层?

  原因很简单:网络通信太复杂了。从你在浏览器里输入网址,到网页显示出来,中间涉及到:怎么把数据拆成小分组(1.3节讲的)、怎么选择传输路径、怎么保证数据不丢(1.4节讲的丢包)、怎么在物理线路上传输比特......如果把这些功能全混在一起,任何一个环节出问题,整个系统都要改,太复杂、太脆弱了。

  所以,网络设计者采用了一个经典工程思想------分层(layering)。把复杂的通信功能拆分成多个"层",每层只负责自己的那部分工作,层与层之间通过明确的接口交互。就像一栋大楼:一楼做前台接待,二楼做行政管理,三楼做技术研发,每层各管各的事,但楼上可以调用楼下的服务。


1.5.1 分层的体系结构:把复杂的网络拆成"一栋楼"

1. 为什么要分层?------"拆解复杂性,各管各的事"

  分层(layering)的核心思想是:将一个庞大复杂的系统,按照功能拆分成多个层次(layer),每层完成特定的功能,并为上一层提供服务。

  教材里用了一个经典类比------航空系统。假设你从广州飞北京,整个旅程可以分成三层:

  • 票务层:你买机票、选座、值机------这一层只负责"票务"相关的事情。
  • 行李层:你托运行李、行李被分拣、装上飞机------这一层只负责"行李"相关的事情。
  • 飞机层:飞机起飞、飞行、降落------这一层只负责"飞行"相关的事情。

  每一层都有自己的功能,彼此相对独立。票务层不需要知道行李怎么分拣,行李层不需要知道飞机怎么飞。但上层依赖下层------你买了票才能托运行李,托运完行李飞机才能起飞。每一层为上一层提供"服务"。

  分层的好处非常明显:

  • 模块化:每层可以独立设计、修改和替换,不影响其他层。比如换一种行李分拣系统,不需要改机票系统。
  • 简化设计:每层只关注自己的功能,不需要理解其他层的细节。
  • 灵活性:某一层的技术升级不影响其他层。比如从铜线换成光纤(物理层升级),上层的协议完全不需要改。
  • 标准化:每层有明确的功能边界,方便不同厂家设备之间的互操作。

2. 分层的基本概念------"各管一层,互相配合"

  在分层体系结构中,有几个关键概念需要理解:

  层(layer):体系结构中的一个层级,负责一组特定的网络功能。每层是相对独立的模块。

  协议(protocol):同一层的不同节点(如发送方和接收方)之间通信的规则。协议定义了同一层之间"怎么对话"。比如,应用层的 HTTP 协议定义了浏览器和服务器之间怎么交换数据。

  服务(service):下层为上层提供的功能。每层使用下层提供的服务来完成自己的功能。比如,网络层使用链路层提供的数据传输服务,来实现在路由器之间转发分组。

  接口(interface,服务访问点 SAP):相邻层之间交互的"窗口"。上层通过接口调用下层的服务,下层通过接口把结果返回给上层。

  通俗类比------公司组织:想象一个公司,分成了多个部门:

  • 销售部(应用层):负责和客户打交道,接订单。
  • 物流部(传输层):负责把订单分解成发货任务,确保每批货都送到。
  • 调度部(网络层):负责选择发货路线,安排中转。
  • 仓储部(链路层):负责在相邻仓库之间搬运货物。
  • 运输部(物理层):负责实际开车送货。

  每个部门有自己的"协议"(内部工作流程),部门之间通过"接口"(工单、交接单)交互。销售部不需要知道调度部怎么选路线,调度部不需要知道运输部开什么车。但每个部门都依赖下面的部门来完成自己的工作------这就是"服务"关系。

3. 协议层与服务模型------"楼上的用楼下的"

  理解了分层的基本概念后,我们来看一个核心问题:层与层之间的"服务"具体是怎么运作的?

  服务模型(service model):定义了下层为上层提供什么样的服务。上层是"服务的使用者",下层是"服务的提供者"。上层通过接口(服务访问点)向下层请求服务,下层完成服务后把结果返回给上层。

  通俗类比:你(应用层)住在一栋楼里,想给隔壁楼的朋友送一封信。你不需要自己跑过去------你只需要把信交给一楼的"邮差"(链路层),邮差负责实际跑腿。你不需要知道邮差走哪条路,只需要把信交给他就行。邮差为你提供了"送信服务",你是服务的使用者,邮差是服务的提供者。

  关于服务模型,有几个关键点:

  • 服务是单向的:下层为上层提供服务,上层使用下层的服务。反过来不行------下层不知道上层在干什么,也不关心。
  • 每层有自己的协议:同一层的不同节点之间有自己的通信规则(协议),但这些协议对其他层是"透明"的(看不见的)。比如,网络层的路由协议怎么选路,应用层完全不需要知道。
  • 层与层之间通过接口交互:接口定义了上层可以调用下层哪些功能,以及怎么调用。接口就像"服务窗口"------你到窗口提交请求,工作人员在后台处理后把结果递出来。

4. 因特网五层协议栈------"五层楼的网络大厦"

  因特网的分层体系结构叫做因特网协议栈(Internet protocol stack),它将网络通信分成了五个层次。从上到下分别是:

  1. 应用层(Application Layer)
  2. 传输层(Transport Layer)
  3. 网络层(Network Layer)
  4. 链路层(Link Layer)
  5. 物理层(Physical Layer)

  我们自顶向下逐一介绍(本书的特色就是"自顶向下",先讲最接近用户的应用层,再逐层往下):

  应用层(Application Layer):最顶层,直接面向用户的应用程序。这一层的协议定义了应用程序之间交换报文的格式和规则。常见协议:HTTP(网页浏览)、SMTP(电子邮件)、DNS(域名解析)、FTP(文件传输)等。应用层的信息单元叫做报文(message)。

  传输层(Transport Layer):负责在应用程序之间传递报文。传输层把应用层的报文拆成更小的段(segment),确保数据可靠到达。常见协议:TCP(可靠传输)和 UDP(不可靠但快速传输)。传输层的信息单元叫做报文段(segment,TCP)或数据报(datagram,UDP)。

  网络层(Network Layer):负责将传输层的报文段从源主机路由到目的主机。网络层的核心协议是 IP(Internet Protocol,因特网协议),它定义了 IP 地址和路由选择。路由器就是工作在这一层。网络层的信息单元叫做数据报(datagram)。

  链路层(Link Layer):负责在相邻节点(如主机和路由器之间、两个路由器之间)之间传输数据。链路层把网络层的数据报封装成帧(frame),通过物理链路传输。常见协议:以太网(Ethernet)、Wi-Fi(802.11)、PPP 等。链路层的信息单元叫做帧(frame)。

  物理层(Physical Layer):最底层,负责在物理介质上传输比特流(bit stream)。物理层关心的是信号怎么编码、电压怎么表示0和1、光信号怎么在光纤中传播等。物理层的信息单元是比特(bit)。

  用"五层楼"来类比:

  • 五楼(应用层):前台接待------接待用户请求,处理应用逻辑。
  • 四楼(传输层):打包发货------把大任务拆成小包裹,确保可靠送达。
  • 三楼(网络层):路线规划------决定每个包裹走哪条路线,跨城市运输。
  • 二楼(链路层):本地搬运------在相邻站点之间搬运包裹。
  • 一楼(物理层):实际运输------卡车在路上跑,把货物物理搬运。

5. OSI 七层模型 vs TCP/IP 四层模型

  除了因特网五层协议栈,还有两个著名的分层模型:OSI 七层模型和 TCP/IP 四层模型。

  OSI 七层模型(OSI Reference Model):由国际标准化组织(ISO, International Organization for Standardization)提出,是一个理论上的参考模型,共七层:

  1. 应用层(Application Layer)
  2. 表示层(Presentation Layer):负责数据格式转换、加密解密、压缩解压。
  3. 会话层(Session Layer):负责建立、管理和终止通信会话。
  4. 传输层(Transport Layer)
  5. 网络层(Network Layer)
  6. 数据链路层(Data Link Layer)
  7. 物理层(Physical Layer)

  TCP/IP 四层模型:因特网实际使用的模型,更精简,共四层:

  1. 应用层(Application Layer):合并了 OSI 的应用层、表示层和会话层。
  2. 传输层(Transport Layer)
  3. 网络层/互联网层(Internet Layer)
  4. 网络接入层/链路层(Network Access/Link Layer)

  三者的对应关系:

  • 因特网五层协议栈是教学和工程中常用的折中方案------它把 TCP/IP 的应用层展开(方便教学),把链路层和物理层分开(方便讨论物理传输)。
  • OSI 七层模型更细致(多了表示层和会话层),但因特网实际没有独立实现这两层,而是把它们合并到应用层中。
  • 实际工程中主要使用 TCP/IP 四层模型。

  本书(自顶向下方法)采用五层模型来讲解,因为它既方便教学(每层功能清晰),又贴近实际(因特网真实使用的协议)。


1.5.2 封装:数据的"套信封"过程

  了解了分层体系结构后,一个自然的问题是:数据在各层之间是怎么传递的?答案就是------封装(encapsulation)。

1. 什么是封装?------"套信封的过程"

  封装(encapsulation):在发送端,数据从上到下经过每一层时,每层都会在数据上添加自己的控制信息(叫做头部,header),有时还会在尾部添加控制信息(叫做尾部,trailer)。这个过程就像"套信封"------每过一层就多套一层信封。

  通俗类比:想象你写了一封信(应用层数据),要寄给朋友:

  • 你把信纸装进一个信封,写上收件人姓名和内容摘要(应用层头部)------这是第一层封装。
  • 邮局收到后,把这个信封装进一个更大的邮包,写上寄件地和收件地邮编(传输层头部)------第二层封装。
  • 分拣中心收到后,把邮包装进一个更大的运输箱,写上中转站编号(网络层头部)------第三层封装。
  • 运输站收到后,把运输箱装进一个集装箱,写上车次和班次(链路层头部)------第四层封装。
  • 最后卡车司机把集装箱装上车出发(物理层传输)------实际运输。

  每层添加的头部信息不同,因为每层关心的事情不同:

  • 应用层头部:包含请求类型、内容类型等(如 HTTP 头部)。
  • 传输层头部:包含端口号、序号、校验和等(如 TCP 头部)。
  • 网络层头部:包含源 IP 地址、目的 IP 地址等(如 IP 头部)。
  • 链路层头部:包含源 MAC 地址、目的 MAC 地址等(如以太网头部)。

2. 封装的详细过程------"逐层加信封"

  让我们详细跟踪一个数据从应用层到物理层的封装过程:

  假设你用浏览器访问一个网页,浏览器生成了一个 HTTP 请求报文(message)。

  第一步:应用层 → 传输层

  应用层把 HTTP 报文交给传输层。传输层(TCP)在报文前面添加 TCP 头部(包含源端口号、目的端口号、序号等),形成报文段(segment)。此时数据结构为:TCP头部 \| HTTP报文

  第二步:传输层 → 网络层

  传输层把报文段交给网络层。网络层(IP)在报文段前面添加 IP 头部(包含源 IP 地址、目的 IP 地址等),形成数据报(datagram)。此时数据结构为:IP头部 \| TCP头部 \| HTTP报文

  第三步:网络层 → 链路层

  网络层把数据报交给链路层。链路层(以太网)在数据报前面添加以太网头部(包含源 MAC 地址、目的 MAC 地址等),在后面添加尾部(用于差错检测的 CRC 校验),形成帧(frame)。此时数据结构为:以太网头部 \| IP头部 \| TCP头部 \| HTTP报文 \| 以太网尾部

  第四步:链路层 → 物理层

  链路层把帧交给物理层。物理层将帧转换为比特流(0 和 1 的序列),通过物理介质(网线、光纤、无线电波)传输出去。

  每一步封装时,上层的数据整体作为下层的"载荷"(payload),下层只在前面(和后面)添加自己的控制信息。就像俄罗斯套娃------每层套一层外壳,最里面才是原始数据。

  关键术语总结:

  • 报文(message):应用层的信息单元。
  • 报文段(segment)/数据报(datagram):传输层的信息单元(TCP叫段,UDP叫数据报)。
  • 数据报(datagram):网络层的信息单元。
  • 帧(frame):链路层的信息单元。
  • 比特(bit):物理层的信息单元。
  • 头部(header):每层添加的控制信息,放在数据前面。
  • 尾部(trailer):链路层在数据后面添加的控制信息(如差错检测码)。
  • 载荷(payload):上层传下来的数据,被封装在当前层的头部和尾部之间。

3. 解封装------"逐层拆信封"

  发送端做的是"封装"(逐层加头部),接收端做的则是"解封装"(decapsulation,逐层去头部)。过程恰好相反:

  接收端从物理层开始,逐层向上拆封装:

  第一步:物理层 → 链路层

  物理层收到比特流,组合成帧,交给链路层。链路层读取以太网头部和尾部,检查数据是否正确(CRC 校验),如果正确,去掉头部和尾部,把里面的数据报交给网络层。

  第二步:链路层 → 网络层

  网络层读取 IP 头部,检查目的 IP 地址是否是自己(如果是,继续处理;如果不是,转发给下一跳路由器),去掉 IP 头部,把里面的报文段交给传输层。

  第三步:网络层 → 传输层

  传输层读取 TCP 头部,检查端口号和序号,确认数据完整性(通过校验和)。如果数据完整,去掉 TCP 头部,把里面的 HTTP 报文交给应用层。

  第四步:传输层 → 应用层

  应用层收到 HTTP 报文,读取 HTTP 头部,理解请求内容,然后交给浏览器渲染显示。

  每层只处理自己的头部,不关心其他层的头部------这就是分层的好处。链路层只看 MAC 地址,网络层只看 IP 地址,传输层只看端口号,各司其职。

4. 封装与解封装的意义------"各层各管各的"

  封装和解封装是分层体系结构的核心机制,它的意义在于:

  • 模块化:每层只处理自己的头部信息,不需要理解其他层的细节。应用层不需要知道数据是通过光纤还是 Wi-Fi 传输的,物理层也不需要知道数据是 HTTP 还是 SMTP。
  • 独立性:每层可以独立修改和升级。比如从 IPv4 升级到 IPv6(网络层),只需要修改网络层的头部格式,其他层完全不需要改。
  • 透明性:上层看不到下层的实现细节。应用层"以为"自己直接和对方的应用层通信,实际上数据经过了传输层、网络层、链路层、物理层的层层封装和传输。
  • 灵活性:同一层可以有多种协议可选。比如传输层可以选择 TCP(可靠)或 UDP(快速),应用层可以选择 HTTP 或 FTP,这些选择相互独立。

  在路由器中,数据只需要走到网络层(第三层)再转发------路由器不需要读传输层和应用层的内容,只需要看 IP 头部来决定转发方向。而端系统(主机)则需要走完全部五层------从物理层一直到应用层。这就是为什么路由器比主机简单------路由器只需要"三层"功能,主机需要"五层"功能。


本节核心总结(必看)

  看完1.5小节,我们可以用一句话概括本节内容:

  因特网采用五层协议栈(应用层、传输层、网络层、链路层、物理层),每层为上层提供服务并通过协议与对等层通信;发送数据时从上到下逐层添加头部进行封装,接收时从下到上逐层去除头部进行解封装,实现了模块化、独立性和灵活性的网络通信体系。

  最后梳理本节必掌握的核心概念:

  • 分层(layering):将复杂系统按功能拆分成多个层次,每层完成特定功能;
  • 层(layer):体系结构中的一个层级,负责一组特定的网络功能;
  • 协议(protocol):同一层的不同节点之间通信的规则;
  • 服务(service):下层为上层提供的功能,上层是使用者,下层是提供者;
  • 接口(interface,服务访问点 SAP):相邻层之间交互的窗口;
  • 服务模型(service model):定义下层为上层提供什么样的服务;
  • 应用层(Application Layer):面向用户应用程序,协议包括 HTTP、SMTP、DNS 等,信息单元为报文(message);
  • 传输层(Transport Layer):在应用之间传递报文,协议包括 TCP 和 UDP,信息单元为报文段(segment)或数据报(datagram);
  • 网络层(Network Layer):路由数据报从源到目的,核心协议为 IP,信息单元为数据报(datagram);
  • 链路层(Link Layer):在相邻节点间传输数据,协议包括以太网、Wi-Fi 等,信息单元为帧(frame);
  • 物理层(Physical Layer):在物理介质上传输比特流,信息单元为比特(bit);
  • OSI 七层模型:理论参考模型,比五层多了表示层和会话层;
  • TCP/IP 四层模型:因特网实际使用的模型,将应用层、表示层、会话层合并为应用层;
  • 封装(encapsulation):发送端从上到下逐层添加头部(和尾部)的过程;
  • 头部(header):每层在数据前面添加的控制信息;
  • 尾部(trailer):链路层在数据后面添加的控制信息(如 CRC 校验码);
  • 载荷(payload):上层传下来的数据,被封装在当前层的头部和尾部之间;
  • 解封装(decapsulation):接收端从下到上逐层去除头部的过程;
  • 报文(message):应用层信息单元;
  • 报文段(segment):传输层 TCP 信息单元;
  • 数据报(datagram):网络层信息单元(也指传输层 UDP 信息单元);
  • 帧(frame):链路层信息单元;
  • 比特(bit):物理层信息单元。

结语

  分层和封装,听起来高大上,但其实就是"一栋楼"和"套信封"的故事------分层是把复杂的网络功能拆到不同的"楼层",每层各管各的事;封装就是数据每下一层楼就多套一个信封(加头部),到了对面再从一楼往上逐层拆信封(解封装)。

  这种设计思想是整个计算机网络的核心基础。后面从第2章开始,我们将逐层深入------从应用层开始,一层一层往下拆解每层的协议、原理和实现细节。到那时,你会更深刻地理解"分层"的价值:每层有自己的小世界,但层与层之间又有精妙的协作。

  至此,第1章「计算机网络和因特网」的内容就全部讲完了。从1.1到1.5,我们走过了因特网的整体架构、网络边缘、网络核心、性能指标和分层体系,搭建了一个完整的"宏观地图"。从第2章开始,我们将拿着这张地图,逐层深入探索每个"楼层"的精彩内容。感兴趣的朋友可以关注一下,一起跟着《计算机网络-自顶向下方法》,从基础开始,逐步吃透计算机网络~

  如果觉得本节笔记对你有帮助,欢迎点赞、收藏,有不懂的地方也可以在评论区留言,我们一起讨论学习!

相关推荐
tryxr19 分钟前
Chat2Excel 项目通用服务开发
java·开发语言·excel·java项目开发
Jazz_z26 分钟前
使用 Python 合并与取消合并 Excel 单元格
开发语言·python·excel
斑马13934 分钟前
Linux软件编程学习笔记(十)——网络(二)——TCP通信
开发语言·网络·php
多敲代码防脱发37 分钟前
Alibaba Sentinel(熔断、限流)(国内下载Sentinel)
java·开发语言·sentinel
艺杯羹40 分钟前
双轨大模型路由实战:从端侧Ollama边缘推理到云端大模型容灾降级架构深度拆解
开发语言·人工智能·ai·架构·php
quantdash_cc42 分钟前
量化数据管道为什么会出现历史 K 线缺口?从 API 请求到数据质量的完整排查方法
开发语言·python·数据分析·量化·股票数据·quantdash
BingoGo1 天前
免费可商用 PHP 管理后台 CatchAdmin V5.4.0 发布,新增短信服务能力
后端·php
Interview Aid1121 天前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展