网络知识扫盲,一文搞懂 DNS


作者 |?写代码的明哥
来源 |?Python编程时光
头图 | CSDN付费下载自视觉中国
在找工作面试的过程中,面试官非常喜欢考察基础知识,除了数据结构与算法之外,网络知识也是一个非常重要的考察对象。
而网络知识,通常是很抽象,不容易理解的,有很多同学就在这里裁了跟头。为了更好地通过面试,本文讲进行一次网络知识大扫盲,聊一聊网络知识最基本的DNS。

DNS 是什么?
DNS是 Domain Name System 的缩写,也就是 域名解析系统,它的作用非常简单,就是根据域名查出对应的 IP地址。
你可以把它想象成一本巨大的电话本,比如当你要访问域名www.163.com,首先要通过DNS查出它的IP地址是112.48.162.8。

域名的层级
由于后面我会讲到 DNS 的解析过程,因此需要你对域名的层级有一些了解
根域名 :.root 或者 . ,通常是省略的
顶级域名,如?.com,.cn?等
次级域名,如?baidu.com?里的?baidu,这个是用户可以进行注册购买的
主机域名,比如?baike.baidu.com?里的baike,这个是用户可分配的
主机名.次级域名.顶级域名.根域名 baike.baidu.com.root

DNS 解析过程
咱们以访问 www.163.com 这个域名为例,来看一看当你访问 www.163.com 时,会发生哪些事:
先查找本地 DNS 缓存(自己的电脑上),有则返回,没有则进入下一步
查看本地 hosts 文件有没有相应的映射记录,有则返回,没有则进入下一步
向本地 DNS 服务器(一般都是你的网络接入服务器商提供,比如中国电信,中国移动)发送请求进行查询,本地DNS服务器收到请求后,会先查下自己的缓存记录,如果查到了直接返回就结束了,如果没有查到,本地DNS服务器就会向DNS的根域名服务器发起查询请求:请问老大, www.163.com 的ip是啥?
根域名服务器收到请求后,看到这是个 .com 的域名,就回信说:这个域名是由 .com 老弟管理的,你去问他好了,这是.com老弟的联系方式(ip1)。
本地 DNS 服务器接收到回信后,照着老大哥给的联系方式(ip1),马上给 .com 这个顶级域名服务器发起请求:请问 .com 大大,www.163.com 的ip 是啥?
.com 顶级域名服务器接收到请求后,看到这是 163.com 的域名,就回信说:这个域名是 .163.com 老弟管理的,你就去问他就行了,这是他的联系方式(ip2)
本地 DNS 服务器接收到回信后,按照前辈的指引(ip2),又向 .163.com 这个权威域名服务器发起请求:请问 163.com 大大,请问 www.163.com 的ip是啥?
163.com 权威域名服务器接收到请求后,确认了是自己管理的域名,马上查了下自己的小本本,把 www.163.com 的ip告诉了 本地DNS服务器。
本地DNS服务器接收到回信后,非常地开心,这下总算拿到了www.163.com的ip了,马上把这个消息告诉了要求查询的客户(就是你的电脑)。由于这个过程比较漫长,本地DNS服务器为了节省时间,也为了尽量不去打扰各位老大哥,就把这个查询结果偷偷地记在了自己的小本本上,方便下次有人来查询时,可以快速回应。
总结起来就是三句话:
从"根域名服务器"查到"顶级域名服务器"的NS记录和A记录(IP地址)
从"顶级域名服务器"查到"次级域名服务器"的NS记录和A记录(IP地址)
从"次级域名服务器"查出"主机名"的IP地址


DNS的缓存时间
上面的几个步骤里,可以看到有两个地方会缓存 DNS 的查询记录,有了缓存,在一定程度上会提高查询效率,但同时在准确率上会有所损失。
因此我们在配置 DNS 解析的时候,会有一个 TTL 参数(Time To Live),意思就是这个缓存可以存活多长时间,过了这个时间,本地 DNS 就会删除这条记录,删除了缓存后,你再访问,就要重新走一遍上面的流程,获取最新的地址。


DNS 的记录类型
当我们在阿里云买了一个域名后,可以配置我们主机域名解析规则,也就是?记录。
阿里云 域名云解析常见的 DNS 记录类型如下
A:地址记录(Address),返回域名指向的IP地址。 NS:域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。 MX:邮件记录(Mail eXchange),返回接收电子邮件的服务器地址。 CNAME:规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转,详见下文。 PTR:逆向查询记录(Pointer Record),只用于从IP地址查询域名,详见下文。

DNS 报文结构

事务 ID:DNS 报文的 ID 标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的。 标志:DNS 报文中的标志字段。 问题计数:DNS 查询请求的数目。 回答资源记录数:DNS 响应的数目。 权威名称服务器计数:权威名称服务器的数目。 附加资源记录数:额外的记录数目(权威名称服务器对应 IP 地址的数目)。

Wireshark抓包实战
DNS 是应用层协议,传输层协议使用的是 UDP DNS 默认端口是 53



Transaction ID
Flags
QR(Response):查询请求/响应的标志信息。查询请求时,值为 0;响应时,值为 1。 Opcode:操作码。其中,0 表示标准查询;1 表示反向查询;2 表示服务器状态请求。 AA(Authoritative):授权应答,该字段在响应报文中有效。值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器。 TC(Truncated):表示是否被截断。值为 1 时,表示响应已超过 512 字节并已被截断,只返回前 512 个字节。 RD(Recursion Desired):期望递归。该字段能在一个查询中设置,并在响应中返回。该标志告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为 0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表。这种方式被称为迭代查询。 RA(Recursion Available):可用递归。该字段只出现在响应报文中。当值为 1 时,表示服务器支持递归查询。 Z:保留字段,在所有的请求和应答报文中,它的值必须为 0。 rcode(Reply code):返回码字段,表示响应的差错状态。当值为 0 时,表示没有错误;当值为 1 时,表示报文格式错误(Format error),服务器不能理解请求的报文;当值为 2 时,表示域名服务器失败(Server failure),因为服务器的原因导致没办法处理这个请求;当值为 3 时,表示名字错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在;当值为 4 时,表示查询类型不支持(Not Implemented),即域名服务器不支持查询类型;当值为 5 时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。
Answer RRs
Authority RRs
Additionnal RRs
Answers
DNS 劫持 与 HTTP 劫持
DNS劫持是你想去机场的时候,把你给丢到火车站。 HTTP劫持是你去机场途中,有人给你塞小广告。

工具的使用
dig 命令

我们的本地 DNS 服务器 ip 为 192.168.1.1,端口为53,你可以在 /etc/resolv.conf 里看到这个配置 根域名服务器目前全球一共只有十三台,从a.root-servers.net. 到m.root-servers.net. ,它们对应的ip地址,已经内置在本地DNS服务器中。



host 命令

whois命令

nslookup命令



手动清理本地缓存
$ sudo dscacheutil -flushcache$ sudo killall -HUP mDNSResponder
$?ipconfig?/flushdnsLinux
# 使用NSCD的DNS缓存$ sudo /etc/init.d/nscd restart# 服务器或者路由器使用DNSMASQ$ sudo dnsmasq restart【END】
更多精彩推荐
点击阅读原文,精彩继续。
你点的每个“在看”,我都认真当成了喜欢
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 中央经济工作会议在北京举行 7904134
- 2 紧急提醒:请在日中国公民进行登记 7809076
- 3 中央定调明年继续“国补” 7714016
- 4 “九天”无人机成功首飞 7618367
- 5 断崖式降温!今冬最强寒潮来了 7519787
- 6 中央经济工作会议释信号:3件事不做 7426402
- 7 中国“空中航母”首飞成功 7331649
- 8 88岁爷爷机场接孙女几度认不出 7236430
- 9 人民空军中日双语发文:大惊小怪 7140245
- 10 寒潮来袭 “速冻”模式如何应对 7046663












CSDN
