NDS查询流程
1. 应用层 (Application Layer)
动作:封装 DNS 请求报文
当你输入网址时,浏览器发现本地缓存没有该 IP,于是调用操作系统的解析器。
- 生成内容:产生一个 DNS 查询报文,里面包含关键信息:“请问
www.google.com的 IP 地址是多少?” - 协议:DNS 协议(通常使用 UDP 协议,因为查询任务小、要求快)。
2. 传输层 (Transport Layer)
动作:添加端口号(数据段 Segment)
数据包下移到传输层。
- 封包:给 DNS 报文加上一个 UDP 首部。
- 关键信息:
- 源端口:客户端随机开启的一个高端口(如 54321)。
- 目的端口:53(这是 DNS 服务器的标准监听端口)。
- 意义:确保数据回到你的电脑时,能准确找到是哪个进程在等这个结果。
3. 网络层 (Network Layer)
动作:添加 IP 地址(数据包 Packet)
数据下移到网络层。
- 封包:加上 IP 首部。
- 关键信息:
- 源 IP:你电脑的局域网 IP(如
192.168.1.5)。 - 目的 IP:DNS 服务器的 IP(如 Google 的
8.8.8.8或运营商提供的 DNS)。
- 源 IP:你电脑的局域网 IP(如
- 路由决策:路由器会根据这个目的 IP,决定把包发往哪个网关。
4. 数据链路层 (Data Link Layer)
动作:添加 MAC 地址(数据帧 Frame)
这是最容易被忽略的一步,也是局域网传输的核心。
- 封包:加上 以太网首部 和 FCS 校验序列。
- 关键信息:
- 源 MAC:你电脑网卡的物理地址。
- 目的 MAC:下一跳设备的 MAC 地址(通常是你的家用路由器/网关)。
- 注意:这里如果不知道网关的 MAC,会先触发一个 ARP 协议去询问。
核心节点:路由器的 NAT 转换
当 DNS 请求(UDP 包)到达路由器时,会发生以下变换:
| 属性 | 进入路由器前 (LAN) | 离开路由器后 (WAN) |
|---|---|---|
| 源 IP | 你的私网 IP (如 192.168.x.x) |
路由器的公网 IP |
| 源端口 | 你的原始端口 (如 54321) |
路由器 NAT 映射的新端口 |
| 目的 IP | DNS 服务器 IP (8.8.8.8) |
不变 |
| 目的 MAC | 路由器的内网 MAC | 下一跳(ISP 运营商)的 MAC |
为什么要改端口? 因为如果宿舍/实验室里多个人同时访问 Google,路由器必须通过不同的公网端口来区分回传的 DNS 响应应该给哪台电脑。
5. 物理层 (Physical Layer)
动作:比特流传输
- 转换:将上述完整的“数据帧”转换成电信号、光信号或无线电波(WiFi)。
- 传输:通过网线或空气发往你的路由器。
6. 到达 DNS 服务器后的“逆向工程”
当数据包经过漫长的互联网路径到达 DNS 服务器后,过程正好相反(解封装):
- 物理层:接收电信号,转回二进制。
- 数据链路层:拆掉以太网头,检查 MAC 地址对不对,校验数据是否损坏。
- 网络层:拆掉 IP 头,看到目的 IP 是自己,于是继续往上送。
- 传输层:拆掉 UDP 头,看到目的端口是 53,知道这是给 DNS 服务的。
- 应用层:DNS 服务进程读取报文:“哦,他在找 google 的 IP”,然后查表回复。