计算机网络笔记 八.应用层
网络的访问模式:
- 客户端/服务器 (Client/Server) 模式: 系统使用了客户和服务器双方的资源和计算能力来执行一个特定的任务, 前端 (客户)+后端 (服务器).
- 对等 (Peer To Peer, P2P) 模式: 用户和资源处于对等状态, 采用去中心化架构, 每个节点既可以充当服务器为他人服务, 也可以充当客户端享受他人提供的服务.
域名系统 (DNS)#
DNS: Domain Name System 负责域名的维护和管理, 用户的绝大部分网络服务访问都需要 DNS.
引入域名的主要原因:
- 提升可读性和易用性
- 实现服务地址与网络地址的解耦
DNS 提供基于层次化设计的域名解析服务, 主要用于解决可扩展性问题.
问题:
- 域名数量庞大, 维护开销大, 容易成为性能瓶颈
- 名字管理困难, 难以避免重名冲突
解决方案: 名字层次化, 管理分布化.
层次化名字空间#
顶级域, 次级域 (二级域), 三级域, ...
感觉没啥好说的.
分布式域名管理#
DNS 采用分布式的域名管理, 以域为单位, 在网络中分布多个服务器对域名进行管理, 这些服务器也被称为名字服务器.
某个域如果设置了名字服务器, 则该服务器负责此域下子域的域名管理 (有可能包括子域下层的域) .
DNS 实现: 采用客户/服务器通信模式, 客户端通过解析器 (resolver) 向名字服务器发送查询请求.
DNS 解析时使用 UDP 协议, 端口号为 53 号.

DNS 名字空间被划分为一些不重叠的区域 (Zone), 每个区域的信息保存在该区域对应的名字服务器上, 该服务器也被称为所在区域的授权名字服务器.
Internet 允许各个组织根据具体情况将本组织内的域划分为若干个区域 (zone), 并在各区域中设置相应的授权名字服务器.

根名字服务器: 保存了所有顶级域名字服务器的 IP 地址. 为确保可靠性和响应性能, 每个根名字服务器在全球多地部署.
资源记录#
Resource Record, 名字服务器以资源记录的形式来维护本区域内的域名相关信息.
当解析器给名字服务器一个域名, 取回的是一个与该域名相对应的资源记录, DNS 系统的实际功能就是把域名映射到一条记录上.
资源记录包括 5 个字段: Domain_name, Time_to_live, Type , Class, Value
- Time_to_live: 生存时间, 例如, 时间较长的有一天 (86400 秒), 短的有一分钟 (60 秒)
- Type: 指出记录的类型
- Class: 对 Internet, 它总是 IN
- Value: 可以是数字, 域名或 ASCII 字符, 其语义基于记录类型
| 类型 (Type) | 含义 (Meaning) | 值 (Value) |
|---|---|---|
| SOA | 起始授权记录 | 本区域的参数, 如主服务器, 序列号, 刷新间隔等 |
| A | 主机 IPv4 地址 | IPv4 地址 (例如: 192.0.2.1) |
| MX | 邮件交换记录 | 优先级, 负责接收邮件的域名 |
| NS | 域名服务器记录 | 为本域提供权威解析的服务器的域名 |
| CNAME | 规范名称 (别名) | 指向另一个域名 (规范名称) |
| PTR | 指针记录 | 用于反向 DNS 查找, 将 IP 地址映射到域名 |
| HINFO | 主机信息 | 主机的 CPU 类型和操作系统 (ASCII 文本) |
| TXT | 文本记录 | 任意文本信息, 常用于验证, SPF, DMARC 等 |
资源记录的类型:
- 权威记录 Authoritative Record, 来自管理该记录的授权名字服务器, 因此总是正确的. 例如 eeis.ustc.edu.cn 在 ustc.edu.cn 域所对应的名字服务器所管辖的范围内, 因此该名字服务器返回的关于 eeis.ustc.edu.cn 的记录为权威记录.
- 缓存记录 Cached Record, 名字服务器缓存来自其它名字服务器的记录, 这些有效期由 TTL 域指定, 当 TTL 过期时, 该记录被删除.

DNS 查询过程#
当用户要访问 web 服务时, 在浏览器中键入 web 服务器的域名, 主机上的域名解析器先查询本机上的 cache 以及 hosts 文件, 如果没有对应表项, 则向名字服务器请求域名服务.
查询类型:
- 迭代查询(iterative query, 常用): 本地名字服务器如果没有域名对应的记录, 就向更高层次的名字服务器请求, 被请求的名字服务器如果也没有该域名对应的记录就会返回一个可供查询的名字服务器地址.
- 递归查询(recursive query, 不常用): 被请求的名字服务器如果没有域名所对应的记录, 它就会向其它域名服务器查询, 并沿着查询的路径逐个返回记录.
例: 查询 if.ee.ustc.edu 所对应的资源记录.
迭代查询:

递归查询:

WWW 万维网 (HTTP)#
万维网 (World Wide Web, 也称为 WWW) 由庞大的, 分布在世界各地的 web 页面的集合组成.
Web 页面编写采用 HTML (HyperText Markup Language) 等语言, 客户端 (浏览器) 采用 HTTP (HyperText Transfer Protocol) 协议来访问 web 页面.
万维网可以看作是分布式超媒体 (hypermedia) 系统, 它是超文本 (hypertext) 系统的扩充. 超文本是万维网的基础, 一个超文本由多个文本页面链接 (link) 成. 利用一个链接可使用户找到另一个文本页面.
超媒体与超文本的区别是页面内容不同, 超文本页面仅包含文本信息, 而超媒体页面还包含其他表示方式的信息, 如图形, 图像, 声音, 动画, 视频等.
超链接是链接到其它页面的文本字符串, 通过超链接, 用户可以访问一个又一个的 web 页面.
统一资源定位符 URL#
使用统一资源定位符 URL (Uniform Resource Locator) 来命名万维网上的各种 web 页面, 每个页面在整个 Internet 的范围内具有唯一的标识符即 URL.
URL 的一般形式: <协议>://<主机域名>:<端口>/<路径及文件名>
HTTP 中, 若文件名省略, 则 URL 指向某个名为 index.html 的缺省页面.
超文本传输协议 HTTP#
传输层使用 TCP 协议.
HTTP 是万维网上能够可靠地交换文件 (包括文本, 声音, 图像等各种多媒体文件) 的重要基础.
工作在客户/服务器模式, 指定客户可以向服务器发送什么样的消息, 并且得到什么样的响应消息.
- 客户向服务器发出 TCP 连接请求, 服务器缺省工作在 80 端口, 服务器接受连接请求并与客户建立 TCP 连接
- 在客户与服务器之间交互 HTTP 消息
- 客户或者服务器发起关闭 TCP 连接
万维网的工作过程#
- 用户在浏览器的地址栏键入 URL, 或者点击某个超链接所对应的 URL
- 浏览器分析 URL 的主机域名, 通过 DNS 系统找到资源所在的节点即 web 服务器的 IP 地址
- 浏览器与 web 服务器的 80 端口建立 TCP 连接 (HTTP 协议的默认端口)
- 向 web 服务器发出 HTTP 请求消息, 要求获得某个 web 页面
- 服务器服务器通过 HTTP 响应消息传送 web 页面
- TCP 连接被释放
- 浏览器在本机上显示 web 页面
HTTP 的消息格式#
HTTP 有两类消息:
- 请求消息, 客户端发向 web 服务器
- 响应消息, 从 web 服务器发往客户端
请求消息:

方法:
| 方法 (操作) | 意义 |
|---|---|
| OPTION | 查询特定选项 |
| GET | 请求读取一个 web 页面 |
| HEAD | 请求读取一个 web 页面的头部 |
| POST | 给服务器添加信息 (例如, 注释) |
| PUT | 请求存储一个 web 页面 |
| DELETE | 删除 web 页面 |
| TRACE | 送回收到的请求 |
HTTP 请求示例:

响应消息:

响应消息的开始行是状态行, 状态行包括 HTTP 的版本, 状态码, 以及解释状态码的简单短语.
例:

1xx 表示通知信息, 如服务器同意处理客户请求 (100)
2xx 表示成功, 如请求成功 (200) 或没有内容存在 (204)
3xx 表示重定向, 如页面移动 (301) 或者缓存的页面仍然有效 (304)
4xx 表示客户错误, 例如禁止页面 (403) 或者页面没有找到 (404)
5xx 表示服务器错误, 如服务器内部错误 (500) 或者以后再试 (503)
4xx 表示请求的内容/方式有问题, 所以 I’m a teapot 是 418.
电子邮件#
相关协议#
消息交换协议:
- 发送 email: 简单邮件传输协议 SMTP (Simple Mail Transfer Protocol)
- 接收 email:
- 邮局协议第 3 版 POP3 (Post Office Protocol version 3)
- Internet 消息访问协议 IMAP (Internet Message Access Protocol)
消息格式协议:
- 基本的 ASCII 的文本邮件
- 多用途 Internet 邮件扩展 MIME (Multipurpose Internet Mail Extensions), 支持多媒体邮件, 不仅仅限于 ASCII 字符及文本信息
电子邮件系统架构#
发送用 MTA: Message Transfer Agent, 是 Push 过程, 用的协议通常是 SMTP.
接收用 MAA: Message Access Agent, 是 Pull 过程, 把信从服务器取回本地, 用的协议是 POP3 或 IMAP.
UA: User Agent, 给人类用的, 例如 Outlook, Foxmail.
电子邮件地址格式#
用户名@邮件服务器的域名
域名是邮件服务器的域, 进行 DNS 查询 (MX 记录) 可获得该域的邮件服务器 IP 地址.
MIME#
Multipurpose Internet Mail Extensions, 多用途 Internet 邮件扩展, 传统电子邮件只能发送 NVT 7-bit ASCII 格式的消息, MIME 协议进行了扩张, 使得非 NVT ASCII 数据能够通过 Email 发送.
不是独立的传输协议.