应用层
6.1 应用层模型
应用层是计算机网络体系结构的最高层,直接为用户的应用程序提供网络服务。
两种主要模型
| 模型 | 描述 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|---|
| C/S(客户端/服务器) | 服务器固定提供服务和资源,客户端请求服务 | 集中管理、安全可控 | 服务器负担重、单点故障 | Web、FTP、Email |
| P2P(对等网络) | 每个节点既是客户端也是服务器 | 可扩展性好、去中心化 | 管理困难、安全性差 | BT下载、电驴 |
C/S模式特点
- 服务器:7×24小时运行,有固定IP地址
- 客户端:主动连接服务器,不需要固定IP
- 服务器是瓶颈,用户数增加时性能下降
P2P模式特点
- 每个对等方都可以自由加入或离开
- 文件分布在各个对等方上,下载时从多个节点同时获取
- 可扩展性极好(节点越多,资源越多,下载越快)
- 典型例子:BitTorrent、迅雷、电驴
6.2 DNS(域名系统)
什么是DNS? DNS将人类易记的域名(如 www.example.com)转换为机器使用的IP地址(如 93.184.216.34)。可以理解为互联网的"电话簿"。
域名空间(层次树状结构)
根 (.)
├── 顶级域 (TLD)
│ ├── 通用顶级域 (gTLD):.com, .org, .net, .edu, .gov
│ ├── 国家顶级域 (ccTLD):.cn, .jp, .uk, .us
│ └── 新顶级域 (new gTLD):.xyz, .top, .club
├── 二级域:example.com, google.com
└── 子域:www.example.com, mail.example.com
FQDN(完全限定域名):从根到叶子的完整域名,如 www.example.com.(末尾有一个点表示根)
域名服务器
| 类型 | 作用 |
|---|---|
| 根域名服务器 | 知道所有顶级域名服务器的IP地址(全球13套,镜像很多) |
| 顶级域名服务器 | 负责管理某个顶级域(如.com、.cn) |
| 权限域名服务器 | 负责某个具体域名的解析(如example.com的DNS记录) |
| 本地域名服务器 | 用户计算机配置的DNS服务器(如8.8.8.8、114.114.114.114) |
DNS解析过程(两种查询方式)
递归查询
- 本地域名服务器向根服务器查询,根服务器向顶级域服务器查询...最终结果逐层返回
- 特点:对用户来说,只需一次查询就得到结果
- 负担较重(根服务器压力大)
迭代查询
- 本地域名服务器依次查询根→顶级→权限域名服务器
- 每个服务器返回"下一个该查谁"
- 特点:根服务器负担轻,但本地域名服务器负担重
实际解析过程(常用:递归+迭代混合)
客户端 →→→ 本地域名服务器(递归查询)
↓
↓ (迭代查询)
↓→→→ 根域名服务器 → 返回.com服务器地址
↓→→→ .com顶级域名服务器 → 返回example.com服务器地址
↓→→→ example.com权限服务器 → 返回IP地址
↓
客户端 ←←← 返回IP地址
DNS缓存
- DNS服务器和客户端都会缓存查询结果
- 缓存有TTL(生存时间),过期后自动删除
- 减少查询时间,减轻根服务器负担
DNS记录类型
| 类型 | 含义 | 示例 |
|---|---|---|
| A | 域名→IPv4地址 | www.example.com → 93.184.216.34 |
| AAAA | 域名→IPv6地址 | www.example.com → 2001:db8::1 |
| CNAME | 别名→规范域名 | www → example.com |
| MX | 邮件交换记录 | @example.com → mail.example.com |
| NS | 域名服务器记录 | example.com → ns1.example.com |
💡 记忆技巧:A=Address(IPv4),AAAA=四倍A(IPv6),CNAME=Canonical Name(规范名),MX=Mail eXchange(邮件交换)
6.3 FTP(文件传输协议)
FTP的特点
- 提供不同主机间文件传输的功能
- 使用C/S模型
- 使用TCP保证可靠传输
控制连接和数据连接
FTP使用两个连接来传输文件:
| 连接类型 | 用途 | 服务器端口 |
|---|---|---|
| 控制连接 | 传输控制命令(登录、文件操作等) | 21 |
| 数据连接 | 传输文件数据 | 20(主动模式) |
整个过程保持控制连接一直打开,传输每个文件时建立/关闭数据连接。
两种工作模式
主动模式(PORT模式)
- 客户端在控制连接上发送PORT命令,告诉服务器自己的数据端口
- 服务器从端口20主动连接客户端的指定端口
- 问题:客户端在防火墙后面时,服务器可能无法连接客户端
被动模式(PASV模式)
- 客户端发送PASV命令
- 服务器打开一个随机端口(>1023),告诉客户端
- 客户端主动连接服务器的这个端口
- 解决了防火墙问题,更常用
6.4 电子邮件系统
电子邮件系统的组成
| 组件 | 作用 |
|---|---|
| 用户代理(UA) | 邮件客户端(Outlook、Foxmail、网页邮箱) |
| 邮件服务器 | 收发和处理邮件 |
| 邮件协议 | 发送和接收使用的协议 |
电子邮件协议
| 协议 | 用途 | 端口 | 说明 |
|---|---|---|---|
| SMTP | 发送邮件(推) | 25 | 只能传输ASCII文本,不支持附件 |
| MIME | 扩展邮件格式 | - | 在SMTP基础上支持多媒体、附件 |
| POP3 | 接收邮件(拉) | 110 | 下载后删除服务器上的邮件(默认) |
| IMAP | 接收邮件(拉) | 143 | 邮件保留在服务器上,支持文件夹管理 |
发送和接收过程
发件人 → UA → SMTP → 发件方邮件服务器 → SMTP → 收件方邮件服务器 → POP3/IMAP → UA → 收件人
SMTP vs POP3 vs IMAP
| 特性 | SMTP | POP3 | IMAP |
|---|---|---|---|
| 方向 | 发送(推) | 接收(拉) | 接收(拉) |
| 服务器操作 | 发送到服务器 | 下载并(可选)删除 | 服务器保留 |
| 多设备 | 不涉及 | 不方便 | 方便(服务器同步) |
| 端口 | 25/465(SSL) | 110/995(SSL) | 143/993(SSL) |
6.5 HTTP协议(超文本传输协议——重点!)
什么是HTTP? HTTP是万维网(WWW)的核心协议,定义了浏览器(客户端)和Web服务器之间的通信规则。
URL(统一资源定位符)
格式:http://<主机>:<端口>/<路径>?<查询参数>#<片段>
例如:http://www.example.com:80/index.html?id=1#section
HTTP1.0 vs HTTP1.1 vs HTTP2.0 vs HTTP3.0
| 版本 | 连接方式 | 特点 |
|---|---|---|
| HTTP 1.0 | 非持久连接 | 每次请求都建立新TCP连接,效率低 |
| HTTP 1.1 | 持久连接(默认) | 支持管道化(pipelining),一次连接多次请求 |
| HTTP 2.0 | 多路复用 | 二进制分帧、头部压缩、服务器推送 |
| HTTP 3.0 | QUIC(基于UDP) | 0-RTT连接、更快的连接建立、更好的移动性 |
HTTP报文格式
请求报文
请求行 方法 URL 版本 → GET /index.html HTTP/1.1
首部行 Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
Cookie: sessionId=abc123
空行 (必须)
实体主体 (GET请求通常没有)
响应报文
状态行 版本 状态码 短语 → HTTP/1.1 200 OK
首部行 Content-Type: text/html
Content-Length: 1024
Set-Cookie: userId=xyz
空行 (必须)
实体主体 <html>...</html>
HTTP方法
| 方法 | 含义 | 是否安全 | 是否幂等 |
|---|---|---|---|
| GET | 请求资源 | 安全 | 幂等 |
| HEAD | 只获取首部 | 安全 | 幂等 |
| POST | 提交数据 | 不安全 | 不幂等 |
| PUT | 上传文件 | 不安全 | 幂等 |
| DELETE | 删除资源 | 不安全 | 幂等 |
| OPTIONS | 查询支持的方法 | 安全 | 幂等 |
- 安全:不改变服务器状态
- 幂等:多次执行结果相同
HTTP状态码(重要!)
| 类别 | 含义 | 常见状态码 |
|---|---|---|
| 1xx | 信息性 | 100 Continue(继续发送) |
| 2xx | 成功 | 200 OK(请求成功) |
| 3xx | 重定向 | 301 永久重定向、302 临时重定向、304 未修改(缓存有效) |
| 4xx | 客户端错误 | 400 错误请求、401 未授权、403 禁止、404 未找到 |
| 5xx | 服务器错误 | 500 内部服务器错误、502 网关错误、503 服务不可用、504 网关超时 |
💡 记忆技巧:
- 1xx:消息("收到了,继续")
- 2xx:成功("OK!")
- 3xx:重定向("去那里")
- 4xx:你的问题("你搞错了")
- 5xx:我的问题("服务器炸了")
具体记忆:200=成功,301=永别了(永久重定向),302=暂时的(临时重定向),304=没变(用缓存),403=禁止进入,404=找不到了,500=坏了
Cookie和Session
Cookie
- 存储在客户端浏览器的小文本文件
- 服务器通过Set-Cookie首部设置Cookie
- 浏览器每次请求自动携带Cookie
- 用途:保持登录状态、记录用户偏好、跟踪用户行为
Session
- 存储在服务器端的用户会话数据
- 通常用Cookie传递Session ID来关联用户
- 比Cookie更安全(数据在服务器端)
Cookie vs Session
| 特性 | Cookie | Session |
|---|---|---|
| 存储位置 | 客户端 | 服务器 |
| 容量 | 4KB左右 | 理论上无限制 |
| 安全 | 不安全(可被修改) | 安全 |
| 生命周期 | 可设置过期时间 | 通常会话结束即销毁 |
典型例题
例1:用户在浏览器输入 www.example.com 并回车,到页面完全显示,经历了哪些步骤?
解:
- DNS解析:浏览器向DNS服务器查询www.example.com的IP地址
- 先查浏览器缓存 → 操作系统缓存 → 本地DNS服务器
- 本地DNS服务器递归/迭代查询,最终得到IP地址
- TCP三次握手:浏览器与Web服务器的80端口建立TCP连接
- 发送HTTP请求:浏览器发送GET / HTTP/1.1请求报文
- 服务器处理:服务器查找index.html文件
- 返回HTTP响应:服务器返回200 OK,包含HTML内容
- 客户端解析:浏览器解析HTML、请求CSS/JS/图片等资源(每个资源可能需要新的TCP连接或复用连接)
- 页面渲染:浏览器将解析后的HTML渲染显示
6.6 DHCP协议(回顾)
功能:自动分配IP地址和其他网络配置信息。
DORA四步过程
| 步骤 | 报文 | 发送方式 | 说明 |
|---|---|---|---|
| Discover | DHCP发现 | 广播 | 寻找DHCP服务器 |
| Offer | DHCP提供 | 广播 | 服务器提供IP地址 |
| Request | DHCP请求 | 广播 | 客户端确认使用该IP |
| Ack | DHCP确认 | 广播 | 服务器确认分配 |
⚠️ 易错点:
- DHCP报文使用UDP传输(不是TCP)
- 前两步使用广播的原因是客户端还没有IP地址
- 第3步也要广播,一是通知可能存在的多个DHCP服务器中选定了哪一个,二是通知其他主机
6.7 其他应用层协议
Telnet(远程登录)
- 端口23
- 基于TCP
- 明文传输(不安全)
- 现在已经很少使用,被SSH取代
SSH(安全外壳协议)
- 端口22
- 基于TCP
- 加密传输(安全)
- 取代了Telnet
SNMP(简单网络管理协议)
- 用于网络设备的管理和监控
- 基于UDP(端口161/162)
- 管理站和代理(Agent)模型
6.8 应用层协议总结
| 协议 | 端口 | 传输层 | 用途 |
|---|---|---|---|
| HTTP | 80 | TCP | 万维网访问 |
| HTTPS | 443 | TCP | 加密Web访问 |
| FTP | 21/20 | TCP | 文件传输 |
| SMTP | 25 | TCP | 邮件发送 |
| POP3 | 110 | TCP | 邮件接收 |
| IMAP | 143 | TCP | 邮件接收(增强) |
| DNS | 53 | UDP/TCP | 域名解析 |
| DHCP | 67/68 | UDP | IP自动配置 |
| SSH | 22 | TCP | 安全远程登录 |
| Telnet | 23 | TCP | 远程登录(不安全) |
| SNMP | 161/162 | UDP | 网络管理 |
📌 408考点提示:应用层考题通常与其他层结合。
- DNS解析过程(递归/迭代)——选择题常考
- HTTP报文格式和状态码含义
- Cookie和Session的区别
- 电子邮件协议的对比
- FTP主动/被动模式的区别
各种Web技术对比
HTTP1.0中的非持久连接
- 每次请求都要建立TCP连接
- 一个页面有多个资源时,需要多次建立连接
- 效率低,每个连接只能处理一个请求-响应
HTTP1.1中的持久连接
- 默认Keep-Alive
- 一次连接可以处理多个请求-响应
- 支持管道化(但实际应用中较少使用,因为队头阻塞问题)
HTTP2.0的改进
- 多路复用:一个TCP连接上同时传输多个请求
- 二进制分帧:将报文拆分为更小的帧,交错传输
- 头部压缩:使用HPACK算法压缩首部,减少开销
- 服务器推送:服务器可以主动推送客户端需要的资源
HTTP3.0(基于QUIC)
- 基于UDP而不是TCP
- 解决了TCP的队头阻塞问题
- 0-RTT连接建立(之前连接过的服务器可以跳过握手)
- 更好的移动性(连接迁移——IP变化时连接不中断)
⚠️ 易错点:
- 混淆HTTP的各个版本——1.0(非持久)、1.1(持久)、2.0(多路复用)、3.0(QUIC/UDP)
- 混淆邮件协议——SMTP发送、POP3/IMAP接收
- 混淆DNS查询方式——递归(查一次得结果)vs 迭代(多次询问)