06 · 应用层(Application Layer)

📅 预计 90 分钟 | ⭐ 本章主题:DNS、HTTP/HTTPS、FTP、邮件与 DHCP


6.0 应用层是干什么的

把网络想象成一家大快递公司。前面几章的物理层、数据链路层、网络层、传输层,负责把"包裹"(数据)从你家门口一路搬到目的地——它们只关心"怎么运"。而应用层是站在门口的前台服务员:你只需要说"我要查这个网址""我要发邮件""我要传文件",它帮你把需求翻译成包裹、再帮你把收到的包裹翻译回你能懂的内容。

每一层都只管自己那一层的活:应用层不关心数据在海底光缆里怎么走,只关心"这条消息对用户来说是什么意思"。

应用层的两个核心概念,本讲反复出现:

  • 协议(protocol):双方提前约定好的"对话规则"——说中文还是说英文、先说什么后说什么。
  • 端口(port):同一台主机上,用来区分不同服务的"门牌号"。

⚠️ 常见错误

  1. 把应用层当"数据本身":应用层是"格式与规则",不是图片、文字这些内容本身。
  2. 混淆"协议"和"软件":HTTP 是协议(规则),Chrome 浏览器是软件(实现规则的工具)。
  3. 以为端口是硬件:端口是软件层面的编号,不是电脑背后的物理接口。

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"这个数序记。

⚠️ 常见错误

  1. 端口记混:HTTP=80、HTTPS=443 最常被问,别把 HTTPS 记成 8080(那是常用备用端口,不是标准端口)。
  2. 以为所有协议都用 TCP:DNS 主要用 UDP(快、开销小),DHCP 也用 UDP。
  3. 把 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

⚠️ 常见错误

  1. A 记录和 AAAA 记录混淆:A 是 IPv4,AAAA 是 IPv6(记住 AAAA 比 A 长,对应更大的地址)。
  2. 递归 vs 迭代混淆:递归 = 对方一路问到底给你答案;迭代 = 对方只指路,你自己一级一级问。
  3. 以为 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 则是服务器端记录会话状态的机制。相当于餐厅发给你一张"会员卡",每次来出示一下。

⚠️ 常见错误

  1. 状态码记混:404 是"找不到资源"(资源不存在),403 是"禁止访问"(存在但不让你看),401 是"没登录/没认证"——三者意义不同。
  2. GET / POST 混用:GET 用来"查"(无副作用),POST 用来"提交"(有副作用);把密码放 GET 的 URL 里会留在历史记录中。
  3. 忘了请求报文要有空行:请求行、首部行之后必须有一个空行再跟请求体,这是格式硬性要求。
  4. 以为 3xx 是错误:3xx 是"重定向",不是出错,是"去别的地方要"。
  5. 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        # 退出

一个隐蔽特点:控制连接全程保持,而数据连接是"传一次建一次、传完即断"。

⚠️ 常见错误

  1. 把 FTP 控制/数据端口记反:21 下命令、20 传数据。
  2. 以为 FTP 和 HTTP 一样只有一条连接:FTP 有两条连接(控制 + 数据)。
  3. 混淆 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。)

⚠️ 常见错误

  1. 发送接收协议搞混:发用 SMTP,收用 POP3/IMAP。SMTP 只负责"送",不负责"取"。
  2. 把"推/拉"记反:SMTP 推、POP3/IMAP 拉。
  3. 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 手动释放。

⚠️ 常见错误

  1. DORA 顺序记反:Discover → Offer → Request → Acknowledge,首字母 DORA。
  2. 端口记错:DHCP 是 UDP 67(服务器)/ 68(客户端),不是 TCP。
  3. 以为 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 的有效使用期

⭐ 本章考点清单

  1. 端口对照:80/443/21/22/25/53/67/68/110/143 分别对应哪个协议。
  2. DNS 记录类型:A、AAAA、CNAME、MX、NS 各自的作用。
  3. 递归查询与迭代查询的区别。
  4. HTTP 请求报文格式(请求行/首部行/空行/请求体)与响应报文格式。
  5. HTTP 常用方法:GET vs POST、PUT、DELETE、HEAD。
  6. 状态码分类:2xx/3xx/4xx/5xx,及 200、301、404、403、500 的含义。
  7. HTTP 与 HTTPS 的区别;Cookie 与 Session 的作用。
  8. FTP 双连接(21 控制 / 20 数据)与主动/被动模式。
  9. SMTP 发送、POP3/IMAP 接收;POP3 与 IMAP 的区别。
  10. DHCP 的 DORA 四步与 UDP 67/68 端口。