透视 HTTP 协议
罗剑锋(Chrono)
前奇虎 360 技术专家,Nginx/OpenResty 开源项目贡献者
63942 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
开篇词 (1讲)
透视 HTTP 协议
15
15
1.0x
00:00/00:00
登录|注册

06 | 域名里有哪些门道?

课下作业
小结
域名的“新玩法”
域名的解析
域名的用途
域名的形式
前置知识
域名和DNS

该思维导图由 AI 生成,仅供参考

在上一讲里,我们学习了 HTTP 协议使用的 TCP/IP 协议栈,知道了 HTTP 协议是运行在 TCP/IP 上的。
IP 协议的职责是“网际互连”,它在 MAC 层之上,使用 IP 地址把 MAC 编号转换成了四位数字,这就对物理网卡的 MAC 地址做了一层抽象,发展出了许多的“新玩法”。
例如,分为 A、B、C、D、E 五种类型,公有地址和私有地址,掩码分割子网等。只要每个小网络在 IP 地址这个概念上达成一致,不管它在 MAC 层有多大的差异,都可以接入 TCP/IP 协议栈,最终汇合进整个互联网。
但接入互联网的计算机越来越多,IP 地址的缺点也就暴露出来了,最主要的是它“对人不友好”,虽然比 MAC 的 16 进制数要好一点,但还是难于记忆和输入。
怎么解决这个问题呢?
那就“以其人之道还治其人之身”,在 IP 地址之上再来一次抽象,把数字形式的 IP 地址转换成更有意义更好记的名字,在字符串的层面上再增加“新玩法”。于是,DNS 域名系统就这么出现了。

域名的形式

在第 4 讲曾经说过,域名是一个有层次的结构,是一串用“.”分隔的多个单词,最右边的被称为“顶级域名”,然后是“二级域名”,层级关系向左依次降低。
最左边的是主机名,通常用来表明主机的用途,比如“www”表示提供万维网服务、“mail”表示提供邮件服务,不过这也不是绝对的,名字的关键是要让我们容易记忆。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

域名系统是互联网的重要基础设施,通过域名解析将域名转换成IP地址,实现了互联网访问的便捷性和稳定性。本文深入浅出地介绍了域名系统的原理和运作机制,包括域名的层次结构、域名解析过程以及在Web服务器、命名空间和其他应用领域的应用。文章还介绍了在Nginx中用于配置DNS服务器的resolver指令,以及域名实现的负载均衡的方式。通过对域名和DNS的解析,读者可以了解域名系统在互联网中的重要性和应用价值。文章还提出了课下作业,让读者通过实际操作来加深对域名系统的理解。整体而言,本文对域名系统进行了全面而深入的介绍,适合对互联网基础设施感兴趣的读者阅读学习。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《透视 HTTP 协议》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(99)

  • 最新
  • 精选
  • Wendy
    比如你有一个网站要上线,你在域名注册商那里申请了abc.com,那么你的域名A记录就保存在这个域名注册商的DNS服务器上,该DNS服务器称为权威域名服务器。当客户端访问abc.com时,先查找浏览器DNS缓存,没有则查找操作系统DNS缓存,在这一阶段是操作系统dnscache clinet 服务进行DNS缓存的(你在任务管理器里面可以看到一个dns客户端进程,就是这玩意实现缓存的),如果还是没有则查找hosts文件中的域名记录。然后依然没有的话则访问电脑上设置的DNS服务器IP,比如三大营运商的dns服务器或者谷歌的8.8.8.8,此时这一层的DNS服务器称为“野生DNS缓存服务器”,也就是非权威域名服务器。如果还是没有则非权威域名服务器会去查找 根域名服务器-顶级域名服务器-二级域名服务器-权威域名服务器 ,这样客户端就在权威域名服务器上找到了abc.com对应的IP了,这个IP可以是多个,每次客户端请求的时候域名服务器会根据负载均衡算法分配一个IP给你。当DNS缓存失效了,则重新开始新一轮的域名请求。 总结如下: 浏览器缓存->操作系统dnscache ->hosts文件->非权威域名服务器->根域名服务器->顶级域名服务器->二级域名服务器->权威域名服务器。 其中非权威域名服务器还包括LDNS(企业内网DNS服务器),三大营运商DNS,谷歌公开的DNS,微软公开的DNS等。 另外DNS请求有两种方式:递归查询和迭代查询,这方面大家可以网上了解一下。LDNS往后面查询一般是递归查询,因为公司内网是有防火墙的,全部请求通过LDNS来递归查询然后把结果给内网用户。 以上为自己理解整理的,若有错误还请大家指正。

    作者回复: 整理的非常完善非常好,感谢补充!

    2019-08-31
    12
    226
  • Yif
    GFW就是使用了这些恶意的DNS

    作者回复: ……

    2019-06-10
    17
    210
  • 初音未来
    应该是先查找本地hosts文件,在查找缓存吧

    作者回复: 浏览器缓存->操作系统缓存->hosts->dns

    2019-06-12
    2
    41
  • 肥low
    老师好! 第一个问题: 1、检查本地dns缓存是否存在解析"www.不存在.com"域名的ip 2、如果没有找到继续查找本地hosts文件内是否有对应的固定记录 3、如果hosts中还是没有那就根据本地网卡被分配的 dns server ip 来进行解析,dns server ip 一般是“非官方”的ip,比如谷歌的“8.8.8.8”,本身它也会对查找的域名解析结果进行缓存,如果它没有缓存或者缓存失效,则先去顶级域名服务器“com”去查找“不存在.com”的域名服务器ip,结果发现不存在,于是直接返回告诉浏览器域名解析错误,当然这两次查找过程是基于udp协议 第二个问题:如果dns失效或出错,那就访问不了了呗,我现在有个域名在国外某些国家每天都有不少访问失败的http请求,客户端直接报“Failed host lookup”的错误

    作者回复: √

    2019-06-13
    4
    36
  • 何用
    为何全世界只有 13 组根域名服务器呢?

    作者回复: 细节原因不好解释,简单来说是因为dns协议还有udp协议里包大小的限制,只有512字节,再除以dns记录长度,最多15组,再去掉buffer。

    2019-06-10
    33
  • Chuan
    老师好: 对于DNS解析的过程:浏览器DNS缓存->操作系统缓存->Hosts文件->非权威域名服务器->根域名服务器->顶级域名服务器->权威域名服务器。一直对浏览器/本机如何知道根服务器地址存在疑惑。 在查阅《计算机网络自顶向下方法》后发现,我们在连接某个ISP时,ISP一般会给我们提供一个IP地址,同时该地址拥有一台或多台DNS服务器地址(通过DHCP)。所以我们在Hosts文件中找不到时,会去查询这个局域网DNS服务器,如果没有查到,它会帮我们去查询根NDS服务器、顶级域名服务器和权威域名服务器,然后返回给本机,同时进行缓存。 个人认为,如果我们自己配置了非权威DNS服务器,如8.8.8.8,它应该也会帮我们去查询根NDS服务器、顶级域名服务器和权威域名服务器。 这些远程查询都是基于UDP协议,通常使用53号端口。 不知道以上理解是否正确?

    作者回复: 是的,你学习的很仔细。 一般上网的时候都会有默认dns,都配置好了,所以通常都感觉不到。 但默认dns有的时候性能不好,所以才会有很多的免费dns。

    2019-06-28
    3
    23
  • 1:在浏览器地址栏里随便输入一个不存在的域名,比如就叫“www. 不存在.com”,试着解释一下它的 DNS 解析过程。 首先,非常感谢老师和评论区的同学,我的认知又被刷新了,之前只模糊认识到有一个翻译的过程,把域名解析成对应的IP地址,然而光域名解析这一个动作就有一长串组合拳,目的除了便于人类的记忆和理解,剩下的核心就是提速。 提速的关键是,第一尽可能的少做事情,第二是尽可能的少做慢动作,怎么来实现呢?合适的数据结构和算法+缓存(可能是多级缓存),这里都是有体现的,比如:域名服务器的树行结构,各种缓存机制。 OK,回答问题,这里仅是整理,我之前确实不知道有这么多门道。 第一:拿着域名去浏览器缓存中查找,这里有些疑问,浏览器中缓存在哪里?过期时间大概多久?过期机制是什么? 第二:去操作系统缓存中去查找,同样的疑问,缓存在哪里?过期时间多久?过期机制是什么?怎么确认一下? 第三:去hosts文件中查找,这个文件还好进程修改,那么每个操作系统这个文件都必须在默认的路径下吗?否则就需要全部文件遍历一下啦? 第四:去非权威DNS服务器中查找,到此这些都可以认为是一种缓存思想的运用,把域名和IP的映射关系信息放在更快的存储设备之上,把这份信息放在离用户更近的地方,来加速用户通过域名获取IP的速度。 第五:去根域名DNS服务器中查找,注意,此时仅拿着根域名去查找,下面的查找过程有一定的层次结构,这样不仅查找的信息少存储的信息也会少,速度也会更快一些 第六:去顶级域名DNS服务器中查找,此时拿的信息是“com”查找“不存在.com”,确实查不到,然后就抛出异常,逐级返回了,最后把找不到的提升信息给到用户——无法访问此网站,找不到www.不存在.com的服务器IP地址 第七:假设第六步找到了,则会继续去二级域名DNS服务器去查找,根据“不存在.com”找“ww.不存在.com” 第八:去权威DNS服务器中找到“ww.不存在.com”对应的IP地址 第九:然后返回,在返回的过程中会更新操作系统缓存,浏览器缓存,不知道非权威DNS服务器中的域名和IP映射信息是怎么进去的,是定时加载嘛? 2:如果因为某些原因,DNS 失效或者出错了,会出现什么后果? 会出现“无法访问此网站,找不到www.XXX.com的服务器IP地址”

    作者回复: 写的很用心,整理一下可以在公司内部开分享会了。 你提的这些问题其实是属于操作系统、浏览器、DNS服务器自己的问题,如何处理缓存、查找文件都有自己的策略,在协议层面是不太关心的,太细节的方面我也没办法回答,不过有好奇心和求知欲总是好事,有答案欢迎分享给大家。

    2020-03-24
    3
    16
  • 数学汤家凤
    域名解析过程 浏览器缓存 -> OS 缓存 -> hosts 文件 -> 本地域名服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权威域名服务器 客户端向本地域名服务器获取,是递归查询 本地域名服务器向根域名服务器获取,可以是递归也可是迭代 递归就是你交给别人,让别人查到,在返回给你 迭代就是你找别人要,他叫你去别的地方找

    作者回复: great

    2020-07-10
    3
    10
  • 海盗船长
    chrome chrome://net-internals/#dns 查看和清空缓存 windows查看系统缓存: ipconfig /displaydns 显示已有缓存 ipconfig /displaydns > C:\Users\SDWQ\Desktop\1.txt 导出到再查看。 ipconfig /flushdns 强制更新缓存

    作者回复: 这些小工具用来在实验环境测试很方便。

    2020-05-10
    9
  • 梦倚栏杆
    老师好,我有两个疑问: 1.终极dns的解析是有谁实现的或者谁规定的: 比如乔布斯有个苹果域名:www.apple.com,苹果电脑的官网;张三也想为水果苹果申请个域名(www.apple.com)来展示他的苹果;结果我们几乎可以猜测到,他是申请失败的,原因已经有一个苹果存在了,谁来评判这个苹果域名已经被占用了呢?判断逻辑是如何来的,如果两个申请发生在同时呢? 2. ip地址的分配和身份证号一样吗?有地址在里面吗? 比如1-45属于美国的网段,或者属于哪个超大公司的网段。如果有,那是不是就以为着预分配,也就意味着部分ip段的浪费,如果没有,那ip地址从一个地方查找另外一个地方怎么找呢?莫非每个初始的线路都需要访问到根DNS

    作者回复: 域名由专门的域名注册机构管理,终极的是ICANN。 IP地址的分配也由ICANN管理,当然有浪费,美国是互联网的发明国,所以占用ip地址最多。 ip地址查找由专门的协议,比如arp。 这些比较偏底层,离http比较远,可以再找其他资料学习。。

    2019-06-10
    6
收起评论
显示
设置
留言
99
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部