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,决定把包发往哪个网关。

动作:添加 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 服务器后,过程正好相反(解封装):

  1. 物理层:接收电信号,转回二进制。
  2. 数据链路层:拆掉以太网头,检查 MAC 地址对不对,校验数据是否损坏。
  3. 网络层:拆掉 IP 头,看到目的 IP 是自己,于是继续往上送。
  4. 传输层:拆掉 UDP 头,看到目的端口是 53,知道这是给 DNS 服务的。
  5. 应用层:DNS 服务进程读取报文:“哦,他在找 google 的 IP”,然后查表回复。