资讯专栏INFORMATION COLUMN

当我们谈网络时,我们谈些什么2(2)DNS

褰辩话 / 1305人阅读

摘要:而我们平时生活中见了人是不会说,的,我们会叫名字,为什么,因为不需要把百度的记录下来,然后每次要搜索东西的时候,都要输入,有了它我们只需要输入就可以了,非常方便。百度当时也是一边紧急启动备用登陆进行恢复,一边痛骂劫持方。

序言

准备了很久,之前自己理解不够通彻的,这里自己参阅相关书籍,进行了又一个整理。下篇更新TCP/UDP相关。进入正题,网域名称系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。上述为来自维基百科对于DNS的描述,通过简单概述,我们知道了这个系统是什么了。

那么为什么要有这么个系统呢?互联网将我们每一个人连接起来,当我们想通过互联网进行沟通,分享,那么首先我们需要一个标示来代表网络中的每一个人,独一无二的,现实生活中我们采用了身份证ID,网络中采用了IP地址,除了唯一性,其还具备一个共性就是其数字的排列在一定程度上具备区域性,比如山东人的身份证前几位可能就都是相同的,同理山东的一些地区的IP地址的前几位也是相同的。而我们平时生活中见了人是不会说hi,371909933的,我们会叫名字,为什么,因为不需要把百度的IP记录下来,然后每次要搜索东西的时候,都要输入IP,有了它我们只需要输入www.baidu.com就可以了,非常方便。

这个系统为什么要做成分布式的呢?首先我们想到的一个策略是将IP和域名的对应存放在一个集中的服务器上,然后当我们需要访问转化的时候,带着我们的域名发送网络请求,然后系统根据我们的域名找到相对应的IP,然后再返回IP地址给我们,我们通过IP地址
DNS运行在UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

按照之前的描述思路,我们先从报文格式入手,然后从其作用,解析流程,DNS污染劫持,DNS攻击来讲解DNS系统。

DNS记录和报文

DNS是一个分布式的数据库,那么数据库中记录了什么呢?DNS存储的记录提供了从主机名到IP地址的映射,我们称之为资源记录,而资源记录的格式则为一个四元组(Name,Value,Type,TTL),四元组中的每一个元素代表什么呢?

TTL:记录的生存时间,决定了记录从缓存中删除的时间。

Name/Value:值取决于Type

Type:

A:Name:主机名 Value:IP地址

NS:Name:域 Value:获取主机IP地址的权威DNS服务器主机名

CNAME:Name:主机名 Value:规范主机名(bd.com dl.bd.com)用来简化记忆

MX:Name:主机名 Value:邮件服务器的规范主机名
DNS具备

这个报文由12字节长的首部和4个长度可变的字段组成。
标识字段由客户程序设置并由服务器返回结果。客户程序通过它来确定响应与查询是否匹配。

QR是1bit字段:0表示查询报文,1表示响应报文。

opcode是一个4bit字段:通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求)。

AA是1bit标志,表示“ 授权回答(authoritativeanswer)”。该名字服务器是授权于该域的。

TC是1bit字段,表示“可截断的(truncated)”。使用UDP时,它表示当应答的总长度超过512字节时,只返回前512个字节。

RD是1bit字段表示“期望递归”。该比特能在一个查询中设置, 并在响应中返回。这个标志告诉名字服务器必须处理这个查询,也称为一个递归查询。如果该位为 0,且被请求的名字服务器没有一个授权回答,它就返回一个能解答该查询的其他名字服务器列表,这称为迭代查询。在后面的例子中,我们将看到这两种类型查询的例子。

RA是1bit字段,表示“ 可用递归”。如果名字服务器支持递归查询,则在响应中将该比特设置为 1。在后面的例子中可看到大多数名字服务器都提供递归查询,除了某些根服务器。

随后的3 bit字段必须为0。

rcode是一个4bit的返回码字段。通常的值为0(没有差错)和3(名字差错)。名字差错只有从一个授权名字服务器上返回,它表示在查询中制定的域名不存在。

随后的4个16bit字段说明最后4个变长字段中包含的条目数。对于查询报文,问题数通常是1,而其 他3项则均为0。类似地,对于应答报文,回答数至少是1,剩下的两项可以是0或非0。

查询名是要查找的名字,它是一个或多个标识符的序列。查询类型是我们上述所提到的type中的几个类型,查询类通常是1,指互联网地址。
DNS报文中最后的三个字段,回答字段、授权字段和附加信息字段,均采用一种称为资源记录RR的相同格式。

前面几个字段和请求报文的字段的报文相同,这里不再详细介绍,着重介绍下后续几个字段。生存时间字段是客户程序保留该资源记录的秒数。资源记录通常的生存时间值为两天。资源数据长度说明资源数据的数量。该数据的格式依赖于类型字段的值。对于A类型资源数据是4字节的IP地址。

DNS作用

DNS提供的服务除了对于域名到IP地址的转化之外,还提供了那些功能呢?有以下几点

主机别名
有些主机名可能会拥有多个主机别名,别名会更容易辨识,DNS则提供了一种服务,用来进行将别名到主机名的映射,然后找到主机的IP地址并返回。

邮件服务器列表
电子邮件应用可以进行DNS请求,对提供的邮件服务器别名进行解析,然后获得主机的规范主机名和IP地址。

负载均衡
考虑一个问题,如果我们的一个域名对应一个IP地址,一个IP地址也就对应一台主机,当用户量非常大的时候,我们在访问的过程中,则会将服务器淹没,因此会将域名对应一个IP地址集合,通过这个集合,每次再有DNS请求,则会循环读取IP地址,然后下发IP地址。

DNS解析流程

这里我们通过浏览器输入百度的IP地址来作为实例。

当我们在浏览器输入了网址,然后浏览器这个时候会调用操作系统提供的DNS转化服务

首先是检测本地host文件,是否有缓存,而且未过期,则使用

如果不存在,则会向向本地DNS服务器的发送了DNS解析请求,如果本地DNS服务器缓存了百度的DNS记录,则使用

如果本地DNS服务器没有该记录就回向根服务器请求,然后根服务器收到请求后,会返回给本地服务器相应的顶级域名DNS服务器地址。

以www.baidu.com为例,就回返回解析com顶级域名的服务器,然后本地服务器知道顶级域的DNS服务器的地址后就会向该服务器发送解析请求,然后顶级域服务器返回给本地DNS服务器百度的权威服务器的IP地址。

同上,本地DNS服务器向百度的权威DNS服务器发起查询请求。就会得到百度权威DNS服务器返回给本地服务器的百度服务器的IP地址。

最后,本地DNS服务器会把百度服务器的IP地址返回给你的电脑,同时将这条记录缓存在本地DNS服务器。
递归查询的图示

Note:以上是通过递归的方式进行的查询操作,当然还存在其他的查询方式如仅仅的”递归“,通过对于报文头部字段的修改即可改变该种方式。

DNS劫持污染

DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。国内对于一些国外的网站的墙的手法中,DNS劫持污染就是一种,将一些要墙掉的网站指向一些不可访问的地址,同时当前运营商也在干一件比较恶心的事情,也是让当前很多互联网公司比较头疼的一个问题,运营商为牟利将一些公司的域名进行劫持到其它的公司。比较有名的几个劫持事件都发生在百度身上,最大规模被域名劫持祸害过的其实就是百度,2010年百度域名被伊朗网军劫持过,整整八个小时用户上不去百度,是百度成立以来最严重的服务器故障,据说直接损失直接超过700万,间接损失更多。百度当时也是一边紧急启动备用登陆进行恢复,一边痛骂劫持方。后来百度一直痛恨数据劫持,之前360浏览器使用百度时,会给360引流。(流氓之间互掐)当然现在很多大厂也开始提供公共DNS,来对恶意网站进行拦截,智能解析防止被劫持和广告的插入。

说道DNS污染,不得不提的是DNSCrypt,其实现原理通过对DNS请求内容进行加密的方式来巧妙的绕过墙。

DNS安全性

常见的DNS攻击方式DDos带宽洪泛攻击,中间人攻击,发射攻击。

DDos:常见的一种攻击方式,通过向目标主机发送大量的分组,来使得合法的请求得不到相应,但是由于DNS的缓存服务,使得对于一些根服务器或者是权威服务器的攻击得到很好地缓解,即使顶级服务器无法正常响应了,但是本地的DNS服务器中都有缓存,我本身就无需访问顶级服务器。

中间人攻击:通过对于DNS包的拦截,返回制定的恶意地址,然后将用户引向恶意的源地址。该种方式可以通过向一些DNS服务器中发送伪造的记录,从而造成一个区域内的某些域收到感染。

发射攻击:反射攻击不再是对DNS服务器的攻击,而是借助于DNS的特性,将攻击目标主机的IP作为源地址发送大量的请求包到DNS服务器,然后服务器的响应就会指向本地,特别是对于一些请求内容比响应内容要小很多的类型,我们自己无需很大的流量就可以把目标主机淹没。

《计算机网络自顶向下》《TCP/IP详解》两本书结合着加上自己之前的整理来完成了本篇博客,以后要加快更新速度了。网络结束之后,操作系统,编译原理的Flag也要跟进了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11552.html

相关文章

  • 我们网络我们什么2)--DNS的工作原理

    摘要:同上,本地服务器向百度的权威服务器发起查询请求号路径。单位为秒下面分别举个例子帮助理解下一篇更新对获取百度首页的过程中从网络层到链路层的一个变化。 博客新址,这里更有趣 来做个小实验吧 打开你的终端或者DOS命令运行窗口,输入ping www.baidu.com看看发生了什么 如果你的网络正常连接的话,应该可以看到这样的结果showImg(https://segmentfault.c...

    fireflow 评论0 收藏0
  • 我们网络我们什么(1)--我们如何接入因特网

    摘要:从如何接入网络到数据返回给我们这个过程。路由器是根据网络地址进行转发,属于网络层。此时我们就拿到和服务器的地址,和我们默认网关的地址。 博客新址,这里更有趣 之前对于黑砖头书,一直有种抵触感,看着看着就不想看了,总感觉TM这么厚,什么时候能看完,看着就愁,暑假,硬着头皮啃了《Thinking in Java》,还有《Head First设计模式》,边做笔记,边读,这样还是蛮有成就感的,...

    dabai 评论0 收藏0
  • 我们网络我们什么(3)--获取网页从网络层到链路层发生了什么

    摘要:我们和百度建立的连接的过程,我们中间经过若干个路由器,然后数据返回到我们本地,我们便可以看到百度首页了。 建立连接 上面我们通过DNS访问得到了目的地的IP地址,接下来,是我们如何向其发送数据了,比如我们的要获得到百度的首页,我们是如何访问的到的,本篇文章,将从拿到IP到页面展示在我们面前,从应用层到链路层进行一个分析。 首先来一个整体的架构,根据这个架构,我们再去完善我们在访问的过程...

    lieeps 评论0 收藏0
  • 我们网络我们什么2(1)HTTP

    摘要:序言很早之前出了一个系列的当我们谈网络,谈些什么专题,得到了比较好多反响和认可。代表请求已成功被服务器接收理解并接受这类状态码代表需要客户端采取进一步的操作才能完成请求。 序言 很早之前出了一个系列的《当我们谈网络,谈些什么》专题,得到了比较好多反响和认可。再次准备更仔细深入的再来做一起,更深入,更全面的来讲解网络知识。涉及Http,P2P,DNS,TCP,UDP,网络层,链路层,无线...

    EastWoodYang 评论0 收藏0
  • 我们网络我们什么(5)链路层概述

    摘要:对于我们的每一块网卡,其都会有一个独一无二的地址与其对应,通过这个地址,我们就可以确定到每一台主机,然后将数据报交给它,同时对于来自网络层的数据报,链路层也会对其进行一个封装,加上地址,同时链路层也执行一些差错的检测和纠正。 作用位置 链路层的在层级的划分上是处在IP层下面的,通过IP,我们获得了一个具体的范围,然后要找到具体的每一台机器,那么这个时候,链路层就发挥作用了,其作用的位置...

    andycall 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<