--- title: "06-应用层:DNS、HTTP 与一次完整上网" aliases: - 应用层 created: 2026-08-29 tags: - 基础与理论 - 计算机网络 - "408" --- # 应用层: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 端口复用([[04-网络层|网络层]]的魔法)。 ## 九、动手玩一把 ```bash # 看一次 HTTP 请求的完整往返 curl -v https://example.com # -v 能看到 DNS/TLS/请求头/响应头全过程 # 手动查 DNS nslookup baidu.com dig baidu.com +short # 只出答案 # 浏览器 F12 → Network 面板:刷新任意网页 # 能看到每条请求的方法/状态码/大小/耗时——比抓包工具更适合入门观察 ``` --- 至此五层全部走通:**物理层运比特、链路层送帧、网络层找路、传输层交付进程、应用层定义语义**。TCP/IP 的每一环都拆开看过了。 剩下的"**网络编程**(socket 动手写客户端/服务器)"将放进项目实战区,和代码一起学——理论闭环,实践在代码里见。 ⬅️ [[05-传输层|传输层]] 🏠 [[00-基础与理论|00-基础与理论]] 🏁 完结,回 [[00-计算机网络总览|网络总览]] 收网