后端每日一题 2:DNS 解析过程

dns · 浏览次数 : 0

小编点评

**DNS 是什么?** DNS 是一个应用层协议,用于映射域名和 IP 地址。它可以帮助人们访问互联网上的网站,并提供其他应用程序使用IP地址访问其他网站的功能。 **DNS 的作用是什么?** DNS 的主要作用是: * 提供域名解析服务:DNS 服务器将域名转换为 IP 地址,以便客户端在访问网站时正确获取 IP 地址。 * 规范主机名:DNS 服务器可以将主机名转换为 IP 地址,并确保所有设备都能访问相同的网站。 * 提供负载均衡服务:DNS 服务器可以将请求分配给多个 IP 地址,从而提高网站的性能。 **DNS 记录是什么?** DNS 记录是 DNS 服务器保存的信息,它是一个 4 元祖(Name,Value,Type,TTL)的记录。 * **Name** 是域名。 * **Value** 是 IP 地址。 * **Type** 是记录类型,例如 A 记录或 CNAME 记录。 * **TTL** 是缓存有效时间,表示记录在 DNS 服务器中的有效时间。 **使用 DNS 记录的常见类型:** * **A 记录:**用于将域名映射到 IP 地址。 * **CNAME 记录:**用于将一个域名映射到另一个域名。 * **NS 记录:**用于指定域名指向的服务器。 * **MX 记录:**用于指定域名指向的邮件服务器地址。

正文

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

本文梗概:

  • 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 解析过程相似的内容:

后端每日一题 2:DNS 解析过程

本文首发于公众号:腐烂的橘子 本文梗概: DNS 是什么,有什么作用 一条 DNS 记录是什么样的 DNS 域名解析原理 DNS 服务器如何抵御攻击 DNS 是什么,有什么作用 DNS(Domain Name System)是一种应用层协议,用于映射域名和 ip 地址。 为什么要做映射呢?就像可以用

每日一题:无感刷新页面(附可运行的前后端源码,前端vue,后端node)

1、前言 想象下,你正常在网页上浏览页面。突然弹出一个窗口,告诉你登录失效,跳回了登录页面,让你重新登录。你是不是很恼火。这时候无感刷新的作用就体现出来了。 2、方案 2.1 redis设置过期时间 在最新的技术当中,token一般都是在Redis服务器存着,设置过期时间。只要在有效时间内,重新发出

后端每日一题 1:说一下三次握手

本文首发于公众号:腐烂的橘子 三次握手的流程 第 1 步 - 初始连接请求 SYN(Synchronize) 服务端状态 LISTEN,客户端向服务端发送一个 SYN 标志位的报文段(TCP segment) 这个报文段包含初始序列号 x,以及最大报文段大小等字段 客户端发送报文后,状态设置为 SY

买条新内存给台式机扩容,没想到出现玄学花屏

背景 我目前的配置是i5-8400,16G内存(两条威刚8G 2400) 然后在日常使用中,16G内存已经捉襟见肘了,无论是Android开发还是后端开发,每次编译都卡得很 正好双十一,就想着买条16G内存来扩容,组个32G的双通道。 某东看了一圈,2400的16G内存基本绝迹了,只能选择2666的

[转帖]Etcd+Confd实现Nginx配置文件自动管理

https://www.cnblogs.com/zhengchunyuan/p/9681954.html 一、需求 我们使用Nginx做七层负载均衡,后端是Tomcat。项目采用灰度发布方式,每次项目升级,都要手动先从Nginx下摘掉一组,然后再升级这组,当项目快速迭代时,手动做这些操作显然会增加部

Nginx的负载均衡策略

Nginx的负载均衡策略 共六种: 轮询、权重、ip_hash、least_conn、fair、url_hash 1、轮询(Round Robin)负载均衡策略:这是一种基本的负载均衡策略,将请求顺序转发给每个后端服务器,每个后端服务器依次处理请求,而轮询正是按照这样的方式平均地为每个后端服务器分配

每个后端都应该了解的OpenResty入门以及网关安全实战

简介 在官网上对 OpenResty 是这样介绍的(http://openresty.org): “OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 We

开源分布式任务调度系统就选:DolphinScheduler

分布式任务调度这个话题是每个后端开发和大数据开发都会接触的话题。因为应用场景的广泛,所以有很多开源项目专注于解决这类问题,比如我们熟知的xxl-job。 那么今天要给大家推荐的则是另一个更为强大的开源项目:DolphinScheduler 介绍 DolphinScheduler是一款开源的分布式任务

[转帖]优秀后端都应该具备的开发好习惯

https://juejin.cn/post/7157508782874968094 前言 大家好,我是捡田螺的小男孩。 记录一下一个优秀的后端开发程序员,应该有哪些好的开发习惯。 公众号:捡田螺的小男孩 github地址,感谢每颗star:github 1.注释尽可能全面,写有意义的方法注释 接口

Linux服务器使用Redis作为数据缓存,并用log4j2进行日志记录

前言 个人网站使用Vue作为前端,SpringBoot作为后端,MySQL作为数据库,但前端每次请求都会从MySQL数据库中读取数据,而MySQL数据库的数据是存储于服务器磁盘中,所以响应速度有一定影响。之前了解过一点Redis数据库,该数据库数据存储于内存中(也可以持久化于磁盘中),数据读取速度就