应用层离用户最近,只关心「说什么、怎么说」(数据编码、请求表达);可靠传输交给 TCP(见第 3、4 章)。
HTTP 是无状态、基于文本的请求-响应协议。报文分请求和响应两种,格式对称:
GET /index.html HTTP/1.1 ← 请求行:方法 + 路径 + 版本
Host: www.example.com ← 首部(键值对)
User-Agent: curl/8.0
Accept: text/html
← 空行结束首部
(可选的请求体,POST 才有)
| 请求方法 | 语义 | 幂等 |
|---|---|---|
| GET | 获取资源 | 是 |
| POST | 提交数据、创建资源 | 否 |
| PUT | 整体替换资源 | 是 |
| DELETE | 删除资源 | 是 |
| HEAD | 只取首部不取体 | 是 |
| 状态码 | 类别 | 常见示例 |
|---|---|---|
| 1xx | 信息 | 100 Continue |
| 2xx | 成功 | 200 OK、201 Created、204 No Content |
| 3xx | 重定向 | 301 永久、302 临时、304 Not Modified |
| 4xx | 客户端错误 | 400、401 未认证、403 禁止、404 Not Found |
| 5xx | 服务器错误 | 500、502 网关、503 服务不可用 |
响应报文 = 状态行(版本 + 状态码 + 原因短语)+ 首部 + 空行 + 响应体。
网络层只按 IP 寻址(见第 5 章),人记域名,所以用**域名系统(DNS)**做转换。DNS 是分层、分布式的数据库:
根域名服务器(.) → 顶级域服务器(.com) → 权威服务器(example.com)
解析 www.example.com:
.com 顶级域 → example.com 权威服务器;对比:递归查询是「你替我去查到底」(客户端→本地服务器,只问一次);迭代查询是「我告诉你下一步问谁」(本地服务器→各级服务器,各自接力)。现实中两者混合。
邮件分「发送」和「接收」两条链路:
| 协议 | 作用 | 方向 | 端口 |
|---|---|---|---|
| SMTP | 发送/转发邮件 | 客户端→服务器、服务器→服务器 | 25/465/587 |
| POP3 | 下载邮件(默认下载后删除) | 服务器→客户端 | 110/995 |
| IMAP | 同步邮件(服务器留存,多设备同步) | 服务器↔客户端 | 143/993 |
DHCP 让主机无需手工配置 IP,接入即自动获得地址。经典 DORA 四步:
| 步骤 | 报文 | 方向 | 内容 |
|---|---|---|---|
| Discover | DHCPDISCOVER | 客户端→广播 | 「有人能给我 IP 吗?」 |
| Offer | DHCPOFFER | 服务器→客户端 | 「我建议用这个 IP」 |
| Request | DHCPREQUEST | 客户端→广播 | 「我就要这个 IP」 |
| Ack | DHCPACK | 服务器→客户端 | 「成交,租约给你」 |
对比:IPv6 用 SLAAC(前缀 + 自生成接口标识,无需服务器)+ DHCPv6(补充 DNS 等)取代 IPv4 的 DHCP 独大。第 5 章详述 IPv6 地址。
对比:HTTP/1.0 每请求新建一次 TCP;HTTP/1.1 持久连接(keep-alive)串行复用但队头阻塞;HTTP/2 多路复用(multiplexing)同一连接并发多路,消除队头阻塞。