使用 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 劫持、缓存优化

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


相关推荐
在下历飞雨1 天前
AI+Kuikly自研DSL初体验:让UI开发更简洁优雅
ios·vibecoding
zzywxc7871 天前
深入探讨AI三大领域的核心技术、实践方法以及未来发展趋势,结合具体代码示例、流程图和Prompt工程实践,全面展示AI编程的强大能力。
人工智能·spring·机器学习·ios·prompt·流程图·ai编程
CocoaKier1 天前
推荐一个网站,一句话生成网站应用和小程序
前端·ios·ai编程
他们都不看好你,偏偏你最不争气1 天前
【iOS】 懒加载
ios
MoSheng菜鸟2 天前
React Native开发
android·react.js·ios
Digitally2 天前
3种通过USB从电脑传输文件到iPad的方法
ios·电脑·ipad
如此风景2 天前
SwiftUI基础学习
ios
雪糕吖2 天前
SwiftUI 自定义 Shape:实现顶部圆角矩形 RoundedTopRectangle
ios·swiftui
JarvanMo2 天前
2025 年真正有效的 App Store 优化(ASO)
前端·ios