使用 DoH 查询域名 —— 以 core.tantanapp.com 为例的实战分析

前言

在现代 iOS 应用中,为了确保 DNS 查询的隐私和完整性,我们可以使用 DoH(DNS over HTTPS) 来查询域名信息。

本文将以 https://cloudflare-dns.com/dns-query?name=core.tantanapp.com&type=A 为例,通过 Postman 发起一次标准的 DoH GET 请求,完整解析请求与响应内容,并深入讲解相关概念,比如:

  • type=A 的含义
  • 响应中 TTL 的作用
  • 结果如何理解
  • 代码+注释逐行讲解
  • 插图帮助理解域名解析跳转流程

请求分析

在 Postman 中,你发送了如下请求:

http 复制代码
GET https://cloudflare-dns.com/dns-query?name=core.tantanapp.com&type=A
Accept: application/dns-json

请求参数详解:

参数 说明
name 要查询的域名(这里是 core.tantanapp.com
type=A 查询类型是 A 记录(即获取 IPv4 地址)
Accept 请求头部,告诉服务器返回 JSON 格式的 DNS 响应

什么是 type=A

在 DNS 协议中,每个查询都有一个 "Type",指明你想要查询什么类型的资源。

Type 含义
A 查询域名对应的 IPv4 地址
AAAA 查询域名对应的 IPv6 地址
CNAME 查询域名的别名记录
MX 查询邮件服务器记录
TXT 查询文本信息记录

在这里,type=A 意味着我们想要查找 core.tantanapp.comIPv4 地址,即标准的访问 IP 地址。

✅ 这通常是 Web App、移动 App 访问服务器最常见的查询类型。


响应内容分析

服务器返回了以下 JSON 数据(已格式化并加注释):

json 复制代码
{
    "Status": 0,            // 0 表示查询成功
    "TC": false,            // TC = Truncated, 没有被截断
    "RD": true,             // RD = Recursion Desired, 允许递归查询
    "RA": true,             // RA = Recursion Available, 服务器支持递归查询
    "AD": false,            // AD = Authenticated Data, 响应未使用 DNSSEC 验证
    "CD": false,            // CD = Checking Disabled, 检查未禁用
    "Question": [
        {
            "name": "core.tantanapp.com",
            "type": 1          // 1 = A记录
        }
    ],
    "Answer": [
        {
            "name": "core.tantanapp.com",
            "type": 5,         // 5 = CNAME(别名)
            "TTL": 67,         // 生存时间,秒
            "data": "core.cf.vip.tantanapp.com."
        },
        {
            "name": "core.cf.vip.tantanapp.com",
            "type": 5,
            "TTL": 67,
            "data": "core.tantanapp.com.cdn.cloudflare.net."
        },
        {
            "name": "core.tantanapp.com.cdn.cloudflare.net",
            "type": 1,
            "TTL": 247,
            "data": "104.18.11.175"
        },
        {
            "name": "core.tantanapp.com.cdn.cloudflare.net",
            "type": 1,
            "TTL": 247,
            "data": "104.18.10.175"
        }
    ]
}

响应字段重点解释

1. Status = 0

  • 0 表示查询成功。
  • 如果返回其他值,比如 3(Name Error),就表示域名不存在。

2. Answer 数组

DNS 查询的最终结果都在 Answer 中。

第一条记录:
  • name: core.tantanapp.com
  • type: 5 → 表示是 CNAME(别名)记录
  • data: core.cf.vip.tantanapp.com.

👉 说明 core.tantanapp.com 并没有直接绑定 IP,而是指向了 core.cf.vip.tantanapp.com

第二条记录:
  • name: core.cf.vip.tantanapp.com
  • type: 5 → 再次是 CNAME(别名)
  • data: core.tantanapp.com.cdn.cloudflare.net

👉 继续跳转,最终指向 Cloudflare 的 CDN 域名。

第三、四条记录:
  • name: core.tantanapp.com.cdn.cloudflare.net
  • type: 1 → 这才是最终的 A 记录
  • data: 104.18.11.175104.18.10.175

👉 终于拿到最终的服务器 IPv4 地址!


什么是 TTL?

每条记录里都有一个 TTL 字段,比如 67 秒 或 247 秒。

  • TTL(Time To Live) 表示这条 DNS 记录在缓存中可以保存多久(单位:秒)。
  • 过期后客户端必须重新查询 DNS,获取最新的 IP 地址。

📌 举例:

如果 TTL = 67,表示 67 秒内你都可以直接使用缓存 IP,不用再次请求 DNS 服务器。

这可以显著减少延迟和服务器压力,同时在 IP 改变时能够及时刷新。


整体解析跳转流程图

为了更直观理解,我们用一个简单流程图总结整个解析过程:

复制代码
[core.tantanapp.com]
         ↓ (CNAME)
[core.cf.vip.tantanapp.com]
         ↓ (CNAME)
[core.tantanapp.com.cdn.cloudflare.net]
         ↓ (A记录)
[104.18.11.175] 和 [104.18.10.175]

小结

通过本次 Postman 测试,我们清楚了解了:

项目 内容
查询类型 A,查询域名对应的 IPv4 地址
返回数据 包含多层 CNAME 跳转,最终指向真实 IP
TTL 每条记录缓存的有效时间(秒)
使用场景 验证 App 的请求路径、抵御 DNS 劫持、缓存优化

掌握这种查询和解析流程,对于网络安全、性能优化和网络故障排查,都是非常实用的技能!


相关推荐
zhishishe20 分钟前
如何修复卡在恢复模式下的 iPhone:简短指南
windows·macos·ios·objective-c·cocoa·iphone
桃花仙丶22 分钟前
iOS/Flutter混合开发之PlatformView配置与使用
flutter·ios·xcode·swift·dart
只可远观5 小时前
Mac搭建Flutter IOS环境详细指南
前端·flutter·macos·ios
一牛6 小时前
译:Swift中的隔离机制介绍
macos·ios·swift
长沙火山15 小时前
SwiftUI 8.List介绍和使用
ios·list·swiftui
努力成为包租婆1 天前
iOS18 MSSBrowse闪退
ios·objective-c
画个大饼1 天前
Swift:什么是Optional?其背后的机制是什么?什么是Unconditional Unwrapping?
开发语言·ios·swift
鸿蒙布道师1 天前
鸿蒙NEXT开发正则工具类RegexUtil(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei