这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

应用层

可能会在选择题中考察,主要涉及到一些应用层协议的基本概念。

学习思维导图:

# 应用层

## 网络应用模型

- C/S模型
- P2P模型

## DNS系统

- 层次域名空间
- 域名服务器
- 域名解析过程

## FTP

- FTP协议的工作原理
- 控制连接和数据连接

## 电子邮件

- 电子邮件系统的组成结构
- 电子邮件格式和MIME
- SMTP协议与POP3协议

## WWW

- 概念和组成结构
- HTTP协议

1 - 网络应用模型

了解 CS 模型和 P2P 模型的概念,可能在选择题中考察。
Client-Server Network
P2P Network

C/S 模型

C/S(Client Server)模型:中心化、依赖服务器,适合稳定服务场景。

  • 核心特点:客户端(用户设备,如电脑、手机)向服务器(提供服务的专用设备)请求资源或服务,服务器响应并提供支持。
  • 通信方式:基于 “请求 - 响应”,客户端主动发起,服务器被动应答。
  • 架构:中心化,服务器是核心枢纽,客户端依赖服务器获取服务。
  • 典型例子:浏览网页(浏览器与 Web 服务器)、收发邮件(邮件客户端与邮件服务器)。

P2P 模型

P2P(Peer to Peer):分布式、节点平等,适合资源共享和去中心化场景。

  • 核心特点:网络中 设备对等,既是客户端又可作服务器,共同协作共享资源。
  • 通信方式:设备直接互联,点对点通信,无需中心服务器。
  • 架构:分布式,去中心化,资源分散在各节点,网络更灵活。
  • 典型例子:文件共享(如 BitTorrent)、音视频通话(如 Skype)、区块链(如比特币)。

2 - DNS

了解 DNS 的功能以及域名查询的步骤,可能在选择题中考察。

层次域名空间

DNS 使用层次域名空间来组织域名,将域名划分为多个级别,每个级别之间以点(.)分隔。域名从右到左逐级递增,最右边是顶级域名(TLD),然后是二级域名,三级域名,以此类推。

例如, www.example.com 中, .com “是顶级域名, example.com 是二级域名, www.example.com 是子域名。

DNS 层次域名空间的设计使得域名分布在不同的管理区域中,每个管理区域负责管理其自己的域名空间。这种分层结构有助于提高 DNS 的可扩展性和效率。

域名服务器

  1. 根域名服务器 (Root Name Servers):
    • 这些服务器位于 DNS 解析的最顶端。它们不直接回答关于哪个域名映射到哪个 IP 地址的查询,而是告诉查询者下一步应该询问哪个顶级域名 (TLD) 服务器。
    • 根服务器的数量是有限的,并且它们的位置在全球都是已知的。
  2. 顶级域名服务器 (Top-Level Domain Name Servers, TLD Name Servers):
    • 这些服务器负责特定的顶级域名(如 .com, .org, .net 等)。它们为下一级的域名(如 example.com)提供有关权威名称服务器的信息。
  3. 权威域名服务器 (Authoritative Name Servers):
    • 这些服务器为特定的域名(如 example.com)提供详细的 DNS 记录信息(例如 A 记录、MX 记录等)。只有权威服务器才能为其负责的域名提供这些信息。
    • 大多数组织拥有权威 DNS 服务器来为他们的域名提供解析服务。
  4. 本地域名服务器 (Local Name Server)
    • 是在本地网络环境中运行的 DNS 服务器,它为该网络中的设备提供域名解析服务。
    • 每个 ISP 或一所大学都可以有一个本地域名服务器。

域名解析过程

Recursive Query
Iterative Query
Root DNS Server
Top-Level DNS Server
Authoritative DNS Server
Local DNS Server
Root DNS Server
Top-Level DNS Server
Authoritative DNS Server
Local DNS Server

域名解析分为 递归查询迭代查询 两种。

递归查询

  1. 客户端向递归服务器发送一个请求,比如解析 www.example.com
  2. 如果递归服务器没有缓存结果,它会从根服务器开始,逐级查询:
    • 首先查询根域名服务器(Root Server),获取顶级域(TLD)的服务器地址。
    • 再查询 TLD 服务器(比如 .com),获取权威服务器的地址。
    • 然后查询权威服务器,最终获取目标域名的 IP 地址。
  3. 递归服务器将最终的 IP 地址返回给客户端。

迭代查询

  1. 客户端向本地 DNS 服务器(或根服务器)发送查询请求,比如解析 www.example.com
  2. 根服务器返回 .com 顶级域的 DNS 服务器地址。
  3. 客户端再向 .com 顶级域 DNS 服务器发送查询请求。
  4. .com 顶级域返回 example.com 的权威服务器地址。
  5. 客户端向 example.com 的权威服务器发送查询请求,获取最终的 IP 地址。

DNS 递归查询 和 迭代查询的不同点如下表所示:

特点递归查询迭代查询
查询责任DNS 服务器负责查询所有结果客户端逐级查询
查询复杂度客户端简单,只需发起一次请求客户端复杂,需要多次查询
使用场景用户设备、本地 DNS 服务器DNS 服务器之间的交互
性能服务器负担较大服务器负担较小

DNS 缓存

无论是浏览器、操作系统,还是本地的递归 DNS 服务器,在接收到域名解析结果之后,都会将其暂时保存在本地缓存中。这样,如果同一个域名在短时间内被多次请求,就可以直接从缓存中获取结果,而不需要再次向外部服务器发送查询请求。

DNS 记录中包含一个名为 TTL(Time to Live)的字段,用于指定这条记录可以在缓存中保存多久。比如 TTL 为 3600 表示记录在缓存中可保留 3600 秒(即一小时)。在这段时间内,只要有查询,就可以直接使用缓存的结果。当 TTL 到期后,缓存记录会被丢弃,下一次查询将重新走完整的解析流程。

3 - FTP

了解 FTP 的工作原理和两种连接方式,可能在选择题中考察。

工作原理

  1. 建立连接:
    • FTP 通常使用 TCP 作为传输层协议。客户端和服务器之间首先建立一个 TCP 连接。FTP 默认使用两个端口,一个用于控制连接(命令连接,通常是端口 21),另一个用于数据传输连接。
  2. 身份验证:
    • 一旦建立了控制连接,客户端需要提供用户名和密码以进行身份验证。有些 FTP 服务器还支持匿名 FTP,允许用户使用一个通用的用户名(通常是"anonymous")和电子邮件地址作为密码进行访问。
  3. 命令与响应:
    • 控制连接用于传输 FTP 命令和服务器的响应。客户端可以向服务器发送各种 FTP 命令,如上传文件、下载文件、列出目录内容等。服务器将对每个命令响应一个状态码,指示命令执行的结果(例如,成功、失败等)。
  4. 数据连接:
    • 当需要传输文件或目录列表时,FTP 使用数据连接来进行实际的数据传输。数据连接可以以两种方式之一建立:
    • 主动模式(Active Mode):客户端打开一个本地端口,并通知服务器连接到该端口以进行数据传输。
    • 被动模式(Passive Mode):服务器打开一个本地端口,并通知客户端连接到该端口以进行数据传输。
    • 数据连接用于传输文件的内容或目录列表等信息。
  5. 文件传输:
    • 一旦建立了数据连接,文件传输开始。客户端可以向服务器上传文件(将本地文件发送到服务器)或下载文件(从服务器获取文件)。
    • 文件传输可以在 ASCII 模式和二进制模式之间切换。ASCII 模式适用于文本文件,而二进制模式适用于二进制文件(如图像、音频等)。
  6. 关闭连接:
    • 一旦文件传输完成或用户完成 FTP 会话,客户端可以发送 QUIT 命令以终止 FTP 连接。服务器会响应,并关闭连接。

控制连接和数据连接

Client Process
Server Process
控制连接
数据连接
FTP Client
FTP Server
随机端口
21 端口
  1. 控制连接(Control Connection):
    • 控制连接是 FTP 会话的首要连接,通常使用 TCP 的 端口 21
    • 控制连接用于传输 FTP 命令和服务器的响应,用来 控制 FTP 会话的行为。客户端通过控制连接向服务器发送各种 FTP 命令,如登录、列出文件目录、切换工作目录等。
    • 服务器通过控制连接发送状态码和响应消息,以指示每个 FTP 命令的执行结果(例如,成功、失败等)。
    • 控制连接始终保持打开状态(持久连接),直到用户完成 FTP 会话,或者用户发送 QUIT 命令以终止连接。
  2. 数据连接(Data Connection):
    • 数据连接用于实际的文件传输,以及在某些情况下,传输文件的目录列表信息。数据连接通常使用不同的端口,其端口号由控制连接中的 FTP 命令指定。
    • 有两种主要的数据连接模式:
    • 主动模式(Active Mode):在主动模式下,客户端在一个本地端口打开,并通过控制连接告知服务器连接到该端口以进行数据传输。服务器主动连接到客户端的本地端口。
    • 被动模式(Passive Mode):在被动模式下,服务器在一个本地端口打开,并通过控制连接告知客户端连接到该端口以进行数据传输。客户端主动连接到服务器的本地端口。
    • 数据连接用于上传文件(将文件从客户端发送到服务器)和下载文件(从服务器获取文件)。

4 - 电子邮件

了解 SMTP 和 POP3 协议,可能在选择题中考察。

电子邮件系统

电子邮件系统由 用户代理、邮件服务器 以及 电子邮件协议 这三个核心组成部分协同工作,确保邮件的发送、接收和存储。

SMTP
客户
SMTP
服务器
SMTP
客户
发件人
用户代理
发件人
邮件服务器
发送邮件
SMTP
POP3
服务器
SMTP
服务器
接收方
邮件服务器
POP3
客户
收件人
用户代理
发送邮件 SMTP
读取邮件
POP3
TCP
连接
TCP
连接
TCP 连接

用户代理

用户代理(UA, User Agent)是用户与电子邮件系统交互的接口,通常是邮件客户端软件(如 qq 邮箱网页界面、Outlook 等)。

功能:

  • 提供用户友好的界面,用于撰写、发送、接收和阅读邮件。
  • 管理邮件文件夹(如收件箱、已发送、草稿)。
  • 与邮件服务器通信以发送或获取邮件。

邮件服务器

邮件服务器(Mail Server)是电子邮件系统的核心,负责存储、转发和管理邮件。

功能:

  • 接收来自用户代理的邮件并存储。
  • 根据邮件的目标地址,通过 SMTP 协议将邮件转发到目标邮件服务器。
  • 提供邮件存储功能,供用户通过 POP3/IMAP 协议访问。

SMTP

SMTP(Simple Mail Transfer Protocol)是用于邮件发送的标准协议,负责在邮件服务器之间或从用户代理到邮件服务器传输邮件。

功能:

  • 定义了邮件如何从发送方传递到接收方的邮件服务器。
  • 工作在 TCP/IP 协议之上,通常使用端口 25(或加密端口 587)。
  • 仅负责邮件的发送,不涉及邮件的接收或存储。

工作流程:

  • 用户代理通过 SMTP 将邮件发送到发送方的邮件服务器。
  • 发送方服务器通过 SMTP 与接收方服务器通信,将邮件传递到目标服务器。

POP3

POP3 是用于从邮件服务器检索邮件的协议,允许用户将邮件下载到本地设备。

功能:

  • 用户代理通过 POP3 连接到邮件服务器,下载邮件到本地。
  • 默认情况下,邮件下载后会从服务器删除(可配置保留)。
  • 工作在 TCP/IP 协议之上,通常使用端口 110(或加密端口 995)。

工作流程:

  • 用户代理通过 POP3 登录服务器。
  • 下载新邮件到本地设备。
  • 可选择删除服务器上的邮件副本。
注意

需要注意的是,SMTP 使用的是“推送”(Push)方式进行通信。当用户代理发送邮件,或者邮件在邮件服务器之间传递时,SMTP 客户端会将邮件主动“推送”到 SMTP 服务器。而 POP3 则采用“拉取”(Pull)方式进行通信。当用户需要查看邮件时,用户代理会向邮件服务器发出请求,从服务器中“拉取”用户邮箱里的邮件。

电子邮件格式

一封电子邮件由 信封内容 两部分组成,其中 邮件内容 又可分为 首部主体
邮件的 首部格式 由 RFC 标准定义,而 主体部分 则由用户自由撰写。

用户在填写完邮件首部后,系统会自动提取信封所需的信息,无需用户手动填写信封内容。

邮件首部由若干 首部行 组成,每行格式为:关键字: 值。其中:

  • To:必填,指定一个或多个收件人的电子邮件地址,格式为 用户名@域名,如 abc@csgraduates.com。用户名在所属域名下必须唯一,从而保证该邮箱地址在整个互联网上唯一。
  • Subject:可选,表示邮件主题,用于概括邮件内容。
  • From:必填,表示发件人邮箱地址,通常由邮件系统自动填写。

首部和主体之间用一个空行分隔。以下是一个典型邮件内容示例:

From: sender@example.com
To: abc@cskaoyan.com
Subject: Meeting Schedule

Dear team,
Please find the meeting schedule attached.

MIME

MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)是为了解决传统电子邮件格式的局限性而提出的一种扩展标准。

早期的电子邮件只能传输 纯文本(ASCII 码),不支持发送图片、音频、视频或非英语字符(如中文)。这严重限制了电子邮件的用途。MIME 的出现,就是为了解决这些问题。

Sender
User Agent
MIME
Message
Transfer Agent
Receiver
User Agent
MIME
Message
Transfer Agent
非 ASCII 代码
7 位 ASCII 代码
非 ASCII 代码
7 位 ASCII 代码
7 位 ASCII 代码

MIME 主要包含以下三点 核心功能

  1. 支持非 ASCII 字符
    • 允许使用 UTF-8 等编码发送包含中文、法语等字符的邮件内容。
  2. 支持多媒体内容
    • 可以发送图像(如 JPEG、PNG)、音频、视频等多种格式的附件或内嵌内容。
  3. 支持多部分内容(multipart)
    • 一封邮件可以同时包含文本和附件,甚至不同格式的内容(例如纯文本和 HTML 格式的正文)。

5 - 万维网

本节的重点在于了解 HTTP 协议的特点,报文组成部分以及一些首部选项,可能在选择题中考察。

WWW

WWW,也称为万维网(World Wide Web),是一个信息系统,在这个系统中,文档和其他资源通过统一资源标识符(Uniform Resource Identifiers,或 URI,通常为 URL)进行标识和互相链接。用户可以使用网络浏览器访问万维网上的资源。

组成结构

  1. URL (统一资源定位符):每个网页或资源都有一个唯一的地址,称为 URL,它定义了资源的位置和如何访问它。
  2. HTTP/HTTPS (超文本传输协议/安全超文本传输协议):这是用于从服务器传输网页到浏览器的协议。
  3. HTML (超文本标记语言):大多数网页使用 HTML 编写,它是用于描述和呈现超文本的标准标记语言。

HTTP 协议

HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议。它是一个属于应用层的协议,常基于 TCP/IP 协议通信。HTTP 用于客户端和服务器之间的数据传输,特别是在万维网(WWW)中,用于传输网页(HTML 文件)以及与其关联的资源(如图片、音频、视频等)。

无状态

HTTP 本身不保持用户的状态信息,每个请求都是独立的,服务器无法识别是不是同一个用户发送的多个请求。这一点在现实中通常通过 Cookie 和 Session 技术来弥补。

组成部分

  1. 请求和响应:HTTP 通信通常包括客户端向服务器发送请求,然后服务器返回响应的过程。
  2. 方法:HTTP 定义了一组请求方法,用于表示对资源的不同操作:
    • GET:请求指定资源。
    • POST:提交数据以供处理。
    • PUT:更新指定资源。
    • DELETE:删除指定资源。
    • HEAD:与 GET 相似,但只请求资源的头部信息。
    • OPTIONS:获取可以应用于目标资源的通信选项。
    • PATCH:对资源进行部分修改。
    • 其他方法还包括 CONNECT, TRACE 等。
  3. 状态码:响应返回一个状态码,用于表示请求的结果,例如:
    • 200 OK:请求成功。
    • 404 Not Found:资源未找到。
    • 500 Internal Server Error:服务器内部错误。
    • 以及其他众多状态码,用于表示不同的响应状态。
  4. 头部字段:HTTP 请求和响应都包含头部信息,提供有关请求或响应的元数据,例如 Content-Type(内容类型)或 User-Agent(用户代理)。
    • 消息体:请求或响应的主体部分,通常包含要传输的数据。例如,POST 请求的数据或服务器返回的网页内容。

关键字段

以下首部字段可能在考试中被考察,需要了解一下:

长连接和短连接
open
close
短连接
open
close
open
close
open
长连接
close

长连接和短连接含义

HTTP 根据首部的 keepalive 选项是否被设置被分为长连接和短连接。

  • 长连接(持久连接,persistant connection)通过设置 keepalive 选项,可以在一个 TCP 连接中发送多个 HTTP 请求。
  • 短连接 (非持久连接,multiple connection)没有设置 keepalive 选项,那么每一次发送 HTTP 请求都必须单独建立一个 TCP 连接。

HTTP 不同版本中的 keepalive

  • HTTP/1.0 中,持久连接不是默认行为。要在 HTTP/1.0 中启用它,必须在请求头部添加 Connection: keep-alive
  • HTTP/1.1 中及之后,持久连接是默认行为。如果想关闭它,必须在请求或响应头部添加 Connection: close
流水线和非流水线
open
open
流水线
流水线
close
close
open
open
非流水线
非流水线
close
close

HTTP 流水线和非流水线含义

  • 流水线(HTTP Pipelining):HTTP 客户端在未等待前一个请求的响应的情况下,连续发送多个 HTTP 请求。
  • 非流水线(Non-pipelined):HTTP 客户端必须接收到上一个请求的响应,才能发送下一个请求。

HTTP 不同版本中的流水线支持

  • 在 HTTP/1.0 中,流水线 的功能并不支持。
  • 在 HTTP/1.1 中,引入了 HTTP 流水线 的支持,但由于使用中队头阻塞的问题,应用并不广泛。
  • 在 HTTP/2 中,进一步改进了请求处理机制,允许多个请求和响应在同一个连接中并行进行,解决了队头阻塞的问题。
注意

什么是队头阻塞(了解即可)

当多个请求被排成队列时,如果第一个请求由于某种原因(如延迟、丢包或慢速响应)未能及时处理,那么后续的所有请求都必须等待第一个请求的响应完成才能被处理。

在 HTTP/2.0 之前,你只有在完成上一个 HTTP 请求后,才能发送下一个请求。但是在 HTTP/2.0 中,你可以并发地发送多个 HTTP 请求,这些请求被并发地处理。

HTTP 协议是无状态的,这意味着每个请求都是独立的,服务器默认情况下无法知道两个请求是否来自同一客户端或用户。Cookie 的引入使得服务器能够跨多个请求“识别”和“记住”用户。

HTTP 服务器通过 Set-Cookie 首部字段来设置每一个客户端的 Cookie 值,相应的 HTTP 响应的部分内容如下所示:

HTTP/1.1 200 OK
Set-Cookie: sessionId=abc123; Expires=Wed, 21 Oct 2025 07:28:00 GMT; Path=/; Secure; HttpOnly

当浏览器接收到带有 Set-Cookie 字段的 HTTP 响应时,就会在存储该 Cookie 字段,并在下次向对应的服务器发送 HTTP 请求时自动将 Cookie 字段添加在 HTTP 首部,之后的 HTTP 请求的部分内容如下所示:

GET /dashboard HTTP/1.1
Cookie: sessionId=abc123

当 HTTP 服务器接收到带有 Cookie 的请求时,它就可以区分这个请求是来自于那个客户端的了。