本文首发于公众号:腐烂的橘子

本文梗概:

  • DNS 是什么,有什么作用
  • 一条 DNS 记录是什么样的
  • DNS 域名解析原理
  • DNS 服务器如何抵御攻击

DNS 是什么,有什么作用

DNS(Domain Name System)是一种应用层协议,用于映射域名和 ip 地址。

为什么要做映射呢?就像可以用身份证号来对应一个人,也可以用电话对应一个人,但打招呼时我们不会说:“138xxxxxx,早上好”,而是会用名字来打招呼。同样的道理,人们在访问网站时希望用更容易被记住的域名,比如 www.baidu.com,而不是 213.22.345.33。但是对于网络设备而言,使用 ip 地址却比域名更友好,因为 ip 地址的格式更规范,更容易被机器理解。

DNS 最重要的作用是提供域名解析服务,除此之外,它的作用还有:

  • 规范主机名:www.baidu.com 可能只是一个别名,它可能会有一个规范主机名 relay1.east.baidu.com,别名比规范主机名更容易记忆,客户端可通过别名获取到规范主机名和 ip 地址
  • 邮件服务器别名:邮件服务器为了让自己的域名更号机,可能也会有一个邮件服务器别名,这个别名允许和 web 服务器一致,比如你开发的邮件服务器和 web 服务器可以都使用 www.enterprise.com 这个域名
  • 负载均衡:DNS 服务器可能会非常繁忙,所以一个域名可能对应若干个 ip 地址,这时会返回一个 ip 地址的集合,由于客户总是向集合里的第一个 ip 地址建立连接并传输数据,因此 DNS 服务器通过控制返回 ip 的顺序来达到负载均衡的目的

一条 DNS 记录是什么样的

与 DNS 记录相关的,最常见到的就是域名解析里的 A 记录和 CNAME 记录了,如下:

【域名解析记录图】

DNS 记录就是 DNS 服务器内保存的信息,是一个 4 元祖:

(Name, Value, Type, TTL)

这里比较好理解,Name 是域名,Value 是 ip,Type 是记录的类型,包含上图中的 A 记录和 CNAME 记录,TTL 是过期时间,代表这条记录多久后会失效。

我们可以使用 nslookup -debug www.rottenorange.cn 来查找 www.rottenorange.cn 相关的 DNS 记录:

de@MacBook-Pro ~ % nslookup  -debug www.rottenorange.cn
Server: 26.26.26.53
Address: 26.26.26.53#53 ------------
QUESTIONS:
www.rottenorange.cn, type = A, class = IN
ANSWERS:
-> www.rottenorange.cn
canonical name = z1ming.github.io.
ttl = 505
-> z1ming.github.io
internet address = 185.199.110.153
ttl = 3320
-> z1ming.github.io
internet address = 185.199.109.153
ttl = 3320
-> z1ming.github.io
internet address = 185.199.108.153
ttl = 3320
-> z1ming.github.io
internet address = 185.199.111.153
ttl = 3320
AUTHORITY RECORDS:
ADDITIONAL RECORDS:
------------
Non-authoritative answer:
www.rottenorange.cn canonical name = z1ming.github.io.
Name: z1ming.github.io
Address: 185.199.110.153
Name: z1ming.github.io
Address: 185.199.109.153
Name: z1ming.github.io
Address: 185.199.108.153
Name: z1ming.github.io
Address: 185.199.111.153

可以看到我们搜到了多条 A 类型的记录,对应多个 ip 地址,以及一个权威 DNS 记录 z1ming.github.io.。

Type 枚举有:

  • Type = A:主机名到 ip 地址,如 (relayl.bar.foo.com, 145.37.93.126, A)
  • Type = CNAME:主机名到规范主机名,如 (foo.com, relay1.bai.foo.com, CNAME)
  • Type = NS:域名到权威 DNS 主机名,如 (foo.com, dns.foo.con1, NS)
  • Type = MX:别名为 Name 的邮件服务器的规范主机名,如 (foo.com, mail.bar.foo.com, MX)

DNS 域名解析原理

假设你输入 www.baidu.com,如果都不命中缓存,会经历如下 4 类 DNS 服务器:

  • 本地 DNS 服务器:客户端会先请求本地 DNS 服务器,如果不命中缓存,则请求根服务器
  • 根服务器(DNS Root Nameserver):全球共 400 多台,由 13 个不同的组织管理(大部分是老美),根服务器的列表可以在 https://www.iana.org/domains/root/servers 里查到,如下图[1]。回到正题,请求根服务器会返回顶级域名权威服务器的 ip,对于 www.baidu.com,.com 保存在顶级域名服务器,根服务器返回 .com 所在的顶级域名服务器的 ip 地址
  • 顶级域名服务器(DNS TLD Nameserver):根据返回的 ip 查询顶级域名服务器,它保存了 baidu.com 所在的权威服务器的 ip
  • 权威服务器(DNS Authoritative Nameserver):这里保存了 www.baidu.com 域名对应的 ip,权威服务器将这个 ip 返回给本地 DNS 服务器,本地 DNS 服务器将这个 ip 返回给客户端,至此完成了一次 DNS 查询

DNS 服务器如何抵御攻击

常见的攻击方式有 DDoS(Distributed Denial-of-Service)泛洪攻击和中间人攻击,不过由于 DNS 服务器都有自己的本地缓存,客户端也有自己的浏览器缓存,所以至今还没有大规模 DNS 服务瘫痪的情况。

分布式拒绝服务 (DDoS) 攻击是拒绝服务 (DoS) 攻击的一个子类。[2]Dos 是使用一个服务器攻击,DDoS 是利用多个服务器组成一个僵尸网络来攻击。它们的特点是发送大量需要密集资源的数据包从而使网络出现大量超时、甚至瘫痪的情况。

所以 DNS 的 DDoS 攻击就是僵尸网络向 DNS 服务器发送大规模分组,使得大部分 DNS 请求得不到回答,比如向根域名服务器、或顶级域名服务器发起攻击。

而中间人攻击就是攻击者截获到 DNS 请求,并返回伪造的回答,这样客户端无感知地访问到了被攻击者重定向的网站。通常这种方式难以实现,因为中间人攻击要求截获分组或控制住服务器。[3]

参考

  1. https://www.iana.org/domains/root/servers
  2. https://www.imperva.com/learn/ddos/denial-of-service/
  3. 计算机网络:自顶向下方法(原书第七版)

后端每日一题 2:DNS 解析过程的更多相关文章

  1. DNS解析过程

    参考: http://www.maixj.net/ict/dns-chaxun-9208 http://blog.it985.com/8389.html DNS(Domain Name System) ...

  2. DNS解析过程和DNS挟持

    1.DNS解析过程详解 1).在浏览器中输入一个域名,例如www.tmall.com,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析, ...

  3. (转)DNS解析过程详解

    DNS解析过程详解 原文:http://blog.csdn.net/crazw/article/details/8986504 先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的 ...

  4. DNS解析过程详解(转载)

    DNS解析过程详解(转载) DNS Domain Name System 域名系统,它就是根据域名查出IP地址.    先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址ww ...

  5. 浏览器与DNS解析过程

    浏览器解析 1.地址栏输入地址后,浏览器检查自身DNS缓存 地址栏输入chrome://net-internals/#dns 查看. 2.浏览器缓存中未找到,那么Chrome会搜索操作系统自身的DNS ...

  6. DNS解析过程详解

    先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点 ...

  7. DNS解析过程和域名收敛、域名发散、SPDY应用

    前段时间项目要做域名收敛,糊里糊涂的完成了,好多原理不清晰,现在整理搜集下知识点. 域名收敛的目的是什么?简单来说就是域名解析慢.那为什么解析慢?且听下文慢慢道来. 什么是DNS? DNS( Doma ...

  8. 转载:DNS解析过程详解

    2015-09-20 此好文是转载,如有侵权联系我,立马删掉 DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com. ...

  9. DNS解析过程详解【转】

    转自:http://blog.chinaunix.net/uid-28216282-id-3757849.html 先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www. ...

  10. DNS解析过程--笔试答题版

    在运维笔试的时候,回答DNS解析的过程,不能写一大堆,一是不美观,二是浪费时间,应该怎么写呢?我觉得这样写比较好. 1.客户端:chche----hosts 2.DNS服务器:cache---递归-- ...

随机推荐

  1. rnacos版本更新为 v0.1.5

    rnacos是一个用 rust重新实现的nacos. rnacos比java实现的nacos更轻量.快速.稳定:合适在开发.测试.受资限服务等环境平替nacos服务使用. rnacos v0.1.5 ...

  2. 揭秘镭速传输点对点传输技术,NAT+Raysync强强组合

    点对点传输是一种文件即时传输方式用于实现数据的快速联动,为所有客户端提供资源,包括带宽.存储空间.计算能力.点对点传输技术有很多应用,包括共享各种格式音频.视频.数据等. 在5G重新定义带宽,信息技术 ...

  3. KingbaseESV8R6等待事件之LWLock buffer_mapping

    等待事件含义 当会话将数据块与共享缓冲池中的缓冲区关联时,会发生此等待事件. 类似Oracle cbc闩锁的是一种Kingbase的轻量级锁lwlock,这个锁的名字在不同数据库版本中可能有所不同,我 ...

  4. ue4-c++定时器和时间轴简易模板

    定时器Delay 在头文件中需要声明TimerHandle和功能函数,功能函数是计时结束后执行的功能 在源文件中利用GetWorldTimerManager()实现定时器的开启(绑定功能函数)和清除. ...

  5. 如何拿到接口返回的消耗token

    SemanticKernel 以下引用自官方案例 Text模型 使用Kernel FunctionResult functionResult = await kernel.InvokePromptAs ...

  6. #状压dp,拓扑排序,内向基环树#CF1242C Sum Balance

    题目 有 \(k\) 个盒子, 第 \(i\) 个盒子有 \(n_i\) 个数. 保证所有数互不相同. 从每个盒子各拿出一个数, 并按照某种顺序放回去(每个盒子恰好放入一个数). 判断是否能使操作后所 ...

  7. #提交答案题#LOJ 6467 'Zip' Quine

    题目 一种比较巧妙的方式 print 1 print 1 print 1 print 1 print 1 print 1 repeat 3 2 print 2 repeat 3 2 print 2 r ...

  8. #线段树,离散#nssl 1476 联

    分析 由于下标过大,考虑离散,不仅仅是区间左右端点 假设只有一个区间从1到\(x\),那么修改后答案应该是\(x+1\) 所以说还要记录右端点+1的位置,你以为这就能A了吗 为了避免标记被覆盖,无论是 ...

  9. #dp,模型转换,排列组合#AT1983 [AGC001E] BBQ Hard

    题目 有两个长度为\(n\)的序列\(a,b\),需要求 \[\sum_{i=1}^n\sum_{j=i+1}^nC(a_i+b_i+a_j+b_j,a_i+a_j) \] 其中\(n\leq 200 ...

  10. css实现带背景颜色的小三角

    <div id="first"> <p>带背景颜色的小三角实现是比较简单的</p> <span id="top"> ...