专栏首页趣谈编程DNS自述:我是如何为域名找到家的

DNS自述:我是如何为域名找到家的

对于互联网一代的我们,一出生就学会使用电脑。当我们对着浏览器地址栏输入www.baidu.com的时候,百度的首页就出现在面前。但你可曾想过,为什么我们输入www.baidu.com就可以弹出百度首页?在这弹指一挥间,到底发生了什么?今天就让我带你来揭开这背后发生的一切。

当我们开始之前,我们需要明白:虽然我们每次访问网页,都是使用域名的方式(例如:www.baidu.com)。但对于计算机来说,它最终访问的是域名对应的IP(例如:10.102.201.253)。所以今天我们要讲的这一切,其实就为了说清楚一件事情:DNS是如何为域名找到对应的 IP 地址的。

浏览器DNS缓存

当我们在浏览器地址栏输入域名后,浏览器首先会去其本身的 DNS 缓存中查找是否有对应域名的记录。如果有,那么直接访问对应的服务器。

不同浏览器会设置不同的 DNS 缓存时间,一般来说是 2-30 分钟之间。如果当你修改了系统 DNS 缓存后,发现访问还是没生效,你可以尝试清除下浏览器的 DNS 缓存。

系统DNS缓存

当浏览器在其自身的缓存中找不到对应域名的记录时,其将会去系统的 DNS 缓存中寻找记录。在 Windows 系统中,DNS 缓存信息存储在 C:/windows/system32/drivers/etc/hosts 中。而在 Mac OSX 系统中,DNS 缓存信息存储在 /etc/hosts 文件中。

但无论在哪个系统,该文件的格式都是域名的 IP 地址的映射。每一行是一个映射,前面是域名对应的 IP 地址,后面是对应的域名。

127.0.0.1 www.baidu.com
192.168.1.1 www.google.com

如上面的范例所示,其设置了当我们访问 www.baidu.com 时,我们直接访问 127.0.0.1 这台机器。而当我们访问 www.google.com 时,我们直接访问 192.168.1.1 这台机器。

所以很多时候,当我们在本地调试时我们可以设置任意的域名,只要该域名对应的 IP 存在对应的服务即可。例如像我这样喜爱写文章的程序员,我可以写这样设置一个域名的映射:

127.0.0.1 top-writer.google.com

当你的机子上访问 top-writer.google.com 的时候,请求自然就会转发到本机上,即使你并不是这个域名的所有者。

本地DNS服务器

如果在系统 DNS 也找不到域名的记录,那么浏览器就会去本地的 DNS 服务器(LDNS)上寻找该域名的记录。在这里的 LDNS 一般是指本机所设置的 DNS 服务器地址。例如在我的电脑上,其对应的 DNS 地址为:10.xxx.xxx.253。那么浏览器就会去这个 DNS 服务器上寻找域名对应的记录。

如果在 LDNS 服务器上找到了记录,那么就直接返回就可以。但如果还是没找到记录,那么就得进一步深入查找了。

根DNS服务器

当 LDNS 服务器还是招不到域名对应的记录时,那么其就会去根 DNS 服务器去寻找域名对应的记录。根 DNS 服务器全球只有 13 台,所以在 LDNS 服务器建立的时候,其会写死一个根 DNS 服务器的 IP 地址列表。

但实际上根 DNS 服务器并不存储所有域名的信息,其只存储顶级域名的解析记录。即对于我们访问的域名 www.baidu.com 来说,根 DNS 服务器并不能告诉我们 www.baidu.com 这个域名对应的 IP 是多少,它只能告诉我们 .com 这个顶级域名应该找哪个 DNS 服务器解析,然后把对应顶级 DNS 服务器的 IP 地址告诉我们。

顶级DNS服务器

我们访问域名 www.baidu.com 后,根 DNS 服务器告诉我们可以找对应的 .com 顶级 DNS 服务器解析。但实际上顶级 DNS 服务器只能解析二级域名的地址,即它只能告诉你:baidu.com 这个域名应该找哪台 DNS 服务器去解析。

这里我们从顶级 DNS 服务器解析 baidu.com 这个域名得到的 DNS 服务器,其实就是你买域名时用于管理解析的服务器。而且也是你设置域名 NS 记录时,设置的 DNS 服务器的地址。

趣谈编程注:NS记录就是域名服务器记录(Name Server),返回下一级域名信息的服务器地址,该记录只能设置域名,不能设置为IP地址。

次级域名服务器

上一步我们知道 baidu.com 这个顶级域名应该找哪台 DNS 服务器去解析(这台服务器我们称为次级域名服务器),其实这台 DNS 服务器就是我们购买域名时设置的用于解析的 DNS 服务器。在这台 DNS 服务器上,我们通过设置一条 A 记录(A 记录就是域名到 IP 地址的映射)就可以让某个域名与 IP 联系起来。

趣谈编程注:A记录就是地址记录(Address),返回域名指向的IP地址。

当浏览器去请求 baidu.com 返回的 DNS 服务器(次级域名服务器)时,就会去这台DNS服务器(次级域名服务器)上找www.baidu.com对应的IP地址。

总结

看到这里,相信大家都清楚了 DNS 寻址的整个流程了。总的来说,DNS 寻址的顺序为:

  • 浏览器 DNS 缓存
  • 系统 DNS 缓存
  • 本地 DNS 服务器
  • 根 DNS 服务器
  • 顶级 DNS 服务器
  • 次级域名服务器

如果到最后还是找不到解析记录,那么就直接报域名解析错误。在这个过程中,我们还可以学到两个重要的知识点,即:

第一,域名最终得到的 IP 地址,是通过类型为A的记录来得到的。 通过上面的解释,你会发现无论怎样设置,最终都会有一台 DNS 服务器去解析该域名。而在该 DNS 服务器上,必然存在一条解析类型为 A 的解析记录。如下图所示,我设置的是一条针对 hello.csyimg.com 域名的 A 记录,其指向了 192.168.1.1 这个 IP。如果最终找不到 A 记录,那浏览器就会报 DNS 解析错误。

第二,域名是由:主机名.二级域名.顶级域名.根域名组成的。 例如:www.baidu.com 中,www 就是主机名,.baidu 就是二级域名,.com 就是顶级域名。而在 .com 后面省略的 . 就是根域名。

想了解更多关于DNS的知识,后台回复DNS即可获得。

本文分享自微信公众号 - 趣谈编程(qutanbiancheng)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一名90后二流大学程序员的自述:我是如何从“菜鸟”到“辣鸡”的

    读过本文,能感受到作者作为典型90后不羁的一样,但文字内容远非作者自我调侃的那样从“菜鸟”到“辣鸡”。此文文笔流畅、思路清晰、主次明确,作者有激情且谦虚好学,这...

    JackJiang
  • 我是如何在自学编程9个月后找到工作的

    昨天在我在国外网站 reddit 上看到一篇文章,作者分享了他自学编程 9 个月后找到工作的经历。文章不到一天就得到3千多赞,2百条回复。我看了下内容,非常中肯...

    Crossin先生
  • 作为一名程序员,你真正了解CDN技术吗?

    将时光倒回到几年前,在那时候我的老家县城里,如果你从京东APP上购物下单,起码需要等上个几天时间,才能将商品送到你的手中。

    Bug开发工程师
  • 如何为 DNS 服务器添加反向解析记录

    前一篇文章我们介绍了如何快速搭建 DNS 服务器,本文将向大家介绍如何向 DNS 服务器添加反向解析记录,支持将指定的 IP 解析到对应的域名。

    9527
  • github 入门教程之 github 访问速度太慢怎么办

    github 是全世界最流行的开源项目托管平台,其代表的开源文化从根本上改变了软件开发的方式.

    雪之梦技术驿站
  • 在 Linux 终端中查找域名 IP 地址的命令(五种方法)

    本教程介绍了如何在 Linux 终端验证域名或计算机名的 IP 地址。本教程将允许你一次检查多个域。你可能已经使用过这些命令来验证信息。但是,我们将教你如何有效...

    砸漏
  • 一文搞懂 DNS 基础知识,收藏起来有备无患~

    DNS(Domain Name System), 也叫网域名称系统,是互联网的一项服务。它实质上是一个 域名 和 IP 相互映射的分布式数据库,有了它,我们就可...

    PHP开发工程师
  • HW实战:浅谈信息搜集中的自动化数据分析

    提到信息搜集其实大家都不陌生,但是或许有人会有疑问信息搜集中的数据分析是什么?在讲数据分析之前我们思考一个比较常见的问题,有哪些方式来确定两个域名是同一个公司的...

    腾讯安全应急响应中心
  • 一文搞懂 DNS 基础知识,收藏起来有备无患~

    DNS(Domain Name System), 也叫网域名称系统,是互联网的一项服务。它实质上是一个 域名 和 IP 相互映射的分布式数据库,有了它,我们就可...

    杰哥的IT之旅
  • 高并发架构的CDN知识介绍

    对一次网络请求过程的了解程度,一是展现你的专业知识;二是深刻的理解,让你在大型网站架构中做出更适合、可靠的架构。而DNS是这一切的出发点,本文结合一张常用架构图...

    大愚
  • Linux DNS 服务器安装、配置和维护

    每个 IP 地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台 IP 设备的 IP 地址,只要记住相...

    小小科
  • Linux DNS 服务器安装、配置和维护

    每个 IP 地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台 IP 设备的 IP 地址,只要记住相对...

    马哥linux运维
  • dns解析

    dns也可以认为是域名的解析,因为在实际的网络请求中,是通过ip来进行互访请求的,但是ip是四个字节的数字组成,不容易记住,能够更加方便的访问互联网,然后域名系...

    云售后焦俊成
  • 域名劫持事件发生后的应急响应策略

    Morphus实验室讲述了这样一个故事,在某周六的早上,你作为一家大公司的CSO(首席安全官),突然开始收到了雪片般飞来的消息。他们告诉你有游客在访问了你公司的...

    FB客服
  • 利用 nslookup 解析 DNS 记录

    nslookup 是一个域名解析工具,在进行一些网页无法打开的问题上,能帮助我们进行更全面理解问题的所在!

    信安之路
  • 《dig挖出DNS的秘密》-linux命令五分钟系列之三十四

    【初次见面】 我相信使用nslookup的同学一定比使用dig的同学多,所以还是有必要花些时间给大家介绍一下dig的。 dig,和nslookup作用有些类似,...

    小小科
  • DNS服务器

    DNS(Domain Name Server),域名服务器,其作用是提供域名解析ip(正向解析),ip解析域名(反向解析)的服务。

    用户9120000
  • CDN系列学习文章(二)——DNS调度

    本文主要介绍一下CDN调度,主要是DNS调度。介绍之前,咱们先聊聊CDN为啥要调度呢

    开元
  • DNS 记录简介

    域名系统(DNS,Domain Name System)是因特网的地址簿。DNS 通过映射不容易忘记的域名(例如example.com)到诸如192.0.2.8...

    StoneDemo

扫码关注云+社区

领取腾讯云代金券