🎨
Notes
  • 持续更新中...
  • articles
    • browser
      • 深入理解现代浏览器 - 导航
      • 深入理解现代浏览器 - 架构
      • 深入理解现代浏览器 - 交互
      • 深入理解现代浏览器 - 渲染器进程
    • dsa
      • DSA - 并查集
      • DSA - 哈希表
      • DSA - AVL 树
      • DSA - 二叉树
      • 快速选择
      • Big O 算法复杂度
      • DSA - 栈和队列
      • DSA - 前缀树 Trie
      • DSA - 图
      • DSA - 链表
      • DSA - 递归
    • typescript
      • TypeScript 学习笔记 - 任意属性 (Indexable Types)
      • 力扣的 TypeScript 面试题
      • TypeScript 学习笔记 - as const
      • TypeScript 学习笔记 - infer
    • network
      • Internet Protocol (IP)
      • 计算机网络基础
      • 如何分辨同源和同站
      • DNS 如何查询 IP 地址?
    • vue
      • Nuxt.js 入门
      • 从零实现一个 Mini Vue
      • 从零实现一个简单的 VDOM 引擎
      • 从零实现一个响应式状态管理
    • sorting
      • 排序 - 归并排序
      • 排序 - 冒泡排序
      • 排序 - 选择排序
      • 排序 - 计数排序
      • 排序 - 插入排序
    • compile
      • Compiler and Interpreter
      • Just-In-Time (JIT) Compilers
      • 编译流程
    • others
      • 什么是上下文无关语法
      • 如何在终端打印出有颜色的字
    • dev-ops
      • github-actions
        • GitHub Action 简介
        • GitHub Actions for CI
    • workflow
      • 用 Node 写一个 cli
      • 如何规范 git commit 信息
      • 如何监听 git hooks
      • 如何规范代码风格 - prettier
      • 如何发布一个 npm package
      • 如何规范代码质量 - eslint
    • design-pattern
      • 代理模式
      • 单例模式
      • 策略模式
    • security
      • 点击劫持
      • CSP 内容安全策略
    • javascript
      • 尾调用优化
      • 4种常见的内存泄漏及解决方法
    • unit-test
      • Test Vuejs Application - Chapter 2
      • Test Vuejs Application - Chapter 1
      • Vue Unit Test Intro
    • performance
      • HTTP 缓存
      • 如何优化图片资源
Powered by GitBook
On this page
  • 授权型 DNS 服务器
  • 递归型 DNS 服务器
  • 如何通过递归型 DNS 服务器查询 IP 地址?

Was this helpful?

  1. articles
  2. network

DNS 如何查询 IP 地址?

Previous如何分辨同源和同站Nextvue

Last updated 4 years ago

Was this helpful?

授权型 DNS 服务器

授权型 DNS 服务器(authoritative DNS server, aka, nameserver 名称服务器),会把它们所管理的域名下的所有 IP 地址存放在数据库中,我们向授权型 DNS 服务器查询某个域名的 IP 地址时,可以直接获取返回结果。

比如 github.com 的一个授权型 DNS 服务器是 ns-421.awsdns-52.com.,我们可以通过

dig @ns-421.awsdns-52.com github.com +short

直接查到 github.com 的 IP 地址,+short 是一个参数,表示只显示结果,隐藏其他查询细节。

不过通常客户端不会对授权型 DNS 服务器直接进行查询,而是通过递归型 DNS 服务器。

递归型 DNS 服务器

递归型 DNS 服务器(recursive DNS server)并不知道哪个域名对应哪个 IP 地址,它们是通过向授权型 DNS 服务器询问,最终找到正确的 IP 地址,然后把 IP 地址进行缓存以便再次查询。

dig github.com +trace

使用 +trace 参数会显示递归查询的过程。

如何通过递归型 DNS 服务器查询 IP 地址?

how_dns_works
  1. 用户在浏览器中输入 github.com;

  2. github.com 请求被路由到 DNS 解析程序(一般由 ISP 进行管理);

  3. 如果 ISP 的 DNS 解析程序上有 github.com IP 地址的缓存,直接返回缓存,如果没有缓存或者缓存已过期,那就继续查询;

  4. DNS 解析程序将请求转发到 DNS 根名称服务器(root nameserver);

  5. 根名称服务器根据请求的信息,决定把请求转发到 .com 域的一个 TLD(top-level domain)名称服务器;

  6. 对于这个请求,.com 域的名称服务器响应了 8 个与 github.com 相关的名称服务器;

  7. ISP 的 DNS 解析程序选择其中一个名称服务器 ns-421.awsdns-52.com. 并向它转发 github.com 请求;

  8. 这个名称服务器在托管 github.com 的区域找到相应的 IP 地址 13.229.188.59 返回;

  9. ISP 的 DNS 解析程序最终获取用户需要的 IP 地址,将它缓存起来,并把地址返回给浏览器;

  10. 浏览器将请求发送到 13.229.188.59;

  11. 13.229.188.59 上的 Web 服务器将页面返回显示在浏览器中。