应用层:DNS、HTTP 与一次完整上网

最后一层,也是离你最近的一层——你写的每个接口、调的每个 API 都在这层说话。四层打底铺好的管道(端口、TCP、IP、帧),这篇拿来装"内容":DNS 怎么翻译域名、HTTP 怎么组织请求、HTTPS 怎么加密,最后用"输入网址回车后发生了什么"把全区收网。

一、应用层管什么

下面四层解决了"把字节可靠送到对方进程",但字节里说什么、什么格式、什么语义——是应用层的事。两种组织模式:

模式 思路 例子
C/S(客户/服务器) 服务集中放,客户来请求 网站、App 调接口
P2P(对等) 每个节点既是客户又是服务器 早年 BT 下载

P2P 越多人下越快(人人都是源),C/S 越多人下越挤(服务器一个人扛)——这是架构设计的第一课。

二、DNS:把域名翻译成 IP

人记不住 142.250.66.14,记得住 google.com——DNS 是全互联网的电话簿。

层级结构

根(.) → 顶级域(.com/.cn/.org) → 权威域(example.com) → 主机(www.example.com

两种查询方式(408 考点)

  • 递归查询(你的电脑 → 本地 DNS):"你帮我问到底,直接给我最终答案"
  • 迭代查询(本地 DNS → 根/顶级/权威):"我不替你问,我只告诉你下一站去问谁"
浏览器 → 本地 DNS(递归)
            ├→ 根服务器:"问 .com 的服务器"(迭代)
            ├→ .com 服务器:"问 example.com 的权威服务器"
            └→ 权威服务器:"www.example.com = 93.184.216.34"
→ 结果缓存起来(有 TTL),下次免查

🤔 DNS 查询为什么用 UDP(53 端口)?一问一答的小包,TCP 握手三个来回太浪费;超时重发一次就行。只有响应太大(区域传送)才换 TCP。

记录类型顺带认识:A(域名→IPv4)、AAAA(→IPv6)、CNAME(别名,指向另一个域名)、MX(邮件服务器)。

三、HTTP:浏览器和服务器的话术

HTTP 是请求-响应制:客户端发请求报文,服务器回响应报文

请求报文

GET /index.html HTTP/1.1        ← 请求行:方法 + 路径 + 版本
Host: example.com               ← 请求头(一堆键值对)
User-Agent: Mozilla/5.0 ...

(请求体,GET 通常没有)

常用方法与幂等性

方法 语义 幂等?
GET
POST 建/提交 ❌(重复提交会建两个)
PUT 全量替换
DELETE

幂等 = 重复执行结果一样——网络重试机制全靠它兜底:不确定成功时,幂等操作敢重试,非幂等的要加防重。

状态码家族

家族 含义 常客
2xx 成功 200 OK
3xx 重定向 301 永久搬家 / 304 缓存还能用
4xx 客户端的锅 403 没权限 / 404 没这页 / 429 请求太频繁
5xx 服务器的锅 500 内部错误 / 502 网关拿不到后端响应 / 504 网关超时

💡 无状态:HTTP 本身不记得"你是谁"——每个请求都是陌生人。那登录态怎么维持?看下一节。

Cookie 与 Session:给无状态打补丁

  • Cookie:服务器"发给你"的工牌,浏览器存着,之后每个请求自动带上(存在客户端)
  • Session:服务器侧的档案柜,Cookie 里只放柜号(session id)——数据在服务器,更安全
  • 2026 年主流是 Token(JWT):把"档案"签名后直接发给客户端保存,服务器无状态可水平扩容

四、HTTPS = HTTP + TLS 加压

裸 HTTP 的问题:明文(WiFi 抓包全可见)、无认证(谁都能冒充银行官网)、无完整(半路可篡改)。HTTPS 在 HTTP 和 TCP 之间垫了一层 TLS,三个问题各给一个解法:

威胁 解法
偷看 → 加密
冒充 → 证书(CA 权威机构签字认证"这个域名确实是它的")
篡改 → 摘要(内容改一个比特,校验就崩)

加密的两难与破局:

  • 对称加密快,但钥匙怎么安全递给对方?(递钥匙的路上就被偷了)
  • 非对称加密(公钥加密、私钥解密)能安全递钥匙,但慢

TLS 握手概览:用证书保护下的非对称加密交换出对称会话密钥,之后的海量数据全用对称加密跑——既安全又快。浏览器地址栏的小锁,点开能看到证书链(你的证书 ← 中级 CA ← 根 CA)。

💡 408 只考"对称/非对称 + 证书"的概念层;面试会追问 TLS 1.2 与 1.3 的握手轮次、ECDHE——到时候回来补。

五、其他协议:一句话各归其位

协议 干什么
DHCP 设备连网时自动发 IP/掩码/网关/DNS("上网即插即用"的后台)
FTP 文件传输(老牌,明文,如今多被 HTTPS/SFTP 取代)
SMTP / POP3 / IMAP 发邮件 / 收邮件(下载删)/ 收邮件(服务器同步)
NTP 对时钟(全网设备的表都跟它校准)

六、CDN:就近发货

全世界的用户都回源站(美国机房)拉视频?卡爆。CDN = 在全球部署缓存节点,静态内容提前铺到离用户最近的机房——"就近取货"。DNS 在其中扮演调度员:同一个域名,北京解析到北京节点、广州解析到广州节点。

七、大串联:输入网址回车后发生了什么

面试之王,也是全区的收网考试——每一步都对应前面一篇笔记

① DNS 解析   浏览器缓存 → 系统缓存 → 本地 DNS(递归+迭代) → 拿到 IP        [[06-应用层#二|DNS]]
② TCP 连接   和服务器 IP:443 三次握手                                      [[05-传输层]]
③ TLS 握手   证书验证 + 协商对称密钥(HTTPS 才有)                          [[06-应用层#四|HTTPS]]
④ 发 HTTP    GET /index.html(装进 TCP 段 → IP 分组 → 以太网帧)           [[03-数据链路层|链路]]
⑤ 路由转发   每跳路由器查路由表、TTL 减 1、ARP 找下一跳 MAC                [[04-网络层]]
⑥ 服务器响应 200 OK + HTML
⑦ 浏览器渲染 解析 HTML → 拉取 CSS/JS/图片(又回到④,并发多条连接)→ 排版绘制

能脱稿讲完这条链 + 每步的协议细节,计网面试基本稳了。

八、盲点自测

  1. 递归和迭代查询的区别? ——递归是"你帮我问到给结果",迭代是"我只告诉你下一站问谁"。
  2. DNS 为什么用 UDP? ——小包一问一答,握手成本不值;超时重发兜底。
  3. GET 和 POST 的本质区别? ——语义:GET 读、参数在 URL、幂等;POST 提交、参数在体、非幂等。重试机制敢不敢重试就看幂等。
  4. 304 是什么意思? ——缓存还新鲜,直接用本地副本,不重新传(3xx 里最省钱的一个)。
  5. Cookie 和 Session 的分工? ——Cookie 存客户端(凭证),Session 存服务器(档案);Cookie 里放 session id 来对号。
  6. HTTPS 怎么同时做到安全和快? ——非对称加密(证书保护下)只用来交换对称会话密钥,数据传输用快的对称加密。
  7. CDN 靠什么"就近"? ——全球边缘节点缓存 + DNS 调度把同一域名解析到离用户最近的节点。
  8. 家里的设备为什么都是 192.168 开头还能同时上网? ——私网地址 + NAT 端口复用(网络层的魔法)。

九、动手玩一把

# 看一次 HTTP 请求的完整往返
curl -v https://example.com        # -v 能看到 DNS/TLS/请求头/响应头全过程

# 手动查 DNS
nslookup baidu.com
dig baidu.com +short               # 只出答案

# 浏览器 F12 → Network 面板:刷新任意网页
# 能看到每条请求的方法/状态码/大小/耗时——比抓包工具更适合入门观察

至此五层全部走通:物理层运比特、链路层送帧、网络层找路、传输层交付进程、应用层定义语义。TCP/IP 的每一环都拆开看过了。

剩下的"网络编程(socket 动手写客户端/服务器)"将放进项目实战区,和代码一起学——理论闭环,实践在代码里见。

⬅️ 传输层 🏠 00-基础与理论 🏁 完结,回 网络总览 收网