专栏首页趣谈编程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 条评论
登录 后参与评论

相关文章

  • DNS原理入门

    DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。

    用户1260737
  • 这可能是迄今为止最好的一篇正则入门教程-上

    30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。

    用户1260737
  • 看故事,学排序

    在面试的过程中,有的面试官也会问到这个排序。今天我们看一个故事来感受一下冒泡排序的过程。

    用户1260737
  • DNS 原理

    DNS (Domain Name System)域名系统。是提供根据域名找到对应的 IP 的服务。 Http 协议访问一个网址时,其实是根据 ip 地址进行访...

    java404
  • DNS 报文结构和个人 DNS 解析代码实现——解决 getaddrinfo() 阻塞问题

    实际应用中发现一个问题,在某些国家/ 地区的某些 ISP 提供的网络中,程序在请求 DNS 以连接一些服务器的时候,有时候会因为 ISP 的 DNS 递归查询太...

    amc
  • 域名污染是什么玩意?怎么解决?

    1.点“开始”-“运行”-输入CMD,再输入 ipconfig /all ,在下“DNS SERVER”里找到你使用的DNS服务器地址。

    用户3355187
  • DNS(上) 之原理与搭建篇

    lonelyvaf
  • DNS

    版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.ne...

    zy010101
  • Ubuntu Server 第八章 DNS服务

    这章的内容为DNS服务,远程管理一章中使用PUTTET,利用Hosts文件是域名指向对方IP,其实就已经涉及到了DNS。

    天钧
  • 谁劫持了我的DNS:全球域名解析路径劫持测量与分析

    或许你已知道网络中几乎所有的DNS请求都是通过明文进行传输的,但是你是否相信,这一协议设计的缺陷,已经开始被用于域名解析路径劫持了?

    周俊辉

扫码关注云+社区

领取腾讯云代金券