这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
应用层
可能会在选择题中考察,主要涉及到一些应用层协议的基本概念。
学习思维导图:
# 应用层
## 网络应用模型
- C/S模型
- P2P模型
## DNS系统
- 层次域名空间
- 域名服务器
- 域名解析过程
## FTP
- FTP协议的工作原理
- 控制连接和数据连接
## 电子邮件
- 电子邮件系统的组成结构
- 电子邮件格式和MIME
- SMTP协议与POP3协议
## WWW
- 概念和组成结构
- HTTP协议
1 - 网络应用模型
了解 CS 模型和 P2P 模型的概念,可能在选择题中考察。
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 的可扩展性和效率。
域名服务器
- 根域名服务器 (Root Name Servers):
- 这些服务器位于 DNS 解析的最顶端。它们不直接回答关于哪个域名映射到哪个 IP 地址的查询,而是告诉查询者下一步应该询问哪个顶级域名 (TLD) 服务器。
- 根服务器的数量是有限的,并且它们的位置在全球都是已知的。
- 顶级域名服务器 (Top-Level Domain Name Servers, TLD Name Servers):
- 这些服务器负责特定的顶级域名(如 .com, .org, .net 等)。它们为下一级的域名(如 example.com)提供有关权威名称服务器的信息。
- 权威域名服务器 (Authoritative Name Servers):
- 这些服务器为特定的域名(如 example.com)提供详细的 DNS 记录信息(例如 A 记录、MX 记录等)。只有权威服务器才能为其负责的域名提供这些信息。
- 大多数组织拥有权威 DNS 服务器来为他们的域名提供解析服务。
- 本地域名服务器 (Local Name Server)
- 是在本地网络环境中运行的 DNS 服务器,它为该网络中的设备提供域名解析服务。
- 每个 ISP 或一所大学都可以有一个本地域名服务器。
域名解析过程
域名解析分为 递归查询 和 迭代查询 两种。
递归查询
- 客户端向递归服务器发送一个请求,比如解析
www.example.com
。 - 如果递归服务器没有缓存结果,它会从根服务器开始,逐级查询:
- 首先查询根域名服务器(Root Server),获取顶级域(TLD)的服务器地址。
- 再查询 TLD 服务器(比如
.com
),获取权威服务器的地址。 - 然后查询权威服务器,最终获取目标域名的 IP 地址。
- 递归服务器将最终的 IP 地址返回给客户端。
迭代查询
- 客户端向本地 DNS 服务器(或根服务器)发送查询请求,比如解析
www.example.com
。 - 根服务器返回
.com
顶级域的 DNS 服务器地址。 - 客户端再向
.com
顶级域 DNS 服务器发送查询请求。 .com
顶级域返回 example.com
的权威服务器地址。- 客户端向
example.com
的权威服务器发送查询请求,获取最终的 IP 地址。
DNS 递归查询 和 迭代查询的不同点如下表所示:
特点 | 递归查询 | 迭代查询 |
---|
查询责任 | DNS 服务器负责查询所有结果 | 客户端逐级查询 |
查询复杂度 | 客户端简单,只需发起一次请求 | 客户端复杂,需要多次查询 |
使用场景 | 用户设备、本地 DNS 服务器 | DNS 服务器之间的交互 |
性能 | 服务器负担较大 | 服务器负担较小 |
DNS 缓存
无论是浏览器、操作系统,还是本地的递归 DNS 服务器,在接收到域名解析结果之后,都会将其暂时保存在本地缓存中。这样,如果同一个域名在短时间内被多次请求,就可以直接从缓存中获取结果,而不需要再次向外部服务器发送查询请求。
DNS 记录中包含一个名为 TTL(Time to Live)的字段,用于指定这条记录可以在缓存中保存多久。比如 TTL 为 3600 表示记录在缓存中可保留 3600 秒(即一小时)。在这段时间内,只要有查询,就可以直接使用缓存的结果。当 TTL 到期后,缓存记录会被丢弃,下一次查询将重新走完整的解析流程。
3 - FTP
了解 FTP 的工作原理和两种连接方式,可能在选择题中考察。
工作原理
- 建立连接:
- FTP 通常使用 TCP 作为传输层协议。客户端和服务器之间首先建立一个 TCP 连接。FTP 默认使用两个端口,一个用于控制连接(命令连接,通常是端口 21),另一个用于数据传输连接。
- 身份验证:
- 一旦建立了控制连接,客户端需要提供用户名和密码以进行身份验证。有些 FTP 服务器还支持匿名 FTP,允许用户使用一个通用的用户名(通常是"anonymous")和电子邮件地址作为密码进行访问。
- 命令与响应:
- 控制连接用于传输 FTP 命令和服务器的响应。客户端可以向服务器发送各种 FTP 命令,如上传文件、下载文件、列出目录内容等。服务器将对每个命令响应一个状态码,指示命令执行的结果(例如,成功、失败等)。
- 数据连接:
- 当需要传输文件或目录列表时,FTP 使用数据连接来进行实际的数据传输。数据连接可以以两种方式之一建立:
- 主动模式(Active Mode):客户端打开一个本地端口,并通知服务器连接到该端口以进行数据传输。
- 被动模式(Passive Mode):服务器打开一个本地端口,并通知客户端连接到该端口以进行数据传输。
- 数据连接用于传输文件的内容或目录列表等信息。
- 文件传输:
- 一旦建立了数据连接,文件传输开始。客户端可以向服务器上传文件(将本地文件发送到服务器)或下载文件(从服务器获取文件)。
- 文件传输可以在 ASCII 模式和二进制模式之间切换。ASCII 模式适用于文本文件,而二进制模式适用于二进制文件(如图像、音频等)。
- 关闭连接:
- 一旦文件传输完成或用户完成 FTP 会话,客户端可以发送 QUIT 命令以终止 FTP 连接。服务器会响应,并关闭连接。
控制连接和数据连接
- 控制连接(Control Connection):
- 控制连接是 FTP 会话的首要连接,通常使用 TCP 的 端口 21。
- 控制连接用于传输 FTP 命令和服务器的响应,用来 控制 FTP 会话的行为。客户端通过控制连接向服务器发送各种 FTP 命令,如登录、列出文件目录、切换工作目录等。
- 服务器通过控制连接发送状态码和响应消息,以指示每个 FTP 命令的执行结果(例如,成功、失败等)。
- 控制连接始终保持打开状态(持久连接),直到用户完成 FTP 会话,或者用户发送 QUIT 命令以终止连接。
- 数据连接(Data Connection):
- 数据连接用于实际的文件传输,以及在某些情况下,传输文件的目录列表信息。数据连接通常使用不同的端口,其端口号由控制连接中的 FTP 命令指定。
- 有两种主要的数据连接模式:
- 主动模式(Active Mode):在主动模式下,客户端在一个本地端口打开,并通过控制连接告知服务器连接到该端口以进行数据传输。服务器主动连接到客户端的本地端口。
- 被动模式(Passive Mode):在被动模式下,服务器在一个本地端口打开,并通过控制连接告知客户端连接到该端口以进行数据传输。客户端主动连接到服务器的本地端口。
- 数据连接用于上传文件(将文件从客户端发送到服务器)和下载文件(从服务器获取文件)。
4 - 电子邮件
了解 SMTP 和 POP3 协议,可能在选择题中考察。
电子邮件系统
电子邮件系统由 用户代理、邮件服务器 以及 电子邮件协议 这三个核心组成部分协同工作,确保邮件的发送、接收和存储。
用户代理
用户代理(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 的出现,就是为了解决这些问题。
MIME 主要包含以下三点 核心功能:
- 支持非 ASCII 字符
- 允许使用 UTF-8 等编码发送包含中文、法语等字符的邮件内容。
- 支持多媒体内容
- 可以发送图像(如 JPEG、PNG)、音频、视频等多种格式的附件或内嵌内容。
- 支持多部分内容(multipart)
- 一封邮件可以同时包含文本和附件,甚至不同格式的内容(例如纯文本和 HTML 格式的正文)。
5 - 万维网
本节的重点在于了解 HTTP 协议的特点,报文组成部分以及一些首部选项,可能在选择题中考察。
WWW
WWW,也称为万维网(World Wide Web),是一个信息系统,在这个系统中,文档和其他资源通过统一资源标识符(Uniform Resource Identifiers,或 URI,通常为 URL)进行标识和互相链接。用户可以使用网络浏览器访问万维网上的资源。
组成结构
- URL (统一资源定位符):每个网页或资源都有一个唯一的地址,称为 URL,它定义了资源的位置和如何访问它。
- HTTP/HTTPS (超文本传输协议/安全超文本传输协议):这是用于从服务器传输网页到浏览器的协议。
- HTML (超文本标记语言):大多数网页使用 HTML 编写,它是用于描述和呈现超文本的标准标记语言。
HTTP 协议
HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议。它是一个属于应用层的协议,常基于 TCP/IP 协议通信。HTTP 用于客户端和服务器之间的数据传输,特别是在万维网(WWW)中,用于传输网页(HTML 文件)以及与其关联的资源(如图片、音频、视频等)。
无状态
HTTP 本身不保持用户的状态信息,每个请求都是独立的,服务器无法识别是不是同一个用户发送的多个请求。这一点在现实中通常通过 Cookie 和 Session 技术来弥补。
组成部分
- 请求和响应:HTTP 通信通常包括客户端向服务器发送请求,然后服务器返回响应的过程。
- 方法:HTTP 定义了一组请求方法,用于表示对资源的不同操作:
- GET:请求指定资源。
- POST:提交数据以供处理。
- PUT:更新指定资源。
- DELETE:删除指定资源。
- HEAD:与 GET 相似,但只请求资源的头部信息。
- OPTIONS:获取可以应用于目标资源的通信选项。
- PATCH:对资源进行部分修改。
- 其他方法还包括 CONNECT, TRACE 等。
- 状态码:响应返回一个状态码,用于表示请求的结果,例如:
- 200 OK:请求成功。
- 404 Not Found:资源未找到。
- 500 Internal Server Error:服务器内部错误。
- 以及其他众多状态码,用于表示不同的响应状态。
- 头部字段:HTTP 请求和响应都包含头部信息,提供有关请求或响应的元数据,例如 Content-Type(内容类型)或 User-Agent(用户代理)。
- 消息体:请求或响应的主体部分,通常包含要传输的数据。例如,POST 请求的数据或服务器返回的网页内容。
关键字段
以下首部字段可能在考试中被考察,需要了解一下:
长连接和短连接
长连接和短连接含义
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
。
流水线和非流水线
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 请求,这些请求被并发地处理。
cookie
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 的请求时,它就可以区分这个请求是来自于那个客户端的了。