🚀 经典面试题:键入网址到网页显示,期间发生了什么?
这条题目是考察网络基础的"大杀器",核心流程可以概括为:应用层解析 -> DNS 寻址 -> 协议栈委托 -> TCP 可靠传输 -> IP 远程定位。
1. 第一步:应用层解析(HTTP)
- 解析 URL :浏览器提取出 **Web 服务器名(域名)**和 文件名(资源路径) 。
- 若路径省略,默认请求
/index.html。
- 若路径省略,默认请求
- 生成 HTTP 请求:浏览器根据解析结果生成包含方法(GET/POST)、路径、协议版本、Header 的 HTTP 报文。
2. 第二步:真实地址查询(DNS)------ "指路不带路"
在委托操作系统发包前,必须获取目标服务器的 IP 地址。
📌 核心疑问解答:DNS 根域服务器到底怎么理解?
- 天生认知 :全世界所有 DNS 服务器出厂/配置时,就内置固化了根域 DNS 服务器的 IP 地址。
- 树状层级 :
.(根) ->.com(顶级域) ->baidu.com(权威域)。 - 查询流程(面试必考) :
- 缓存查找:浏览器缓存 -> 操作系统缓存 -> Hosts 文件 -> 本地 DNS 服务器(LDNS)。
- 递归与迭代 :若 LDNS 无缓存,它会依次询问:根 DNS (指引 TLD) -> 顶级域 DNS (指引权威) -> 权威 DNS(给出最终 IP)。
3. 第三步:协议栈的指南针(TCP 与 IP)
获取 IP 后,浏览器通过调用 Socket 库 委托操作系统协议栈工作。
🛠️ 传输层:可靠性(TCP)
-
TCP 头部关键字段 :
- 端口号:源端口(随机)+ 目标端口(HTTP 80 / HTTPS 443)。
- 序列号 (Seq):解决乱序问题。
- 确认号 (Ack):解决丢包重传问题。
- 窗口大小:流量控制。
-
TCP 三次握手(核心中的核心) :
- C -> S (SYN):携带客户端 ISN_C。
- S -> C (SYN+ACK):确认 C 的 SYN,携带服务端 ISN_S。
- C -> S (ACK):确认 S 的 SYN,双方进入 ESTABLISHED。
- 为什么需要三次? 确认双方双向收发能力;防止旧连接混淆。
-
数据分割 :若数据超过 MSS (最大报文长度),TCP 会将其拆分成一个个 Segment。
🛠️ 网络层:远程定位(IP)
- IP 头部关键字段 :
- 源 IP + 目的 IP。
- 协议号 :TCP 对应
06。
- 源地址选择(路由表) :
- 操作系统通过
route -n查看路由表。 - 将目的 IP 与各条目子网掩码 进行 与运算,匹配 Destination。
- 若无匹配,则走 默认网关 (0.0.0.0)。
- 操作系统通过
4. 总结与数据包封装全貌
| 层级 | 增加的内容 | 赋予的能力 |
|---|---|---|
| 应用层 | HTTP 报文 | 定义业务逻辑(我要什么资源) |
| 传输层 | TCP 头部 | 可靠传输:保证不丢包、不乱序(端口定位应用) |
| 网络层 | IP 头部 | 远程定位:通过路由表决定"下一跳"去哪 |
| 网络接口层 | MAC 头部 | 本地链路传输:在以太网内点对点传输 |
💡 面试高频 Q&A (基于面经总结)
Q1:为什么有了 IP 还需要 MAC 地址?(对应资料中 IP/MAC 部分)
A:IP 地址负责全局路径选择(规划路线),MAC 地址负责局域网内的硬件点对点跳转(实际踩油门转弯)。在以太网中,数据包必须封装 MAC 头才能被交换机识别。
Q2:传输层下面是网络层,发送端和接收端在网络层有联系吗?
A :没有联系。 网络层(IP)是"无连接"的,它只负责尽力而为地把包送到目的地。所谓的"连接"是**传输层(TCP)**通过维护状态机(三次握手)在逻辑上建立的。
Q3:什么是 MTU 和 MSS?
A:
- MTU:最大传输单元,以太网通常为 1500 字节(包含 IP 和 TCP 头)。
- MSS:最大报文段长度,是 TCP 扣除头部后能装载的净数据大小。TCP 在分段时会参考 MSS,防止在 IP 层被二次分片导致效率降低。
Q4:DNS 查找是递归还是迭代?
A:
- 电脑到本地 DNS :通常是递归查询(你帮我查到底)。
- 本地 DNS 到根/顶级/权威 DNS :通常是迭代查询(它告诉你下一步问谁,你亲自去问)。
复习小贴士:面试时建议边画图边讲解,特别是从 URL 解析到 TCP 三次握手,再到路由表匹配的逻辑,这能展现你对计算机网络体系结构的深度掌握。