1.DNS是怎么工作的

  首先我们可以很简单的理解DNS协议,它就是一个将域名与ip地址进行双向转换的协议,而消息类型只有查询和回应2种类型。那客户端查询域名,是要请求谁呢?答案是域名服务器,现在域名服务器分为以下4类,按照层次从上往下:

根域名服务器:最高层次最重要的域名服务器,它知道所有的顶级域名服务器的域名和ip地址,一般请求根域名服务器返回的是要请求的顶级域名服务器的ip地址。我们常常听说的13个域名服务器指的就是它,但根域名服务器绝不是由仅仅的13台服务器组成,而是一个域名服务器由多个主机组成,它们有相同的ip。现在基本上普通域名服务器都能就近找到一台根域名服务器,当本地域名服务器请求根域名服务器时,路由器就能找到离这个本地域名服务器最近的一个根域名服务器。

顶级域名服务器:它负责该顶级域名中所有注册的二级域名。比如.com顶级域名服务器里就存放了所有xxx.com域名和ip地址映射表。

权限域名服务器:这类服务器负责某一特定域名的域名解析,很多公司都有权限域名服务。比如腾讯有它的权限域名服务器,里面存储了腾讯域名和ip地址的映射关系。同时权限域名服务器也充当了本地域名服务器的角色,你可以将你的域名注册到腾讯的域名服务器中。

本地域名服务器:这台服务器的ip地址就是我们电脑里配置的dns,本地域名服务器一般离用户是比较近的,当本地主机无法解析域名就会给本地域名服务器发送请求。

现在知道请求的是域名服务器了,也知道了一共有哪几类域名服务器,接下来我画了张图来描述整个dns请求的流程,整个过程采用迭代查询。注意权限域名服务器一般是不会采用递归查询的,它会直接返回ip地址让请求着再去访问这个ip。

2.DNS数据格式

  dns固定首部为12字节,如下图所示。当请求本地域名服务器如果它已经缓存了这个域名所对应的ip地址,那么这个答案将会被标记为非权威的,只有权限域名服务器返回的数据包才会将这个包标记为权威的,这对应着固定首部中的权威答案数据。后2张表格是dns首部中的标志位数据和rCode的数据。随着dns的发展标志中的16位功能已经有点不够用了,因此现在有很多dns服务器运行EDNS(扩展DNS),原来回应数据如果超过512字节将会被丢弃进而可以转为tcp连接,EDNS则可以支持超过512字节的大数据包回应。

QR 1位 查询时这位为0,回应则为1
Opcode 4位 定义查询或回应的类型,值为0表示是一个标准的查询/回应
AA 1位 在回应数据包中使用,值为1表示回应是一个权威回应。
TC 1位 当回应大于512字节时此标志位置1,最终数据长度会被删减为512字节,此时客户端可采用tcp来询问
RD 1位 客户端使用递归时此位会置1
RA 1位 只在回应数据包中设置,当为1时表示可采用递归回应
保留位 3位 全都设置为0
rCode 4位 仅在回应消息中有用,表示返回类型
rCode 错误类型
0 没有错误
1 格式错误
2 名称服务器错误
3 域参照错误
4 不支持的查询类型
5 不允许的动作

3.DNS的安全隐患

  目前对于DNS的安全隐患主要分为2类,一类是攻击真实的域名服务器让服务器掉线,比如利用服务器软件漏洞,曾经还发生过对根域名服务器的成功攻击。另一类是抓住dns协议的漏洞来进行攻击。dns协议很简单,就一个请求和回复,在这个过程中会对服务器返回结果的ip地址和首部中16位标识进行验证,如果ok那dns客户端总是相信服务器返回的结果是正确的。正是这个地方攻击者可以做手脚,比如DNS缓冲区中毒攻击,它需要攻击者能够看到dns服务器的查询数据包,有了查询数据攻击者才能伪造回应信息给dns服务器。它的原理是攻击者替换dns服务器中的多行数据从而导致客户端收到错误的ip地址,然后去访问攻击者想要客户端访问的网站。现在关键是攻击者如何才能将恶意数据放入dns服务器中呢?可以想象攻击者要么获得对服务器的访问,要么向发送请求的dns服务器回应错误的信息,以达到伪造的目的。对于这种攻击可以采用dns数据加密的方式。还有一种攻击类似于syn flood,假设攻击者给很多服务器发送大量请求报文,这可能造成网络的流量猛增而瘫痪。不过dns是采用无连接的udp,当udp缓冲区被塞满时将会丢弃多余的数据包,而dns客户端请求不到ip地址将会重试几次请求或者用户重新在浏览器点击链接。因此这种攻击只要采用防火墙进行过滤网络就会快速恢复。

声明:本文原创发表于博客园,作者为方小白,如有错误欢迎指出 。本文未经作者许可不许转载,否则视为侵权。

浅入DNS的更多相关文章

  1. <转>浅谈DNS体系结构:DNS系列之一

    浅谈DNS体系结构 DNS是目前互联网上最不可或缺的服务器之一,每天我们在互联网上冲浪都需要DNS的帮助.DNS服务器能够为我们解析域名,定位电子邮件服务器,找到域中的域控制器……面对这么一个重要的服 ...

  2. 浅入Kubernetes(11):了解 Service 和 Endpoint

    目录 Srevice Service 的创建及现象 Service 定义 Endpoint slices 创建 Endpoint.Service Service 创建应用 创建 Endpoint 浅入 ...

  3. 浅入Kubernetes(8):外网访问集群

    目录 查询 Service Service 外部服务类型 配置 ServiceType 伸缩数量 阶段总结 在前面几篇文章中,我们学习了 kubeadm .kubectl 的一些命令,也学会了 Dep ...

  4. 浅入浅出EmguCv(三)EmguCv打开指定视频

    打开视频的思路跟打开图片的思路是一样的,只不过视频是由一帧帧图片组成,因此,打开视频的处理程序有一个连续的获取图片并逐帧显示的处理过程.GUI同<浅入浅出EmguCv(二)EmguCv打开指定图 ...

  5. 浅入浅出EmguCv(一)OpenCv与EmguCv

    最近接触计算机视觉方面的东西,于是准备下手学习opencv,从官网下载windows的安装版,配置环境,一系列步骤走完后,准备按照惯例弄个HelloWord.也就是按照网上的教程,打开了那个图像处理领 ...

  6. 浅入深出之Java集合框架(上)

    Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...

  7. 浅入深出之Java集合框架(中)

    Java中的集合框架(中) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...

  8. 浅入深出之Java集合框架(下)

    Java中的集合框架(下) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,哈哈这篇其实也还是基础,惊不惊喜意不意外 ̄▽ ̄ 写文真的好累,懒得写了.. ...

  9. 浅入深出Vue:环境搭建

    浅入深出Vue:环境搭建 工欲善其事必先利其器,该搭建我们的环境了. 安装NPM 所有工具的下载地址都可以在导航篇中找到,这里我们下载的是最新版本的NodeJS Windows安装程序 下载下来后,直 ...

随机推荐

  1. WPF-拖动面板移动窗口&设置窗口状态

    在需要去掉窗口边框的情景下往往需要有拖动面板直接移动窗口和自定义按钮改变窗口状态和关闭的功能 拖动面板移动窗口 为面板控件添加MouseMove事件, 面板控件指的是用来当面板的控件,可以是grid. ...

  2. C# PDF打印

    C#中使用iTextSharp生成并下载PDF很方便. 首先要将iTextSharp的dll下载并引入项目 主要分成两部分,一部分是PDF的Document生成,另一部分就是将Document输出到页 ...

  3. 问题解决——Win7 64 安装 AutoCAD 2010 32位 和 清华天河PC CAD

    最近单位组了一台电脑,配置还好,E3大法+R9 280,装了Win7 64位系统. ========================================================== ...

  4. 机器学习六--K-means聚类算法

    机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...

  5. 烂泥:KVM虚拟机随KVM服务器的启动而启动

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 要使KVM虚拟机随KVM服务器的启动而启动,我们所需要做的工作很少.只需要把KVM虚拟机的XML配置文件做一个软连接到/etc/libvirt/qemu ...

  6. 数据结构--AC自动机--hdu 2896

    病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  7. Mac/Linux 定时运行命令行

    想要开机运行的话可以通过 mac 自带的 Automator 将要运行的命令打包成一个app,用后在用户组的“登录时启动”列表里加上那个app. 但是想要定时运行就不能这么做了,要用上一个叫cront ...

  8. C++中对象初始化

    在C++中对象要在使用前初始化,永远在使用对象之前先将它初始化. 1.对于无任何成员的内置类型,必须手工完成此事. 例如: int x=0; double d; std::cin>>d; ...

  9. [转]响应式表格jQuery插件 – Responsive tables

    本文转自:http://www.shejidaren.com/responsive-tables-for-bootstrap-3.html 这个Responsive tables jQuery插件依赖 ...

  10. Hadoop_HDFS架构和HA机制

    Hadoop学习笔记总结 01.HDFS架构 1. NameNode和ResourceManager NameNode负责HDFS,从节点是DataNode:ResourceManager负责MapR ...