第6章 应用层知识点整理

应用层是计算机网络体系结构中最接近用户的一层,它直接为用户的网络应用提供服务。传输层解决进程之间如何通信的问题,应用层则在此基础上规定具体应用如何组织数据、如何发起请求、如何响应请求以及如何解释交换的信息。常见的应用层协议包括 DNS、FTP、SMTP、POP3、HTTP 等,它们分别支撑域名解析、文件传输、电子邮件和万维网访问等典型网络应用。

本章的核心线索可以概括为:先理解网络应用的组织模型,再理解几类重要应用层协议的工作机制。客户/服务器模型和 P2P 模型描述应用进程之间的组织方式;DNS 解决域名到 IP 地址的映射;FTP 解决文件在主机之间的传输;电子邮件系统解决邮件的发送、传输和读取;WWW 与 HTTP 则构成用户访问 Web 资源的基础。

一、网络应用模型

网络应用模型描述的是网络应用中各个主机和进程如何分工协作。不同网络应用可能采用不同的组织方式,其中最常见的是客户/服务器模型和 P2P 模型。理解这两种模型,有助于判断一个应用中的通信方向、资源位置、服务器压力和扩展方式。
在这里插入图片描述

1. 客户/服务器模型

客户/服务器模型通常简称 C/S 模型。在这种模型中,网络应用由客户进程和服务器进程组成。服务器通常长期运行,等待客户发起请求;客户在需要服务时主动联系服务器,发送请求并等待响应。

服务器的主要特点是长期处于运行状态,并且通常具有固定的 IP 地址或稳定的域名,方便客户随时访问。服务器用于集中提供服务,例如 Web 服务器提供网页资源,邮件服务器负责邮件收发,文件服务器提供文件访问。由于许多客户都要向服务器请求服务,服务器往往需要较强的硬件能力、稳定的网络连接和专门的维护管理。

客户的主要特点是主动发起通信。客户进程通常不是一直运行,而是在用户需要时启动,例如打开浏览器访问网页、启动邮件客户端收取邮件等。客户可以使用动态 IP 地址,不必像服务器那样长期固定在线。客户之间一般不直接通信,而是通过服务器间接完成信息交换或资源访问。

C/S 模型的优点是结构清晰、管理集中、安全控制和权限管理相对容易,适合提供稳定的公共服务。它的不足是服务器可能成为性能瓶颈,一旦服务器负载过高或发生故障,很多客户都会受到影响。因此,大规模 C/S 应用通常会使用服务器集群、负载均衡、缓存和内容分发网络等方式提升服务能力。

2. P2P 模型

P2P 模型又称对等模型。在这种模型中,没有严格固定的服务器和客户角色,每个参与节点既可以请求资源,也可以向其他节点提供资源。一个节点既可能在某次通信中充当客户,也可能在另一次通信中充当服务器。

P2P 模型的典型特点是资源分布在大量普通主机中,节点之间可以直接通信。随着参与节点数量增加,系统中可提供资源和带宽的节点也可能增加,因此 P2P 模型具有较强的自扩展能力。在文件共享、分布式存储、实时通信等场景中,P2P 思想有重要应用。

P2P 模型的优势是中心压力较小,资源利用更加分散,系统规模扩大时不一定需要集中增加服务器能力。但它也存在管理复杂、节点不稳定、安全控制困难、资源搜索和一致性维护成本较高等不足。由于普通节点可能随时上线或离线,P2P 应用往往需要设计额外机制来发现节点、定位资源和维持连接。

3. C/S 模型与 P2P 模型的对比

对比项 客户/服务器模型 P2P 模型
角色划分 客户和服务器角色明确 节点角色对等,可同时请求和提供服务
资源位置 资源主要集中在服务器 资源分散在多个对等节点
通信方式 客户主动请求服务器 节点之间可直接通信
扩展方式 通常依赖增强服务器能力 节点增加时资源和带宽可能同步增加
管理控制 集中管理较方便 分布式管理较复杂
稳定性 服务器稳定性影响整体服务 节点动态变化明显,需处理节点频繁加入和离开

两种模型并不是互相排斥的。现实中的许多应用会采用混合结构,例如利用中心服务器完成登录、索引或资源发现,再让用户节点之间直接交换数据。理解模型的重点在于看清通信关系和资源组织方式,而不是机械地把某个应用归入单一类别。

二、域名系统 DNS

DNS 的全称是域名系统。互联网中的主机最终依靠 IP 地址通信,但用户更习惯使用便于记忆的域名,例如 www.example.com。DNS 的作用就是把人容易记忆的域名转换为网络能够使用的 IP 地址,同时也可以支持别名、邮件服务器定位等功能。

DNS 是一个分布式、层次化的命名系统和查询系统。它没有把所有域名信息集中保存在一台服务器上,而是按照域名层次把数据分散保存在不同级别的域名服务器中。这样既能支撑互联网中巨量域名,也能避免单点故障和集中管理压力。

1. DNS 的基本作用

DNS 最基本的功能是域名解析,即根据域名查询对应的 IP 地址。例如用户在浏览器中输入一个网址时,浏览器首先需要得到该域名对应的服务器 IP 地址,然后才能向目标服务器建立 TCP 连接并请求网页内容。

除了从域名到 IP 地址的映射,DNS 还可以保存多种资源记录。不同类型的记录可以表示主机地址、邮件交换服务器、别名等信息。对于普通 Web 访问来说,最常见的是把主机名解析为 IP 地址;对于电子邮件系统来说,DNS 中的邮件交换记录也很重要,因为发送方邮件服务器需要知道目标域的邮件服务器位置。

2. 层次域名空间

DNS 采用层次树状命名结构。域名从右向左层次逐渐降低,最右侧是顶级域,向左依次是二级域、三级域以及具体主机名。例如在 www.cskaoyan.com 中,com 是顶级域,cskaoyan 是二级域,www 可以表示该域中的一台 Web 主机或服务名称。

域名系统的根位于最上层,根下面是顶级域。顶级域可以分为通用顶级域、国家或地区顶级域以及反向域等类型。通用顶级域包括 com、org、net、edu、gov 等;国家或地区顶级域包括 cn、us、uk 等;反向域 arpa 常用于从 IP 地址反向查找域名。

域名中的每一段称为一个标号,标号之间用点分隔。域名整体需要满足一定长度限制,每个标号也有长度限制。域名不区分大小写,实际使用时通常写成小写形式。一个完整域名能够从具体主机一直追溯到根,体现出 DNS 的层次结构。
在这里插入图片描述

3. 域名服务器的层次结构

DNS 的分布式数据库由不同级别的域名服务器共同维护。常见域名服务器包括根域名服务器、顶级域名服务器、权限域名服务器和本地域名服务器。

根域名服务器位于 DNS 层次结构的最高层。它并不保存所有域名的最终 IP 地址,而是知道各顶级域名服务器的位置。当本地域名服务器无法直接解析某个域名时,可以从根域名服务器开始逐级查询。

顶级域名服务器负责管理某个顶级域下的域名信息,例如 com、org、cn 等顶级域。它通常不会直接保存所有主机的 IP 地址,而是告诉查询方下一步应该去哪个权限域名服务器查询。

权限域名服务器负责某个具体区域的域名记录。一个组织或域名所有者通常会设置权限域名服务器来保存该域下主机名与 IP 地址等资源记录。真正的域名到 IP 地址映射往往保存在权限域名服务器中。

本地域名服务器通常由网络接入服务商、学校、企业或公共 DNS 服务提供。用户主机进行 DNS 查询时,通常先把请求发送给本地域名服务器。本地域名服务器会根据缓存或进一步查询结果向用户返回答案。虽然本地域名服务器不一定属于 DNS 层次结构中的某个固定层级,但它在实际解析过程中非常重要。
在这里插入图片描述

4. 域名解析过程

域名解析可以分为递归查询和迭代查询两种基本方式。递归查询要求被查询的服务器给出最终结果,如果它自己不知道,就需要代替查询方继续向其他服务器查询。迭代查询则是被查询服务器如果不知道最终结果,就返回下一步应该查询的服务器地址,由查询方继续查询。

实际 DNS 解析中,用户主机通常向本地域名服务器发起递归查询,因为用户主机希望直接得到最终 IP 地址,不愿意自己逐级询问根服务器、顶级域名服务器和权限域名服务器。本地域名服务器向外部 DNS 服务器查询时,通常采用迭代查询,从根域名服务器开始逐级获得线索,最终找到保存目标域名记录的权限域名服务器。

以查询 www.example.com 的 IP 地址为例,过程可以理解为:

  1. 用户主机先检查本机缓存,如果没有对应记录,就向本地域名服务器发送查询请求。
  2. 本地域名服务器如果有缓存记录,就直接返回结果。
  3. 如果没有缓存,本地域名服务器向根域名服务器查询,根服务器返回负责 com 的顶级域名服务器地址。
  4. 本地域名服务器再向 com 顶级域名服务器查询,顶级域名服务器返回 example.com 的权限域名服务器地址。
  5. 本地域名服务器向 example.com 的权限域名服务器查询,得到 www.example.com 对应的 IP 地址。
  6. 本地域名服务器把结果返回给用户主机,并在本地缓存一段时间,以便后续查询更快完成。
    在这里插入图片描述
    在这里插入图片描述

5. DNS 缓存

DNS 缓存是提高解析效率的重要机制。主机、本地域名服务器以及中间查询过的服务器都可以缓存域名解析结果。缓存可以减少重复查询,降低根服务器和顶级域名服务器压力,也能缩短用户访问网页前的等待时间。

缓存记录通常有生存时间,超过时间后需要重新查询。这样既能利用缓存提高效率,又能在域名对应 IP 地址发生变化后逐渐更新。DNS 缓存虽然能提高性能,但也可能带来缓存过期、缓存污染等安全和一致性方面的风险,因此实际系统会结合安全机制和合理的缓存策略进行管理。

三、文件传输协议 FTP

FTP 的全称是文件传输协议,用于在网络中的主机之间传输文件。FTP 采用客户/服务器模型,用户在 FTP 客户端上发出命令,FTP 服务器根据请求完成登录认证、目录查看、文件上传和文件下载等操作。

FTP 工作在应用层,底层使用 TCP 提供可靠传输。与许多应用只使用一条连接不同,FTP 的重要特点是把控制信息和文件数据分开传输,因此会使用控制连接和数据连接两类 TCP 连接。

1. FTP 的基本功能

FTP 主要用于实现远程主机之间的文件传输。用户可以通过 FTP 客户端登录服务器,浏览服务器目录,下载服务器上的文件,也可以把本地文件上传到服务器。FTP 还可以支持文件删除、重命名、目录切换等与文件管理有关的操作,具体能力取决于服务器权限和客户端实现。

FTP 传输文件时需要注意不同系统之间文件表示方式的差异。例如文本文件可能涉及字符编码和换行符表示,二进制文件则应按字节原样传输。FTP 因此提供了不同传输类型,常见的是 ASCII 模式和二进制模式。文本文件适合使用 ASCII 模式,图片、压缩包、程序等文件一般应使用二进制模式,避免内容被错误转换。

2. 控制连接

控制连接用于传输 FTP 命令和服务器响应。FTP 服务器通常在 TCP 21 端口等待客户连接。客户建立到服务器 21 端口的 TCP 连接后,通过这条连接发送用户名、密码、切换目录、列出文件、请求上传或下载等命令,服务器也通过这条连接返回状态码和提示信息。

控制连接在整个 FTP 会话期间通常保持打开。即使正在传输文件,控制连接也继续用于管理会话状态和传输命令。由于控制连接只传输命令和响应,数据量通常较小,但它决定了 FTP 会话的控制流程。
在这里插入图片描述

3. 数据连接

数据连接用于真正传输文件内容或目录列表。每当需要传输一个文件或返回一个目录列表时,FTP 通常会建立一条新的数据连接。FTP 服务器传统上使用 TCP 20 端口作为数据连接端口,但具体连接方式还与主动模式和被动模式有关。

数据连接不是一直存在的。一次文件传输或目录列表传输完成后,对应的数据连接通常会关闭。下一次传输数据时,再重新建立新的数据连接。这种设计使控制信息与文件数据分离,便于独立管理不同类型的信息。

4. 主动模式与被动模式

在 FTP 主动模式中,客户端先通过控制连接告诉服务器自己用于接收数据的端口,随后服务器从自己的数据端口主动连接客户端指定端口,建立数据连接。主动模式中,数据连接由服务器主动发起。

在 FTP 被动模式中,客户端请求服务器进入被动状态,服务器打开一个临时端口并告知客户端,随后客户端主动连接服务器该端口建立数据连接。被动模式中,控制连接和数据连接都由客户端主动发起。

由于很多客户端位于 NAT 或防火墙之后,外部服务器主动连接客户端端口可能被阻止,所以实际应用中被动模式更常见。理解主动模式和被动模式的关键,是看数据连接由谁主动发起,以及连接目标端口由谁提供。

5. FTP 的特点

FTP 的控制连接和数据连接分离,是它最具辨识度的特点。控制连接使用 21 端口并保持整个会话,数据连接用于具体数据传输,可以按需建立和释放。FTP 使用 TCP,因此文件传输本身能够获得可靠交付能力。

传统 FTP 存在明文传输用户名、密码和数据的安全隐患,因此在安全要求较高的场景中,通常会使用带加密保护的替代方案或扩展机制。理解教材中的 FTP 时,重点应放在它的客户/服务器结构、两个连接、控制连接与数据连接的分工,以及主动和被动数据连接的区别。

四、电子邮件

电子邮件是互联网中非常典型的异步通信应用。发送方写好邮件后,不要求接收方立即在线,邮件会先被发送到邮件服务器,再由接收方在合适时间读取。电子邮件系统涉及用户代理、邮件服务器、邮件发送协议和邮件读取协议等组成部分。

1. 电子邮件系统的组成

电子邮件系统通常由用户代理、邮件服务器和邮件协议构成。

用户代理是用户收发邮件的软件或界面,例如邮件客户端程序、网页邮箱界面等。用户通过用户代理编写、发送、接收、阅读和管理邮件。用户代理并不一定直接把邮件送到对方主机,而是把邮件交给发送方邮件服务器处理。

邮件服务器负责邮件的存储与转发。每个用户通常在某个邮件服务器上拥有邮箱。发送邮件时,邮件先从发送方用户代理提交到发送方邮件服务器,再由发送方邮件服务器通过网络传送到接收方邮件服务器。接收方邮件服务器把邮件保存到接收者邮箱中,等待接收者读取。

邮件协议规定邮件系统中不同环节如何通信。发送邮件常用 SMTP,读取邮件常用 POP3 或 IMAP。SMTP 负责把邮件从发送端推送到服务器或服务器之间传输,POP3 和 IMAP 则主要用于用户从邮件服务器读取或管理邮件。
在这里插入图片描述

2. 电子邮件的传输过程

一封邮件从发送者到接收者大致经历以下过程:

  1. 发送者使用用户代理编写邮件,填写收件人地址、主题和正文。
  2. 用户代理使用 SMTP 把邮件提交给发送方邮件服务器。
  3. 发送方邮件服务器根据收件人域名,通过 DNS 查询目标域的邮件服务器地址。
  4. 发送方邮件服务器使用 SMTP 把邮件传送到接收方邮件服务器。
  5. 接收方邮件服务器把邮件保存到接收者邮箱。
  6. 接收者使用用户代理,通过 POP3、IMAP 或网页方式读取邮件。

这个过程体现了电子邮件的存储转发特点。邮件不是直接从发送者主机传到接收者主机,而是经过邮件服务器中转和保存。这样即使接收者暂时不在线,邮件仍然可以到达接收者邮箱。
在这里插入图片描述

3. 电子邮件地址与格式

电子邮件地址通常采用“用户名@邮件服务器域名”的形式。@ 左侧表示用户邮箱名,右侧表示用户所在邮件服务器或邮件域。例如 user@example.com 表示 example.com 域中的 user 用户。

一封邮件通常由信封、首部和主体组成。信封用于邮件传输过程中的投递控制;首部包含 From、To、Subject、Date 等字段,用于描述发件人、收件人、主题和时间;主体是用户实际编写的邮件内容。

邮件首部和主体之间通常用一个空行分隔。Subject 字段用于表示邮件主题,From 字段表示发件人,To 字段表示收件人。邮件格式的规范化使不同邮件客户端和服务器能够正确识别和处理邮件内容。
在这里插入图片描述

五、MIME

早期电子邮件主要面向 ASCII 文本,不能很好地表示中文、图片、音频、视频、附件等内容。MIME 的全称是多用途互联网邮件扩展,它扩展了电子邮件的数据表示能力,使邮件可以携带非 ASCII 文本和多媒体内容。

1. MIME 的作用

MIME 的作用是在不改变基本邮件传输机制的基础上,让邮件能够表示更丰富的数据类型。由于 SMTP 早期主要适合传输 ASCII 文本,MIME 会把非 ASCII 数据转换成适合邮件传输的形式,并在邮件首部中加入说明信息,告诉接收方如何还原和解释邮件内容。

MIME 使电子邮件能够包含中文正文、HTML 正文、图片附件、音频附件、视频附件、压缩文件等内容。没有 MIME,现代电子邮件很难支持多语言和多媒体。

2. MIME 的关键字段

MIME 在邮件首部中增加了一些字段,用于描述邮件内容类型、编码方式和结构。常见字段包括 MIME-Version、Content-Type、Content-Transfer-Encoding 等。

MIME-Version 表示邮件使用的 MIME 版本。Content-Type 表示主体内容的媒体类型,例如 text/plain 表示普通文本,text/html 表示 HTML 文本,image/jpeg 表示 JPEG 图片,multipart/mixed 表示邮件包含多个部分。Content-Transfer-Encoding 表示内容为了通过邮件系统传输而采用的编码方式,例如 base64 可以用于编码二进制附件。

3. MIME 与 SMTP 的关系

MIME 不是替代 SMTP 的传输协议,而是对邮件内容格式的扩展。SMTP 负责把邮件从一个邮件服务器传送到另一个邮件服务器,MIME 负责说明邮件中包含什么类型的内容以及如何编码这些内容。

可以把 SMTP 理解为邮件传输通道,把 MIME 理解为邮件内容包装格式。MIME 扩展后的邮件仍然可以通过 SMTP 传输,只是在邮件首部和主体结构中包含更多内容说明。
在这里插入图片描述

六、SMTP 与 POP3

电子邮件系统中常用的两个应用层协议是 SMTP 和 POP3。SMTP 主要负责发送和传输邮件,POP3 主要负责接收方从邮件服务器读取邮件。二者功能方向不同,不能混为一谈。

1. SMTP

SMTP 的全称是简单邮件传输协议。它用于发送邮件,包括用户代理向发送方邮件服务器提交邮件,以及邮件服务器之间转发邮件。SMTP 运行在 TCP 之上,传统端口号为 25。

SMTP 采用客户/服务器方式工作。发送方 SMTP 客户主动连接接收方 SMTP 服务器,建立 TCP 连接后进行命令和响应交互。典型流程包括建立连接、发送发件人信息、发送收件人信息、传输邮件内容、结束会话等。

SMTP 的一个重要特点是“推”协议。发送方主动把邮件推送到服务器或对方邮件服务器。只要邮件可以被成功交给接收方邮件服务器,接收者是否立即阅读并不影响邮件投递。

SMTP 传输过程中常见命令包括 HELO 或 EHLO、MAIL FROM、RCPT TO、DATA、QUIT 等。服务器会返回三位数字状态码表示处理结果,例如连接就绪、命令成功、开始输入邮件内容、服务关闭等。理解 SMTP 时,重点在于它用于发送而不是读取邮件,并且通常负责服务器之间的邮件传送。

2. POP3

POP3 的全称是邮局协议第 3 版。它用于用户代理从邮件服务器读取邮件,运行在 TCP 之上,传统端口号为 110。POP3 是一种相对简单的邮件读取协议,适合把服务器邮箱中的邮件下载到本地客户端。

POP3 工作过程通常包括认证、事务处理和更新三个阶段。认证阶段,用户向服务器提供用户名和密码;事务处理阶段,用户代理可以列出邮件、下载邮件、标记删除邮件等;更新阶段,服务器根据用户操作删除被标记的邮件并结束会话。

POP3 的传统工作方式常常是下载并删除服务器上的邮件,也可以配置为下载后保留。它的特点是实现简单,但在多设备同步、服务器端文件夹管理、邮件状态同步等方面不如 IMAP 灵活。

3. SMTP 与 POP3 的区别

对比项 SMTP POP3
主要功能 发送和传输邮件 从服务器读取邮件
通信方向 发送方主动推送邮件 用户代理从服务器拉取邮件
常用端口 TCP 25 TCP 110
使用场景 用户提交邮件、服务器间转发邮件 用户下载或读取邮箱中的邮件
协议角色 邮件发送协议 邮件读取协议

简单来说,SMTP 解决“邮件如何发出去”,POP3 解决“用户如何取回来”。电子邮件系统通常需要同时使用发送协议和读取协议,才能完成完整的收发流程。

4. IMAP 的补充理解

虽然本章重点强调 SMTP 和 POP3,但实际电子邮件系统中 IMAP 也很常见。IMAP 同样用于用户读取和管理邮件,但它更强调邮件保存在服务器上,并支持多设备同步、文件夹管理、邮件状态同步等功能。

与 POP3 相比,IMAP 更适合手机、电脑、网页端同时管理同一邮箱的场景。POP3 更偏向把邮件下载到本地,IMAP 更偏向在服务器上集中管理邮件。了解这一点有助于理解现代邮箱服务为什么常用 IMAP 或网页邮箱,而不仅仅依赖 POP3。

七、万维网 WWW

万维网是建立在互联网之上的大规模分布式超媒体系统。用户通过浏览器访问 Web 页面,页面中可以包含文本、图片、音频、视频、超链接等内容。WWW 使互联网上的资源能够通过统一方式组织、定位和访问。
在这里插入图片描述

1. WWW 的基本概念

WWW 的核心思想是把网络资源组织成相互链接的超文本或超媒体文档。一个页面可以通过超链接指向另一个页面,用户点击链接就可以跳转到其他资源。超文本强调文本之间的链接关系,超媒体则进一步包含图片、音频、视频等多媒体内容。

WWW 使用统一资源定位符 URL 来标识资源位置,使用 HTTP 作为浏览器和服务器之间的应用层协议,使用 HTML 描述网页内容的结构和展示方式。浏览器负责向服务器请求资源、解释返回内容并展示给用户;Web 服务器负责保存资源并响应浏览器请求。

2. URL

URL 的全称是统一资源定位符,用于标识互联网上某个资源的位置和访问方式。常见 URL 形式包括协议、主机名、端口、路径等组成部分。例如 http://www.example.com/index.html 表示使用 HTTP 协议访问 www.example.com 主机上的 index.html 资源。

URL 中的协议部分说明访问资源所使用的协议,例如 http、https、ftp 等。主机名部分说明资源所在服务器,可以是域名,也可以是 IP 地址。端口号用于标识服务器上的具体服务端口,如果省略,通常使用协议默认端口。路径部分说明服务器中的具体资源位置。

URL 的意义在于统一描述资源位置,使浏览器能够根据 URL 完成 DNS 解析、建立连接、发送请求和获取资源等一系列过程。

3. HTML

HTML 的全称是超文本标记语言,用于描述网页的结构和内容。HTML 文档中通过标签表示标题、段落、链接、图片、表格等元素。浏览器收到 HTML 文档后,会解析标签并把页面展示给用户。

HTML 本身不是传输协议,而是一种文档描述语言。HTTP 负责把 HTML 文档从服务器传给浏览器,浏览器再解释 HTML。一个网页通常不只包含一个 HTML 文件,还可能引用 CSS、JavaScript、图片、视频等多个对象,因此访问一个页面时,浏览器可能需要向服务器发起多次资源请求。

4. Web 访问的基本过程

用户访问一个网页时,浏览器背后通常会完成多个步骤:

  1. 用户在浏览器中输入 URL 或点击链接。
  2. 浏览器解析 URL,确定协议、域名、端口和资源路径。
  3. 浏览器通过 DNS 查询域名对应的 IP 地址。
  4. 浏览器与 Web 服务器建立 TCP 连接,HTTP 默认端口为 80,HTTPS 默认端口为 443。
  5. 浏览器发送 HTTP 请求报文,请求指定资源。
  6. 服务器返回 HTTP 响应报文,其中包含状态码、响应首部和资源内容。
  7. 浏览器解析返回内容,显示页面,并根据页面中引用的对象继续请求其他资源。
  8. 根据协议版本和连接策略,TCP 连接可能关闭,也可能保持一段时间供后续请求复用。

这个过程体现了应用层与下层协议的配合。DNS 负责找到服务器 IP 地址,TCP 负责可靠连接,HTTP 负责请求和响应,HTML 等内容格式负责页面展示。

八、HTTP

HTTP 的全称是超文本传输协议,是浏览器和 Web 服务器之间交换数据的应用层协议。HTTP 定义了请求报文和响应报文的格式,规定客户端如何请求资源,服务器如何返回结果。

HTTP 运行在 TCP 之上。传统 HTTP 使用 80 端口,HTTPS 在 HTTP 与 TCP 之间增加 TLS 加密保护,通常使用 443 端口。教材中通常重点讨论 HTTP 的基本请求响应机制、报文结构、连接方式和状态码。
在这里插入图片描述

1. HTTP 的基本特点

HTTP 是无状态协议。无状态指服务器不会天然记住同一个客户之前的请求状态,每个 HTTP 请求在协议层面上相对独立。这样可以简化服务器设计,提高可扩展性,但也带来用户登录状态、购物车等连续交互的维护需求。为弥补无状态带来的限制,实际 Web 应用常使用 Cookie、Session 等机制记录用户状态。

HTTP 采用请求响应模式。客户端发送请求报文,服务器返回响应报文。服务器不会主动向客户端发送普通资源,只有在收到请求后才响应。请求响应模式使 HTTP 工作过程清晰,也便于浏览器和服务器实现通用互操作。

HTTP 可以传输多种类型的对象,不限于 HTML 文档。图片、CSS 文件、JavaScript 文件、JSON 数据、音频视频等都可以通过 HTTP 传输。响应报文中的 Content-Type 等首部字段会说明返回内容的类型。

2. 非持久连接与持久连接

早期 HTTP/1.0 默认采用非持久连接。非持久连接中,每请求一个对象就建立一条 TCP 连接,服务器返回对象后关闭连接。如果一个网页包含一个 HTML 文件和多个图片对象,浏览器可能需要为这些对象分别建立 TCP 连接。

非持久连接的缺点是开销较大。每条 TCP 连接都需要三次握手,连接建立和慢开始都会带来额外时延。对于包含多个对象的网页,频繁建立和关闭连接会明显降低访问效率。

HTTP/1.1 默认采用持久连接。持久连接允许同一条 TCP 连接传输多个 HTTP 请求和响应。这样可以减少连接建立次数,降低时延,提高带宽利用率。持久连接还可以进一步结合流水线方式,让客户端在收到前一个响应前连续发送多个请求,但实际实现中还需要考虑队头阻塞等影响。

3. HTTP 报文结构

HTTP 报文分为请求报文和响应报文,二者都是面向文本的格式,由开始行、首部字段、空行和可选实体主体组成。

请求报文的开始行称为请求行,通常包括方法、URL 和 HTTP 版本。例如:

GET /index.html HTTP/1.1

其中 GET 是请求方法,/index.html 是请求资源路径,HTTP/1.1 是协议版本。请求行之后是若干首部字段,例如 Host、Connection、User-Agent、Accept-Language 等。首部字段结束后有一个空行,如果请求需要提交数据,空行之后还可以包含实体主体。

响应报文的开始行称为状态行,通常包括 HTTP 版本、状态码和原因短语。例如:

HTTP/1.1 200 OK

状态行之后是响应首部字段,例如 Content-Type、Content-Length、Connection 等。空行之后是响应主体,通常包含服务器返回的 HTML 文档、图片数据或其他资源内容。
在这里插入图片描述

4. HTTP 方法

HTTP 方法表示客户端希望对资源执行的操作。常见方法包括 GET、HEAD、POST、PUT、DELETE 等。

GET 用于请求获取资源,是最常见的方法。浏览器访问网页时通常使用 GET 请求 HTML 文档、图片、脚本等对象。HEAD 与 GET 类似,但服务器只返回响应首部,不返回实体主体,适合检查资源信息。POST 常用于向服务器提交数据,例如提交表单、上传内容或发送请求体数据。PUT 常用于上传或替换指定资源,DELETE 用于请求删除指定资源。

不同方法表达了不同语义。理解 HTTP 方法时,重点不是记住所有方法细节,而是知道方法字段告诉服务器客户端想要怎样处理目标资源。
在这里插入图片描述

5. HTTP 状态码

HTTP 状态码是服务器对请求处理结果的数字化说明。状态码由三位数字组成,第一位表示类别。

状态码类别 含义
1xx 信息性状态,表示请求已接收,继续处理
2xx 成功,表示请求已被成功接收、理解和处理
3xx 重定向,表示需要进一步操作才能完成请求
4xx 客户端错误,表示请求有错误或无法完成
5xx 服务器错误,表示服务器处理请求时发生错误

常见状态码包括 200 OK、301 Moved Permanently、302 Found、400 Bad Request、403 Forbidden、404 Not Found、500 Internal Server Error 等。200 表示请求成功,404 表示服务器找不到请求资源,500 表示服务器内部错误。

6. Cookie

由于 HTTP 是无状态协议,服务器默认无法根据协议本身记住同一用户之前的访问状态。Cookie 是一种在客户端保存少量状态信息的机制,用来帮助服务器识别用户或维持会话。

Cookie 的基本过程是:服务器在响应报文中通过 Set-Cookie 首部要求浏览器保存某些信息;浏览器后续访问同一站点时,会在请求报文中通过 Cookie 首部把这些信息带回服务器。服务器据此识别用户、维持登录状态、保存偏好设置或关联购物车内容。

Cookie 并不是 HTTP 可靠传输的组成部分,而是 Web 应用在 HTTP 无状态基础上实现状态管理的一种常见机制。使用 Cookie 时也需要注意隐私和安全,例如敏感信息不应直接明文保存在 Cookie 中。

九、常见应用层协议与端口

在这里插入图片描述

应用层协议通常有约定的默认端口。端口号能够帮助传输层把收到的数据交付给对应应用进程。

应用或协议 常用端口 传输层协议 主要用途
FTP 数据连接 20 TCP 传输文件数据
FTP 控制连接 21 TCP 传输 FTP 命令和响应
SMTP 25 TCP 发送和转发电子邮件
DNS 53 UDP 为主,必要时使用 TCP 域名解析
HTTP 80 TCP Web 资源访问
POP3 110 TCP 从邮件服务器读取邮件
IMAP 143 TCP 在服务器上读取和管理邮件
HTTPS 443 TCP 加密 Web 访问

端口号只是默认约定,实际服务器可以配置在其他端口运行。但在理解常见协议时,熟悉这些默认端口有助于判断应用层协议与传输层连接之间的关系。

十、应用层协议之间的协作关系

应用层协议常常不是孤立工作的。用户访问一个网页时,浏览器可能先使用 DNS 查询域名对应 IP 地址,再通过 TCP 与 Web 服务器建立连接,最后使用 HTTP 请求网页资源。网页中的图片、样式表和脚本可能继续触发新的 HTTP 请求。

发送电子邮件时,用户代理通过 SMTP 把邮件提交给发送方邮件服务器,发送方邮件服务器可能使用 DNS 查询接收方邮件域的邮件服务器地址,然后再通过 SMTP 把邮件转发过去。接收者读取邮件时,则可能使用 POP3 或 IMAP 从接收方邮件服务器取回邮件。

FTP 进行文件传输时,用户首先通过 TCP 21 端口建立控制连接,然后在具体传输文件或目录列表时建立数据连接。这个过程说明同一个应用层协议内部也可能使用多条传输层连接,并且不同连接承担不同功能。

这些协作关系体现出应用层的一个重要特点:具体应用往往需要多个协议共同完成。DNS 提供命名支持,TCP 提供可靠传输,具体应用层协议规定业务数据格式和交互流程。

十一、本章知识脉络

本章可以从“应用模型”和“典型协议”两条线索把握。应用模型说明网络应用如何组织通信关系,客户/服务器模型强调中心服务器提供服务,P2P 模型强调节点之间对等协作。典型协议则说明具体应用如何完成数据交换,DNS、FTP、电子邮件和 WWW 分别代表了不同类型的应用场景。

DNS 的核心是层次命名和分布式解析。域名空间按照树状结构组织,域名服务器分层保存信息,本地域名服务器通过缓存、递归查询和迭代查询帮助用户把域名转换为 IP 地址。

FTP 的核心是文件传输中的控制与数据分离。控制连接使用 TCP 21 端口,负责命令和响应;数据连接负责文件内容或目录列表传输,可以按需建立和关闭。主动模式和被动模式的区别,关键在于数据连接由哪一方主动发起。

电子邮件的核心是存储转发。用户代理、邮件服务器和邮件协议共同完成邮件收发。SMTP 用于发送和转发邮件,POP3 用于用户读取邮件,MIME 扩展了邮件内容表示能力,使邮件能够支持中文、多媒体和附件。

WWW 的核心是资源定位、资源请求和资源展示。URL 标识资源位置,HTTP 规定浏览器与服务器的请求响应格式,HTML 描述网页内容。HTTP 的无状态特性、持久连接、报文结构、方法、状态码和 Cookie,是理解 Web 工作过程的关键。

应用层最终体现的是网络服务如何面向用户需求进行组织。底层协议负责把数据可靠或尽力送达,而应用层协议负责让这些数据具有明确的业务含义。掌握本章内容,需要把模型、协议、端口、连接和实际应用过程联系起来理解。

重点问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐