计算机网络第六章:应用层详细学习总结
应用层是计算机网络体系结构的最高层,它直接面向用户,为用户提供特定的网络应用服务。本章主要探讨各种常见的应用层协议及其工作原理,理解它们如何支撑我们日常的网络活动。
1. 应用层体系结构
应用层协议定义了应用程序之间交换报文的格式和顺序,以及报文发送和接收时采取的动作。常见的应用层体系结构主要有两种:
1.1 客户/服务器 (Client/Server, C/S) 模式
- 特点 :
- 服务器是"永远在线"的主机,具有固定的IP地址和域名,为多个客户端提供服务。
- 客户端可以随时上线或下线,不与其他客户端直接通信,只与服务器通信。
- 服务器通常拥有强大的处理能力和存储资源。
- 优点:集中管理、安全性高、易于扩展。
- 缺点:服务器可能成为性能瓶颈或单点故障。
- 典型应用:Web服务 (HTTP)、电子邮件 (SMTP/POP3/IMAP)、文件传输 (FTP)。
1.2 对等 (Peer-to-Peer, P2P) 模式
- 特点 :
- 没有永远在线的服务器,应用程序在用户主机之间直接通信。
- 每个主机既可以是客户端,也可以是服务器,动态地提供和请求服务。
- 节点可能间歇性连接,IP地址可能动态变化。
- 优点:可伸缩性好(用户越多,服务能力越强)、健壮性高(无单点故障)、成本低。
- 缺点:难以管理、安全性挑战、服务质量难以保证。
- 典型应用:文件共享 (BitTorrent)、VoIP (Skype早期版本)。
- 混合P2P:结合C/S和P2P的优点,例如Napster使用中央服务器进行索引,但文件传输是P2P的。
2. 域名系统 DNS (Domain Name System)
DNS 是互联网的电话簿,它将人类可读的域名(如 www.example.com)翻译成机器可读的IP地址(如 192.0.2.1)。
2.1 域名空间结构
DNS 采用层次化的、分布式数据库结构:
- 根域名服务器 (Root DNS Servers):位于最高层,全球仅有少数几组,存储顶级域名服务器的地址。
- 顶级域名服务器 (Top-Level Domain, TLD DNS Servers) :负责
.com,.org,.net,.edu,.gov等通用顶级域名和国家代码顶级域名(如.cn,.jp)。 - 权威域名服务器 (Authoritative DNS Servers):负责特定组织或机构的域名解析,存储该组织所有主机的域名到IP地址的映射。
- 本地域名服务器 (Local DNS Servers):也称默认域名服务器,不属于DNS层次结构,但对客户端非常重要。它作为客户端与DNS层次结构之间的代理,缓存查询结果。
2.2 域名解析过程
当用户在浏览器中输入一个域名时,会发生以下解析过程:
- 用户主机:首先检查本地缓存,如果找到则直接返回IP地址。
- 本地域名服务器:如果本地缓存没有,用户主机将查询请求发送给配置的本地域名服务器。
- 本地域名服务器:检查自己的缓存,如果找到则返回IP地址。
- 本地域名服务器:如果缓存中没有,它会向DNS层次结构发起查询。
查询模式:
- 递归查询 (Recursive Query) :
- 客户端向本地域名服务器发送一个递归查询请求。
- 本地域名服务器必须负责完成整个解析过程,即它会向根域名服务器、TLD域名服务器、权威域名服务器逐级查询,直到获取到最终的IP地址,然后将结果返回给客户端。
- 优点:客户端负担小。
- 缺点:本地域名服务器负担重。
- 迭代查询 (Iterative Query) :
- 客户端向本地域名服务器发送一个迭代查询请求。
- 本地域名服务器向根域名服务器查询。
- 根域名服务器返回TLD域名服务器的地址给本地域名服务器。
- 本地域名服务器再向TLD域名服务器查询。
- TLD域名服务器返回权威域名服务器的地址给本地域名服务器。
- 本地域名服务器再向权威域名服务器查询。
- 权威域名服务器返回最终的IP地址给本地域名服务器。
- 本地域名服务器将IP地址返回给客户端。
- 优点:本地域名服务器负担轻。
- 缺点:客户端(或本地域名服务器作为客户端的代理)需要多次查询。
注意:通常,用户主机到本地域名服务器的查询是递归的,而本地域名服务器到其他DNS服务器的查询是迭代的。
2.3 DNS 记录类型
DNS 数据库中存储着资源记录 (Resource Record, RR),每条记录包含 (Name, Value, Type, TTL)。
- A 记录 (Address Record) :
Type = A,Value是域名对应的IP地址。用于将域名映射到IPv4地址。- 例:
(www.example.com, 192.0.2.1, A, 3600)
- 例:
- NS 记录 (Name Server Record) :
Type = NS,Value是负责该域名的权威域名服务器的域名。- 例:
(example.com, ns1.example.com, NS, 86400)
- 例:
- CNAME 记录 (Canonical Name Record) :
Type = CNAME,Value是一个别名对应的规范域名。用于将一个域名映射到另一个域名。- 例:
(ftp.example.com, server.example.com, CNAME, 3600)
- 例:
- MX 记录 (Mail eXchange Record) :
Type = MX,Value是负责接收该域名邮件的邮件服务器的域名。通常包含优先级。- 例:
(example.com, mail.example.com, MX, 3600)
- 例:
3. 万维网 WWW 与 HTTP
万维网 (World Wide Web) 是一个由相互链接的超文本文档组成的系统,通过互联网访问。HTTP (HyperText Transfer Protocol) 是万维网的核心协议。
3.1 HTTP 报文结构
HTTP 是无状态协议,客户端和服务器之间不保留过去请求/响应的任何信息。
-
HTTP 请求报文:
- 请求行 (Request Line) :
方法 URL 版本(如GET /index.html HTTP/1.1)- 方法 :
GET:请求获取指定资源。POST:向指定资源提交数据进行处理。HEAD:请求获取指定资源的响应头,不返回实体内容。PUT:上传文件,更新资源。DELETE:删除资源。
- 方法 :
- 请求头 (Header Lines) :提供额外信息 (如
Host: www.example.com,User-Agent,Accept-Language,Connection)。 - 空行:分隔请求头和请求体。
- 请求体 (Entity Body) :可选,用于
POST请求发送表单数据等。
- 请求行 (Request Line) :
-
HTTP 响应报文:
- 状态行 (Status Line) :
版本 状态码 状态短语(如HTTP/1.1 200 OK)- 状态码 :
200 OK:请求成功。301 Moved Permanently:永久重定向。302 Found:临时重定向。304 Not Modified:资源未修改,可使用缓存。400 Bad Request:客户端请求语法错误。401 Unauthorized:未授权。403 Forbidden:服务器拒绝请求。404 Not Found:请求资源不存在。500 Internal Server Error:服务器内部错误。503 Service Unavailable:服务器暂时无法处理请求。
- 状态码 :
- 响应头 (Header Lines) :提供额外信息 (如
Server,Last-Modified,Content-Length,Content-Type,Set-Cookie)。 - 空行:分隔响应头和响应体。
- 响应体 (Entity Body):服务器返回的实际内容 (如HTML文件、图片等)。
- 状态行 (Status Line) :
3.2 连接管理
HTTP/1.0 和 HTTP/1.1 在 TCP 连接管理上有所不同。
-
非持久连接 (Non-persistent Connection) - HTTP/1.0 默认:
- 每次请求/响应一对报文后,TCP 连接立即关闭。
- 如果一个网页包含多个对象(如HTML文件和多个图片),则每个对象都需要建立一个新的TCP连接,包括TCP三次握手和四次挥手。
- 开销大,效率低。
-
持久连接 (Persistent Connection) - HTTP/1.1 默认:
- TCP 连接在发送完一个响应后仍保持打开状态,后续的请求和响应可以通过同一个连接进行。
- 减少了TCP连接建立和关闭的开销。
- 非流水线 (Non-pipelined):客户端在收到前一个响应后才发送下一个请求。
- 流水线 (Pipelining):客户端可以在收到前一个响应之前,连续发送多个请求。服务器按顺序响应。显著提高了效率。
3.3 Cookie 机制与 Web 缓存 (Proxy)
-
Cookie 机制:
- 由于HTTP是无状态的,Cookie 提供了一种在客户端和服务器之间保持状态的机制。
- 工作原理 :
- 服务器在HTTP响应中通过
Set-Cookie头部向客户端发送Cookie。 - 客户端(浏览器)将Cookie存储起来。
- 客户端在后续对同一服务器的请求中,通过
Cookie头部将存储的Cookie发送回服务器。
- 服务器在HTTP响应中通过
- 用途:用户会话管理(登录状态)、个性化推荐、用户跟踪。
-
Web 缓存 (Web Cache / Proxy Server):
- 位于客户端和源服务器之间,存储最近请求的Web对象副本。
- 工作原理 :
- 客户端向Web缓存发送HTTP请求。
- 如果缓存中有所请求对象的副本且是新鲜的,缓存直接返回该对象给客户端。
- 如果缓存中没有或副本已过期,缓存作为客户端向源服务器发送请求,获取对象。
- 源服务器返回对象给缓存,缓存将其存储并转发给客户端。
- 优点 :
- 减少客户端请求时延:无需等待源服务器响应。
- 减少网络流量:特别是对远距离服务器的请求。
- 减轻源服务器负载。
- 条件GET (Conditional GET) :客户端或缓存可以使用
If-Modified-Since头部向服务器发送条件GET请求,询问对象自某个时间点后是否被修改。如果未修改,服务器返回304 Not Modified,客户端/缓存使用本地副本。
4. 电子邮件系统
电子邮件系统是互联网上最常用的应用之一,它允许用户发送和接收数字消息。
4.1 核心组件
- 用户代理 (User Agent, UA):也称邮件阅读器,是用户用来撰写、阅读、发送和接收邮件的客户端软件(如Outlook, Foxmail, Gmail网页界面)。
- 邮件服务器 (Mail Server) :
- 邮件传输代理 (Mail Transfer Agent, MTA):负责发送和转发邮件,通常运行 SMTP 协议。
- 邮件投递代理 (Mail Delivery Agent, MDA):负责将邮件从邮件服务器投递到用户邮箱,通常运行 POP3 或 IMAP 协议。
- 邮件服务器维护用户邮箱,存储传入邮件,并维护一个消息队列用于发送传出邮件。
4.2 协议辨析
-
SMTP (Simple Mail Transfer Protocol):
- 作用 :用于发送邮件(从用户代理到邮件服务器,以及邮件服务器之间)。
- 特性 :推 (Push) 协议,客户端将邮件"推"给服务器。
- 端口 :默认使用 TCP 25 端口。
- 工作过程:客户端与服务器建立TCP连接,通过一系列命令(HELO, MAIL FROM, RCPT TO, DATA, QUIT)进行交互,传输邮件内容。
-
POP3 (Post Office Protocol version 3):
- 作用 :用于用户代理从邮件服务器拉取 (Pull) 邮件。
- 特性 :拉 (Pull) 协议,客户端从服务器"拉"取邮件。
- 端口 :默认使用 TCP 110 端口。
- 模式:通常将邮件下载到本地后从服务器删除(可配置为保留副本)。
- 限制:不支持在服务器上管理邮件文件夹,功能相对简单。
-
IMAP (Internet Mail Access Protocol):
- 作用 :用于用户代理从邮件服务器拉取 (Pull) 邮件。
- 特性 :拉 (Pull) 协议,功能比POP3更强大。
- 端口 :默认使用 TCP 143 端口。
- 模式:允许用户在服务器上管理邮件(创建文件夹、移动邮件、搜索邮件),邮件通常保留在服务器上,用户可以只下载邮件头或部分内容。
- 优点:支持多设备同步、离线操作、更灵活的邮件管理。
4.3 MIME (Multipurpose Internet Mail Extensions)
- 作用:扩展了SMTP,使其能够支持非ASCII字符、多媒体附件(图片、音频、视频)、以及不同类型的文件。
- 原理 :通过在邮件头部添加
MIME-Version,Content-Type,Content-Transfer-Encoding等字段,描述邮件内容的类型和编码方式。
5. 文件传输 FTP (File Transfer Protocol)
FTP 是一个用于在客户端和服务器之间传输文件的应用层协议。
- 特点 :
- 带外控制 (Out-of-band Control):FTP 使用两个独立的TCP连接:一个用于控制信息,另一个用于数据传输。
- 控制连接 (Control Connection) :
- 端口 :默认使用 TCP 21 端口。
- 特性 :持久连接 ,用于传输命令(如
USER,PASS,LIST,RETR,STOR)和响应。
- 数据连接 (Data Connection) :
- 端口 :默认使用 TCP 20 端口(主动模式下)。
- 特性 :非持久连接,每次文件传输(或目录列表)都会建立一个新的数据连接,传输完成后即关闭。
- 工作模式 :
- 主动模式 (Active Mode) :客户端向服务器发送
PORT命令告知数据端口,服务器主动连接客户端的数据端口。- 控制连接:客户端随机端口 -> 服务器 21
- 数据连接:服务器 20 -> 客户端随机端口 (由
PORT命令指定) - 缺点:客户端防火墙可能阻止服务器主动连接客户端的随机端口。
- 被动模式 (Passive Mode) :客户端向服务器发送
PASV命令,服务器开启一个随机端口并告知客户端,客户端主动连接服务器的该随机端口。- 控制连接:客户端随机端口 -> 服务器 21
- 数据连接:客户端随机端口 -> 服务器随机端口 (由
PASV命令指定) - 优点:解决了客户端防火墙问题,更常用。
- 主动模式 (Active Mode) :客户端向服务器发送
重点突破
典型例题
例题 1:HTTP 请求时延计算
假设 RTT (往返时间) 为 100ms100ms100ms,文档传输时间忽略不计。计算在不同连接模式下,请求一个包含 1 个引用 HTML 和 8 个小图像的网页所需的总时间。
问题分析:
- 请求 HTML 文件需要建立 TCP 连接,然后发送请求并接收响应。
- HTML 文件下载完成后,浏览器解析 HTML,发现其中引用了 8 个图像。
- 然后浏览器需要请求这 8 个图像。
- 传输时间忽略不计意味着我们只计算 TCP 连接建立、请求发送和响应接收的 RTT 延迟。
解决方案:
-
非持久连接 (HTTP/1.0):
-
每个对象都需要建立一个新的 TCP 连接。
-
建立一个 TCP 连接需要 1 RTT (三次握手)。
-
发送 HTTP 请求并接收响应需要 1 RTT。
-
因此,每个对象需要 1 RTT (TCP 握手)+1 RTT (请求/响应)=2 RTT1 \text{ RTT (TCP 握手)} + 1 \text{ RTT (请求/响应)} = 2 \text{ RTT}1 RTT (TCP 握手)+1 RTT (请求/响应)=2 RTT。
-
HTML 文件:2×RTT2 \times RTT2×RTT
-
8 个图像:每个图像 2×RTT2 \times RTT2×RTT。如果浏览器串行请求,则总共 8×2×RTT8 \times 2 \times RTT8×2×RTT。
-
总时间 :2×RTT+8×(2×RTT)=18×RTT2 \times RTT + 8 \times (2 \times RTT) = 18 \times RTT2×RTT+8×(2×RTT)=18×RTT
-
计算 :18×100ms=1800ms=1.8s18 \times 100ms = 1800ms = 1.8s18×100ms=1800ms=1.8s
-
注 :实际浏览器通常会并行建立多个非持久连接(例如 5-6 个)来下载图像,以减少总时间。如果假设并行连接数为 NNN,则 8 个图像的下载时间为 ⌈8/N⌉×2×RTT\lceil 8/N \rceil \times 2 \times RTT⌈8/N⌉×2×RTT。例如,若 N=5N=5N=5,则图像下载时间为 ⌈8/5⌉×2×RTT=2×2×RTT=4×RTT\lceil 8/5 \rceil \times 2 \times RTT = 2 \times 2 \times RTT = 4 \times RTT⌈8/5⌉×2×RTT=2×2×RTT=4×RTT。总时间为 2×RTT+4×RTT=6×RTT=600ms2 \times RTT + 4 \times RTT = 6 \times RTT = 600ms2×RTT+4×RTT=6×RTT=600ms。此处为简化计算,我们假设串行请求。
-
-
持久连接非流水线 (HTTP/1.1):
- 只建立一次 TCP 连接,所有对象通过该连接传输。
- HTML 文件:需要 1 RTT (TCP 握手)+1 RTT (请求/响应)=2 RTT1 \text{ RTT (TCP 握手)} + 1 \text{ RTT (请求/响应)} = 2 \text{ RTT}1 RTT (TCP 握手)+1 RTT (请求/响应)=2 RTT。
- 8 个图像:由于连接已建立,每个图像只需 1 RTT (请求/响应)1 \text{ RTT (请求/响应)}1 RTT (请求/响应)。由于是非流水线,需要等待前一个响应后才能发送下一个请求。
- 总时间 :2×RTT+8×(1×RTT)=10×RTT2 \times RTT + 8 \times (1 \times RTT) = 10 \times RTT2×RTT+8×(1×RTT)=10×RTT
- 计算 :10×100ms=1000ms=1s10 \times 100ms = 1000ms = 1s10×100ms=1000ms=1s
-
持久连接流水线 (HTTP/1.1):
- 只建立一次 TCP 连接,所有对象通过该连接传输。
- HTML 文件:需要 1 RTT (TCP 握手)+1 RTT (请求/响应)=2 RTT1 \text{ RTT (TCP 握手)} + 1 \text{ RTT (请求/响应)} = 2 \text{ RTT}1 RTT (TCP 握手)+1 RTT (请求/响应)=2 RTT。
- 8 个图像:连接已建立,浏览器可以连续发送所有 8 个图像的请求,无需等待响应。服务器会按顺序响应。因此,所有 8 个图像的请求和响应总共只需要 1 RTT1 \text{ RTT}1 RTT。
- 总时间 :2×RTT+1×RTT=3×RTT2 \times RTT + 1 \times RTT = 3 \times RTT2×RTT+1×RTT=3×RTT
- 计算 :3×100ms=300ms=0.3s3 \times 100ms = 300ms = 0.3s3×100ms=300ms=0.3s
总结:
- 非持久连接:18×RTT=1.8s18 \times RTT = 1.8s18×RTT=1.8s
- 持久连接非流水线:10×RTT=1s10 \times RTT = 1s10×RTT=1s
- 持久连接流水线:3×RTT=0.3s3 \times RTT = 0.3s3×RTT=0.3s
例题 2:综合协议分析
当用户在浏览器输入 URL http://www.example.com/index.html 并回车,列出期间用到的所有主要协议(DNS, ARP, IP, TCP, HTTP)及其作用顺序。
解决方案:
-
DNS (Domain Name System):
- 作用 :将域名
www.example.com解析为对应的 IP 地址。 - 顺序 :用户输入 URL 后,浏览器首先检查本地 DNS 缓存。若无,则向本地域名服务器发起 DNS 查询(通常使用 UDP 53 端口),本地域名服务器可能进行递归或迭代查询,最终获取到
www.example.com的 IP 地址。
- 作用 :将域名
-
ARP (Address Resolution Protocol):
- 作用:将目标 IP 地址(可能是网关 IP 或目标服务器 IP)解析为对应的 MAC 地址。
- 顺序 :在获得
www.example.com的 IP 地址后,如果该 IP 地址不在本地局域网内,则需要将数据包发送到默认网关。此时,主机需要知道默认网关的 MAC 地址。如果本地 ARP 缓存中没有,则发送 ARP 请求广播,获取网关的 MAC 地址。如果目标 IP 在本地局域网内,则直接解析目标主机的 MAC 地址。
-
IP (Internet Protocol):
- 作用:负责数据包的路由和转发,确保数据包从源主机传输到目标主机。
- 顺序:在获取到目标 IP 地址和下一跳 MAC 地址后,数据包被封装成 IP 数据报,并通过数据链路层发送。IP 协议在整个传输路径中指导数据包的转发。
-
TCP (Transmission Control Protocol):
- 作用:提供可靠的、面向连接的、全双工的字节流服务。
- 顺序:在 IP 地址解析完成后,浏览器(客户端)与 Web 服务器(目标主机)之间建立 TCP 连接。这包括 TCP 三次握手过程,确保连接的可靠性。HTTP 报文将在建立好的 TCP 连接上传输。
-
HTTP (HyperText Transfer Protocol):
- 作用:应用层协议,用于客户端和服务器之间传输超文本。
- 顺序 :TCP 连接建立成功后,浏览器构造 HTTP 请求报文(如
GET /index.html HTTP/1.1),通过 TCP 连接发送给服务器。服务器接收请求,处理后构造 HTTP 响应报文,通过同一 TCP 连接返回给浏览器。浏览器接收响应,解析并渲染网页内容。
总结顺序 :
DNS -> ARP -> IP -> TCP -> HTTP
易错点分析
-
混淆"用户代理"发送邮件用 SMTP,而接收邮件用 POP3/IMAP。
- 错误理解:认为用户代理发送和接收邮件都使用同一种协议。
- 正确理解 :
- 发送邮件 :用户代理将邮件推 送到邮件服务器,使用 SMTP 协议(端口 25)。
- 接收邮件 :用户代理从邮件服务器拉取 邮件,使用 POP3 (端口 110) 或 IMAP (端口 143) 协议。
- 记忆技巧:SMTP 是 Simple Mail Transfer Protocol,强调"Transfer"(传输/发送);POP3 是 Post Office Protocol,像去邮局取信;IMAP 是 Internet Mail Access Protocol,强调"Access"(访问/管理)。
-
误以为 DNS 总是使用 UDP。
- 错误理解:DNS 查询和响应都使用 UDP。
- 正确理解 :
- DNS 查询和响应 :绝大多数情况下,客户端到本地域名服务器以及本地域名服务器到其他 DNS 服务器的查询都使用 UDP 53 端口,因为查询报文通常较小,UDP 的无连接特性提供了更快的响应速度。
- DNS 区域传送 (Zone Transfer) :当主域名服务器向辅助域名服务器同步区域数据时,由于数据量可能较大,需要保证可靠性,因此使用 TCP 53 端口。
-
FTP 主动模式与被动模式下数据端口的区别。
- 错误理解:FTP 的控制连接和数据连接端口是固定的,或者不清楚它们在主动/被动模式下的角色。
- 正确理解 :
- 控制连接 :始终由客户端发起,连接到服务器的 TCP 21 端口,用于命令传输,是持久连接。
- 数据连接 :用于实际文件传输,是非持久连接。
- 主动模式 (Active Mode) :客户端发送
PORT命令告知服务器自己的数据端口(一个随机端口),然后服务器主动连接客户端的该数据端口 ,使用服务器的 TCP 20 端口作为源端口。 - 被动模式 (Passive Mode) :客户端发送
PASV命令,服务器开启一个随机端口并告知客户端,然后客户端主动连接服务器的该随机端口。
- 主动模式 (Active Mode) :客户端发送
总结
应用层是用户与网络交互的接口,本章详细介绍了多种核心应用层协议,包括其体系结构、工作原理、报文格式、连接管理和关键特性。理解这些协议对于掌握互联网的工作方式至关重要。特别是 DNS 的解析过程、HTTP 的连接管理、邮件协议的区分以及 FTP 的带外控制,都是学习的重点和难点。通过典型例题的分析,可以加深对协议工作机制的理解,并通过易错点分析避免常见的概念混淆。