*文章来源:https://blog.egsec.cn/archives/601

*本文将主要说明:本文主要叙述什么是DNS、域名的层级、DNS 解析过程、DNS的缓存时间、DNS 的记录类型、DNS 报文结构、DNS劫持与HTTP劫持以及手动清理本地缓存的方法。

DNS属于应用层。DNS即域名系统,其作用是将字符串域名解析成相对于的服务器IP地址,免除人们记忆IP地址的单调和苦恼,属于为用户排忧解难之举,因此划归为应用层。DNS不属于协议,它是域名解析。

什么是DNS

DNS是 Domain Name System 的缩写,也就是 域名解析系统,它的作用非常简单,就是根据域名查出对应的 IP地址。

你可以把它想象成一本巨大的电话本,比如当你要访问域名www.egsec.cn,首先要通过DNS查出它的IP地址是118.31.61.137。

域名层级

DNS 的解析过程中,需要对域名的层级有了解:

  • 根域名 :.root 或者 . ,通常是省略的
  • 顶级域名,如 .com,.cn 等
  • 次级域名,如 baidu.com 里的 baidu,这个是用户可以进行注册购买的
  • 主机域名,比如 baike.baidu.com 里的baike,这个是用户可分配的
主机名.次级域名.顶级域名.根域名
baike.baidu.com.root

DNS 解析过程

咱们以访问 www.egsec.cn 这个域名为例,来看一看当你访问 www.egsec.cn 时,会发生哪些事:

  1. 先查找本地 DNS 缓存(自己的电脑上),有则返回,没有则进入下一步
  2. 查看本地 hosts 文件有没有相应的映射记录,有则返回,没有则进入下一步
  3. 向本地 DNS 服务器(一般都是你的网络接入服务器商提供,比如中国电信,中国移动)发送请求进行查询,本地DNS服务器收到请求后,会先查下自己的缓存记录,如果查到了直接返回就结束了,如果没有查到,本地DNS服务器就会向DNS的根域名服务器发起查询请求:请问老大, www.egsec.cn 的ip是啥?
  4. 根域名服务器收到请求后,看到这是个 .cn 的域名,就回信说:这个域名是由 .cn 老弟管理的,你去问他好了,这是.cn老弟的联系方式(ip1)。
  5. 本地 DNS 服务器接收到回信后,照着老大哥给的联系方式(ip1),马上给 .cn 这个顶级域名服务器发起请求:请问 .cn 大大,www.egsec.cn 的ip 是啥?
  6. .cn 顶级域名服务器接收到请求后,看到这是 egsec.cn 的域名,就回信说:这个域名是 .egsec.cn 老弟管理的,你就去问他就行了,这是他的联系方式(ip2)
  7. 本地 DNS 服务器接收到回信后,按照前辈的指引(ip2),又向 .egsec.cn 这个权威域名服务器发起请求:请问 egsec.cn 大大,请问 www.egsec.cn 的ip是啥?
  8. egsec.cn 权威域名服务器接收到请求后,确认了是自己管理的域名,马上查了下自己的小本本,把 www.egsec.cn 的ip告诉了 本地DNS服务器。
  9. 本地DNS服务器接收到回信后,非常地开心,这下总算拿到了www.egsec.cn的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报文结构

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

DNS劫持与HTTP劫持

通过上面的讲解,我们都知道了,DNS 完成了一次域名到 IP 的映射查询,当你在访问 www.egsec.cn 时,能正确返回给你 我网站首页的 ip。

但如果此时 DNS 解析出现了一些问题,当你想要访问 www.egsec.cn 时,却返回给你 www.baidu.com 的ip,这就是我们常说的 DNS 劫持。

与之容易混淆的有 HTTP 劫持。

什么是 HTTP 劫持?

你一定见过当你在访问 某个网站时,右下角也突然弹出了一个扎眼的广告弹窗。这就是 HTTP 劫持。

借助别人文章里的例子,它们俩的区别就好比是

  • DNS劫持是你想去机场的时候,把你给丢到火车站。
  • HTTP劫持是你去机场途中,有人给你塞小广告。

DNS劫持 是如何产生的?

下面大概说几种DNS劫持方法:

1.本机DNS劫持

攻击者通过某些手段使用户的计算机感染上木马病毒,或者恶意软件之后,恶意修改本地DNS配置,比如修改本地hosts文件,缓存等

2. 路由DNS劫持

很多用户默认路由器的默认密码,攻击者可以侵入到路由管理员账号中,修改路由器的默认配置

3.攻击DNS服务器

直接攻击DNS服务器,例如对DNS服务器进行DDOS攻击,可以是DNS服务器宕机,出现异常请求,还可以利用某些手段感染dns服务器的缓存,使给用户返回来的是恶意的ip地址

如何在本地查询 DNS 解析结果?

nslookup命令:

命令格式:nslookup [查询的域名] [指定DNS服务器]

你也可以指定公网的域名服务器进行查询,比如常见的 114.114.114.114

手动清理DNS缓存

MacOS:

sudo dscacheutil -flushcache
$ sudo killall -HUP mDNSResponder

Windows:

$ ipconfig /flushdns

Linux:

使用NSCD的DNS缓存
$ sudo /etc/init.d/nscd restart # 服务器或者路由器使用DNSMASQ
$ sudo dnsmasq restart

  


DNS详解篇完

转发请注明出处(EG Blog:blog.egsec.cn),谢谢!

DNS篇(详解DNS)的更多相关文章

  1. seo网页加速技术,预加载 DNS Prefetching 详解

    seo网页加速技术,预加载 DNS Prefetching 详解 DNS Prefetching 是什么 : DNS 是什么-- Domain Name System,域名系统,作为域名和IP地址相互 ...

  2. <转>详解DNS的常用记录(上):DNS系列之二

    详解DNS的常用记录(上) 在上篇博文中,我们介绍了DNS服务器的体系结构,从中我们了解到如果我们希望注册一个域名,那么必须经过顶级域名服务器或其下级的域名服务器为我们申请的域名进行委派,把解析权委派 ...

  3. 计算机网络: IP地址,子网掩码,默认网关,DNS服务器详解

    楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...

  4. DNS协议详解

    DNS协议详解 简介 DNS(Domain Name System)域名系统,主要实现的功能是将域名转换成ip地址的一个服务.它是由一个分层的DNS服务器实现的分布式数据库,同时.他也是一个使得主机能 ...

  5. 计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解

    楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...

  6. 【网络】IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解

    楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...

  7. IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解,DNS域名设计

    本文参考:<计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解> IP地址 概述 计算机要实现网络通信,就必须要有一个用于快速定位的网络地址.IP地址就是计算机在网络 ...

  8. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  9. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  10. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

随机推荐

  1. Alpha冲刺 —— 5.4

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 Alpha冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.展 ...

  2. Rocket - 断句 - Diplomatic Design Patterns: A TileLink Case Study

    https://mp.weixin.qq.com/s/afRVgTCYs1Mxu898uSmVaQ 整理一篇介绍Diplomacy和TileLink的文章.   原文链接: https://carrv ...

  3. xss(跨站脚本攻击)

    xss(跨站脚本攻击) 原理:攻击者可以通过在页面中注入恶意链接或者脚本代码,当受害者访问时,脚本代码会在其浏览器中执行,这个时候,我们可以获取当前用户的cookie或者进行重定向等操作. xss造成 ...

  4. 【Hadoop】Hadoop的安装,本地模式、伪分布模式的配置

    Download hadoop-2.7.7.tar.gz 下载稳定版本的hadoop-2.7.7.tar.gz(我用的2.6.0,但是官网只能下载2.7.7的了) Required Software ...

  5. Java实现 LeetCode 327 区间和的个数

    327. 区间和的个数 给定一个整数数组 nums,返回区间和在 [lower, upper] 之间的个数,包含 lower 和 upper. 区间和 S(i, j) 表示在 nums 中,位置从 i ...

  6. Java实现 LeetCode 74 搜索二维矩阵

    74. 搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: ...

  7. 一篇文章快速搞懂 Atomic(原子整数/CAS/ABA/原子引用/原子数组/LongAdder)

    前言 相信大部分开发人员,或多或少都看过或写过并发编程的代码.并发关键字除了Synchronized,还有另一大分支Atomic.如果大家没听过没用过先看基础篇,如果听过用过,请滑至底部看进阶篇,深入 ...

  8. 使用Java将阿拉伯数字转换为中文数字(适配小数转换)

    Java数字转换工具类 简介 该工具类可以将整数.小数.负数转换为中文的数字,如: 0 --> 零 1 --> 一 2.1 --> 二点一 -2.1 --> 负二点一 具体代码 ...

  9. 09 . Nginx配置LNMP和LNMT架构

    安装LNMP架构 环境清单 list CentOS7.3 proxysql-2.0.12-1-centos7.x86_64.rpm mysql-5.7.23-1.el7.x86_64.rpm-bund ...

  10. 菜鸟教程—SQL测验

    SQL 测验 结果:17/3 1. SQL 指的是? 你的回答: Structured Question Language 回答错误! 正确答案:Structured Query Language 2 ...