NET-06 应用层
06 · 应用层(Application Layer)
📅 预计 90 分钟 | ⭐ 本章主题:DNS、HTTP/HTTPS、FTP、邮件与 DHCP
6.0 应用层是干什么的
把网络想象成一家大快递公司。前面几章的物理层、数据链路层、网络层、传输层,负责把"包裹"(数据)从你家门口一路搬到目的地——它们只关心"怎么运"。而应用层是站在门口的前台服务员:你只需要说"我要查这个网址""我要发邮件""我要传文件",它帮你把需求翻译成包裹、再帮你把收到的包裹翻译回你能懂的内容。
每一层都只管自己那一层的活:应用层不关心数据在海底光缆里怎么走,只关心"这条消息对用户来说是什么意思"。
应用层的两个核心概念,本讲反复出现:
- 协议(protocol):双方提前约定好的"对话规则"——说中文还是说英文、先说什么后说什么。
- 端口(port):同一台主机上,用来区分不同服务的"门牌号"。
⚠️ 常见错误
- 把应用层当"数据本身":应用层是"格式与规则",不是图片、文字这些内容本身。
- 混淆"协议"和"软件":HTTP 是协议(规则),Chrome 浏览器是软件(实现规则的工具)。
- 以为端口是硬件:端口是软件层面的编号,不是电脑背后的物理接口。
6.1 端口与协议:给服务贴门牌号
一台服务器上同时跑着网页、邮件、DNS 三个服务。客户端连过来时,光有 IP 地址只能找到"这栋楼",怎么知道要找"几楼几号房"?靠端口(port)。
端口号范围 0-65535,其中 0-1023 是知名端口(well-known port),固定给常用协议用。记住下面这张表,本讲所有内容都挂在上面:
| 端口 | 协议 | 用途 | 传输层 |
|---|---|---|---|
| 20/21 | FTP | 数据/控制连接 | TCP |
| 22 | SSH | 远程登录 | TCP |
| 23 | Telnet | 远程登录(明文) | TCP |
| 25 | SMTP | 发邮件 | TCP |
| 53 | DNS | 域名解析 | UDP(主)/ TCP |
| 67/68 | DHCP | 地址分配 | UDP |
| 80 | HTTP | 网页 | TCP |
| 110 | POP3 | 收邮件 | TCP |
| 143 | IMAP | 收邮件(保留在服务器) | TCP |
| 443 | HTTPS | 加密网页 | TCP |
| 3306 | MySQL | 数据库 | TCP |
| 3389 | RDP | Windows 远程桌面 | TCP |
💡 记忆技巧:HTTP 是 80,加密后的 HTTPS 是 443;FTP 是 21;SMTP 25、POP3 110、IMAP 143,按"25、110、143"这个数序记。
⚠️ 常见错误
- 端口记混:HTTP=80、HTTPS=443 最常被问,别把 HTTPS 记成 8080(那是常用备用端口,不是标准端口)。
- 以为所有协议都用 TCP:DNS 主要用 UDP(快、开销小),DHCP 也用 UDP。
- 把 FTP 的 20 和 21 弄反:21 是"控制"(下命令),20 是"数据"(传文件内容)。
6.2 DNS:网络的电话簿
记忆网址太难,交给 DNS
人类记 www.shengxia.dev 这种域名(domain name)很容易,但网络里每一台机器真正的地址是 IP(如 47.98.215.18)。域名和 IP 之间的翻译工作,交给 DNS(Domain Name System,域名系统)——它就像一本电话簿:你报名字,它告诉你号码。
DNS 是分布式的,没有一本"全网总目录",而是分层、分区的树状结构:
根域名服务器(root)
└─ 顶级域名 .com .org .cn .dev ...
└─ 权威域名服务器(authoritative):某个具体域名,如 shengxia.dev
一次完整的解析过程(迭代查询,你向多个服务器挨个问):
1. 你的电脑问本地 DNS 服务器:"www.shengxia.dev 的 IP 是多少?"
2. 本地服务器问根服务器:".dev 归谁管?" → 被告知找 .dev 顶级域名服务器
3. 本地服务器问 .dev 顶级服务器:"shengxia.dev 归谁管?" → 被告知找权威服务器
4. 本地服务器问权威服务器 → 拿到 IP:47.98.215.18
5. 本地服务器把答案回给电脑,并缓存一段时间
还有一条更简单的路径叫递归查询:你只问本地服务器一个问题,剩下的逐级追问全由它代劳,最后把最终答案给你。日常上网基本都是递归查询。
资源记录(Resource Record)是 DNS 里的"条目",常见类型:
| 类型 | 作用 | 例子 |
|---|---|---|
| A | 域名 → IPv4 地址 | www → 47.98.215.18 |
| AAAA | 域名 → IPv6 地址 | www → 2400:... |
| CNAME | 域名 → 另一个域名(别名) | blog → www.shengxia.dev |
| MX | 邮件服务器 | @ → mail.shengxia.dev |
| NS | 指定该域名的权威服务器 | dev → ns1.xxx |
| PTR | IP → 域名(反查) | 18.215.98.47 → www |
命令行实测(Windows / Linux / macOS 都有):
nslookup www.baidu.com
# 输出示例:
# Server: 192.168.1.1
# Address: 192.168.1.1#53
# Name: www.baidu.com
# Address: 110.242.68.3
⚠️ 常见错误
- A 记录和 AAAA 记录混淆:A 是 IPv4,AAAA 是 IPv6(记住 AAAA 比 A 长,对应更大的地址)。
- 递归 vs 迭代混淆:递归 = 对方一路问到底给你答案;迭代 = 对方只指路,你自己一级一级问。
- 以为 DNS 只存 IP:它还存 MX(邮件)、NS(权威服务器)等多种记录。
6.3 HTTP 与 HTTPS:网页的对话规则
HTTP:浏览器和服务器之间的"点单"
你在浏览器输入网址、按下回车,浏览器和服务器之间靠 HTTP(HyperText Transfer Protocol,超文本传输协议) 对话。整个过程像在餐厅点单:你(浏览器,客户端)递上菜单需求,厨房(服务器)按单做菜、再把菜端上来。
请求报文(request)长这样——第一行是请求行,中间是首部行,空行后是请求体:
POST /login HTTP/1.1
Host: shengxia.dev
Content-Type: application/x-www-form-urlencoded
Content-Length: 18
username=guorui&pwd=123456
- 请求行 =
方法 URL HTTP版本,本例方法为 POST。 - 首部行 = 一个个"头",描述元信息(发给谁、内容多长、什么格式)。
- 空行分隔首部和正文,这是 HTTP 的固定格式要求。
- 请求体 = 实际提交的数据(GET 一般没有请求体,数据放 URL 里)。
响应报文(response)同理——第一行是状态行:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 134
<html>...(网页正文)</html>
- 状态行 =
HTTP版本 状态码 原因短语。状态码一共 5 类:
| 状态码 | 含义 | 例子 |
|---|---|---|
| 1xx | 信息性 | 100 Continue |
| 2xx | 成功 | 200 OK、201 Created、204 No Content |
| 3xx | 重定向 | 301 永久移动、302 临时跳转、304 未修改 |
| 4xx | 客户端错误 | 400 请求格式错、401 未认证、403 禁止、404 找不到 |
| 5xx | 服务器错误 | 500 内部错误、502 网关错误、503 服务不可用 |
常用方法(方法决定"你想让服务器干什么"):
| 方法 | 语义 | 类比 |
|---|---|---|
| GET | 取数据 | 查菜单(不修改任何东西) |
| POST | 提交数据 | 下订单(会新增/修改服务端状态) |
| PUT | 整体更新 | 把整份资料换成新的 |
| DELETE | 删除 | 撤单 |
| HEAD | 只要响应头,不要正文 | 只问"菜在不在",不端上来 |
| OPTIONS | 询问服务器支持哪些方法 | 问"你这有什么菜" |
GET 和 POST 的直观区别:GET 的参数拼在 URL 里(/search?q=python),POST 的参数放在请求体里(更隐蔽、可携带大内容)。
HTTPS:给对话加一个密
HTTP 的内容是明文传输——抓包就能看到你发的密码。HTTPS(HTTP over TLS) 就是在 HTTP 外面套一层 TLS/SSL 加密:先建立加密通道,再走普通 HTTP 的对话。默认端口 443,证书验证细节在第 07 章(网络安全)展开。现代网站基本全部启用 HTTPS,浏览器地址栏会显示一把"小锁"。
Cookie 与 Session:让服务器"记得你"
HTTP 是无状态的——服务器不记得你是谁。解决方案:服务器给你发一个 Cookie(一小段文本,存在浏览器里),你每次请求都带上它,服务器凭 Cookie 认出你;Session 则是服务器端记录会话状态的机制。相当于餐厅发给你一张"会员卡",每次来出示一下。
⚠️ 常见错误
- 状态码记混:404 是"找不到资源"(资源不存在),403 是"禁止访问"(存在但不让你看),401 是"没登录/没认证"——三者意义不同。
- GET / POST 混用:GET 用来"查"(无副作用),POST 用来"提交"(有副作用);把密码放 GET 的 URL 里会留在历史记录中。
- 忘了请求报文要有空行:请求行、首部行之后必须有一个空行再跟请求体,这是格式硬性要求。
- 以为 3xx 是错误:3xx 是"重定向",不是出错,是"去别的地方要"。
- HTTP 与 HTTPS 端口记反:80 / 443。
6.4 FTP:专门传文件的协议
FTP(File Transfer Protocol,文件传输协议) 用于在两台机器间上传/下载文件,默认端口 21(控制连接)+ 20(数据连接)。它把"下命令"和"传数据"分到两条连接,这是它区别于 HTTP 的一个特点。
FTP 有主动模式(active)和被动模式(passive)两种数据连接建立方式,核心区别是"谁主动发起数据连接":
- 主动:服务器主动连回客户端的某个端口。
- 被动:客户端主动去连服务器开好的端口(现在主流,能穿透大部分防火墙)。
日常用软件(如 FileZilla、WinSCP)或命令行都能连:
ftp 127.0.0.1
# 然后输入用户名/密码
ftp> ls # 列出文件
ftp> get 1.txt # 下载 1.txt
ftp> put a.txt # 上传 a.txt
ftp> quit # 退出
一个隐蔽特点:控制连接全程保持,而数据连接是"传一次建一次、传完即断"。
⚠️ 常见错误
- 把 FTP 控制/数据端口记反:21 下命令、20 传数据。
- 以为 FTP 和 HTTP 一样只有一条连接:FTP 有两条连接(控制 + 数据)。
- 混淆 FTP 与 SFTP:FTP 明文传输,SFTP 基于 SSH 加密,端口也不同(FTP 21,SFTP 22)。
6.5 电子邮件:SMTP 发送、POP3/IMAP 接收
电子邮件 = 寄信
电子邮件系统像传统邮局:你把信交给发送邮局,邮局把信投递到对方的邮箱,对方再从邮箱取信。
- 发送:用 SMTP(Simple Mail Transfer Protocol),端口 25。客户端把邮件"推"给发件方邮件服务器,服务器之间也靠 SMTP 转发,最终"推"进收件人的邮箱服务器。SMTP 是**推(push)**模式——主动送出去。
- 接收:用 POP3(端口 110)或 IMAP(端口 143),是**拉(pull)**模式——主动取回来。
POP3 与 IMAP 的区别很实际:
| 特性 | POP3 | IMAP |
|---|---|---|
| 邮件存放位置 | 下载到本地,服务器常删除 | 留在服务器上,本地只读"副本" |
| 多设备同步 | 各设备不同步 | 多设备状态同步 |
| 适合场景 | 只在一台电脑收信 | 手机 + 电脑多设备 |
用一段极简流程串起来:
发件人客户端 → SMTP(25) → 发件服务器 → SMTP(25) → 收件服务器 → 收件人客户端 POP3(110)/IMAP(143)
(现代常用加密版本:SMTPS 465、POP3S 995、IMAPS 993。)
⚠️ 常见错误
- 发送接收协议搞混:发用 SMTP,收用 POP3/IMAP。SMTP 只负责"送",不负责"取"。
- 把"推/拉"记反:SMTP 推、POP3/IMAP 拉。
- POP3 与 IMAP 记反:POP3 下载后服务器一般删、IMAP 保留在服务器。
6.6 DHCP:自动分配 IP 地址
新设备连上 WiFi,怎么突然就有一个 IP 地址了?靠 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)。它像公寓前台:你(新住户)入住时,前台给你分配房间号、告诉你在哪拿钥匙(网关)、去哪咨询(DNS 服务器)。
DHCP 分配 IP 的过程叫 DORA(四步):
1. DHCP Discover 客户端广播:谁有 IP 可以分给我?
2. DHCP Offer 服务器回应:我给你这个 IP,要不要?
3. DHCP Request 客户端广播:我要这个 IP!
4. DHCP Acknowledge 服务器确认:好,租给你,租期 X 小时
DHCP 用 UDP:服务器端口 67,客户端端口 68。分配到的 IP 是有租期(lease)的,到期要续租(renew)——这保证了一个办公室里的 IP 能被循环利用。DHCP 还能顺带下发子网掩码、默认网关、DNS 服务器地址。
命令行实测:Windows 上 ipconfig /renew 手动续租,ipconfig /release 手动释放。
⚠️ 常见错误
- DORA 顺序记反:Discover → Offer → Request → Acknowledge,首字母 DORA。
- 端口记错:DHCP 是 UDP 67(服务器)/ 68(客户端),不是 TCP。
- 以为 DHCP 分配的是固定 IP:是"租"不是"买",租期到会回收。
6.7 本讲小结
应用层是面向用户的一层,核心就是"协议 + 端口"。把 6 张牌记牢:DNS 查地址、HTTP 看网页、HTTPS 加密看网页、FTP 传文件、SMTP/POP3 发收邮件、DHCP 分 IP。
🧠 记忆口诀
- 端口歌:HTTP 80、HTTPS 443、FTP 21、SSH 22、DNS 53、SMTP 25。
- DNS:电话簿,递归是"代问",迭代是"指路"。
- HTTP:点单与上菜;1xx 信息、2xx 成功、3xx 跳转、4xx 你错、5xx 我错。
- 邮件:SMTP 推出去,POP3/IMAP 拉回来。
- DHCP:DORA——发现、提供、请求、确认。
📌 中英术语表(本讲)
| 中文 | English | 说明 |
|---|---|---|
| 应用层 | application layer | 为用户应用提供服务的最高层 |
| 协议 | protocol | 通信双方约定的规则 |
| 端口 | port | 标识主机上某服务的编号 |
| 知名端口 | well-known port | 0-1023,固定给常用协议 |
| 域名系统 | Domain Name System (DNS) | 域名 → IP 的翻译服务 |
| 域名 | domain name | 人类易记的网址名称 |
| 资源记录 | resource record | DNS 中的条目 |
| 权威域名服务器 | authoritative name server | 某域名最终答案的持有者 |
| 递归查询 | recursive query | 对方一路问到底再给答案 |
| 迭代查询 | iterative query | 对方只指路,逐级追问 |
| 超文本传输协议 | HyperText Transfer Protocol (HTTP) | 网页通信协议 |
| 请求报文 | request message | 客户端发给服务器的内容 |
| 响应报文 | response message | 服务器返回给客户端的内容 |
| 状态码 | status code | 三位数字,表示响应结果 |
| 重定向 | redirection | 3xx,告诉客户端去别的地址 |
| 无状态 | stateless | 服务器不记忆之前的请求 |
| Cookie | cookie | 存在客户端的身份标识小文本 |
| 会话 | session | 服务器端会话状态 |
| 文件传输协议 | File Transfer Protocol (FTP) | 传输文件 |
| 简单邮件传输协议 | SMTP | 发送邮件 |
| 邮局协议 | Post Office Protocol (POP3) | 收邮件(下载到本地) |
| 交互式邮件协议 | IMAP | 收邮件(保留在服务器) |
| 动态主机配置协议 | DHCP | 自动分配 IP |
| 租期 | lease | IP 的有效使用期 |
⭐ 本章考点清单
- 端口对照:80/443/21/22/25/53/67/68/110/143 分别对应哪个协议。
- DNS 记录类型:A、AAAA、CNAME、MX、NS 各自的作用。
- 递归查询与迭代查询的区别。
- HTTP 请求报文格式(请求行/首部行/空行/请求体)与响应报文格式。
- HTTP 常用方法:GET vs POST、PUT、DELETE、HEAD。
- 状态码分类:2xx/3xx/4xx/5xx,及 200、301、404、403、500 的含义。
- HTTP 与 HTTPS 的区别;Cookie 与 Session 的作用。
- FTP 双连接(21 控制 / 20 数据)与主动/被动模式。
- SMTP 发送、POP3/IMAP 接收;POP3 与 IMAP 的区别。
- DHCP 的 DORA 四步与 UDP 67/68 端口。