应用层

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 并回车,到页面完全显示,经历了哪些步骤?

解:

  1. DNS解析:浏览器向DNS服务器查询www.example.com的IP地址
    • 先查浏览器缓存 → 操作系统缓存 → 本地DNS服务器
    • 本地DNS服务器递归/迭代查询,最终得到IP地址
  2. TCP三次握手:浏览器与Web服务器的80端口建立TCP连接
  3. 发送HTTP请求:浏览器发送GET / HTTP/1.1请求报文
  4. 服务器处理:服务器查找index.html文件
  5. 返回HTTP响应:服务器返回200 OK,包含HTML内容
  6. 客户端解析:浏览器解析HTML、请求CSS/JS/图片等资源(每个资源可能需要新的TCP连接或复用连接)
  7. 页面渲染:浏览器将解析后的HTML渲染显示

6.6 DHCP协议(回顾)

功能:自动分配IP地址和其他网络配置信息。

DORA四步过程

步骤 报文 发送方式 说明
Discover DHCP发现 广播 寻找DHCP服务器
Offer DHCP提供 广播 服务器提供IP地址
Request DHCP请求 广播 客户端确认使用该IP
Ack DHCP确认 广播 服务器确认分配

⚠️ 易错点:

  1. DHCP报文使用UDP传输(不是TCP)
  2. 前两步使用广播的原因是客户端还没有IP地址
  3. 第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考点提示:应用层考题通常与其他层结合。

  1. DNS解析过程(递归/迭代)——选择题常考
  2. HTTP报文格式和状态码含义
  3. Cookie和Session的区别
  4. 电子邮件协议的对比
  5. FTP主动/被动模式的区别

各种Web技术对比

HTTP1.0中的非持久连接

  • 每次请求都要建立TCP连接
  • 一个页面有多个资源时,需要多次建立连接
  • 效率低,每个连接只能处理一个请求-响应

HTTP1.1中的持久连接

  • 默认Keep-Alive
  • 一次连接可以处理多个请求-响应
  • 支持管道化(但实际应用中较少使用,因为队头阻塞问题)

HTTP2.0的改进

  • 多路复用:一个TCP连接上同时传输多个请求
  • 二进制分帧:将报文拆分为更小的帧,交错传输
  • 头部压缩:使用HPACK算法压缩首部,减少开销
  • 服务器推送:服务器可以主动推送客户端需要的资源

HTTP3.0(基于QUIC)

  • 基于UDP而不是TCP
  • 解决了TCP的队头阻塞问题
  • 0-RTT连接建立(之前连接过的服务器可以跳过握手)
  • 更好的移动性(连接迁移——IP变化时连接不中断)

⚠️ 易错点:

  1. 混淆HTTP的各个版本——1.0(非持久)、1.1(持久)、2.0(多路复用)、3.0(QUIC/UDP)
  2. 混淆邮件协议——SMTP发送、POP3/IMAP接收
  3. 混淆DNS查询方式——递归(查一次得结果)vs 迭代(多次询问)