【DNS】简单聊聊DNS如何工做

随便聊聊

咱们知道,网络上传输的数据包是一层一层的包起来的,典型的是mac地址层,ip层,tcp/udp层,应用层数据 这么几个层,那用户在浏览器中打开www.baidu.com数据包如何传到baidu的后端服务器呢?咱们这个数据包没有ip层的目标ip啊,http请求怎么知道往哪里发?这个时候,dns系统就介入了,dns系统首先会把这个www.baidu.com的ip地址给找出来! dns系统主要是依靠权威dns,和递归dns来工做的,那权威dns和递归dns都是干吗的呢?windows

权威dns(Authority dns)

首先咱们来聊一聊权威dns。 权威dns作的事情主要是管理某个或多个特定域的dns服务。通常大一点的公司,都有本身的权威dns后端

好比全部”.alipay.com”结尾的域名都由alipay来管理全部”.alibaba.com”结尾的域名都由alibaba来管理(alipay和alibaba实际又是同一家公司来管理)全部“.baidu.com”结尾的域名都由baidu来管理alibaba和baidu各管各的,没有交互。<>那整个域名系统,如何跑起来的呢,否则你说你管理alibaba.com的全部域名,我说我也管理alibaba.com的全部域名,不就乱套了么。浏览器

光说是没有用的,必需要到相关注册局机构去注册。缓存

  1. 最上面是根域。
  2. 一级域要去根上注册,像com域,net域就属于一级域
    • Com域(也就是全部以“.com”结尾的老祖com域)要去根上注册com域的域名服务器(nameserver)列表。
    • Net域(也就是全部以”.net”结尾的老祖net域)要去根上注册net域的域名服务器(nameserver)列表。
  3. 二级域通常要到一级域上去注册
    • alibaba.com要到com域去注册本身的域名服务器nameserver列表
    • baidu.com也要到com域去注册本身的域名服务器nameserver列表

那你说a.b.c这个域名的一级域是谁,固然是“c”了,可是c域就没有在根上面去注册,因此这个域名是个无效的域名。 这样的一些实际管理域名系统的dns都是权威dns就这样一级一级的注册。服务器

整个域名系统就连起来了,就变成了这么个东西网络

因此dns叫作分布式的域名系统,分布在世界上面的各个管理域名的公司或机构,有些状况用户只想简单的把本身的ip转化为某个域名,而不想管理整个域,那这个时候他就能够去买域名,有些公司是专门卖域名的。好比alibaba.com彻底能够卖任何以“.alibaba.com”结尾的域名,只是alibaba.com不会这么干,这样作一些钓鱼网站来挂本身的网站,也以alibaba.com结尾的话,用户不就很容易被钓鱼了么,好比我支付宝付款的时候我只看跳转后的域名是不是以alipay.com结尾的,若是不是我就不敢付款)负载均衡

递归DNS(Recursion DNS)

那用户访问www.alibaba.com,请求又是如何到alibaba的权威dns服务器上面找到www.alibaba.com的ip呢?tcp

这个时候递归dns(咱们通常叫作local dns)就介入了。分布式

用户首先要直接配置本身的dns服务器,通常你拨号上网,或者在公司里面上网,咱们windows系统都已经预想配置好了递归dns服务器的ip地址,固然本身也能够修改网站

RHEL Linux系统是/etc/resolv.conf配置文件来配置。

一个用户访问www.alibaba.com的过程以下(可放大图片观察)

其中有几点补充

  1. 递归dns也就是咱们常说的缓存dns,local dns,公共dns(提供专门递归服务的dns),这样一步步的从根“.”到"com",再到“alibaba.com”,最后到“www.alibaba.com”的过程叫作递归过程
  2. Dns请求通常是udp报文(也能够是tcp的报文),因此一样也是要有源ip,目标ip,等等这些网络数据包的底层信息,递归过程的每一步,目标ip都必须是很明确的
  3. 各个域的namserver其实是有多台的,好比根的namserver的ip有13个,com的namserver的ip也有13个,递归dns在进行递归时须要选择其中一个ip做为目标ip进行下一步请求便可(目前主流dns实现软件,如bind会选择延时最小的那个ip做为下一步请求的目标ip)
  4. 你们不用担忧根域,或者com域就那么几个ip,能不能接受的了全球的dns请求能不能抗的住的问题。这只是个目标ip,基于ip的负载均衡技术多的很,dns中用的多的是anycast技术,一个ip实际上对了不少个物理服务器,到各个权威nameserver上,也有lvs,ospf等等一些负载均衡技术把同一个ip对应到多个物理服务器上面。
  5. 递归dns还会把图中递归第一步,第二步,第三步向各级权威dns发起的请求结果给缓存到本身的内存中,直到这条结果的ttl超期失效(超期时间通常为几分钟到几小时几天等等),在这个ttl超期以前,任何其余用户发起的www.alibaba.com的dns请求,递归dns都会直接从本身的内存中把缓存结果直接返回给客户端(不会去递归了)。若是ttl超期了,才会去从新递归。
  6. 有的dns既是权威dns,又是递归dns,这并不冲突,这种dns在遇到域名是本身管理的域的后缀结尾时,会直接进行应答(不管是否存在结果),若是不是本身管理的域的后缀域名,则进行递归,一样吧递归结果进行缓存。

聊聊dns攻击

咱们顺便聊聊dns攻击问题,典型的有拒绝服务攻击,dns劫持等。

  1. 拒绝服务攻击这种是对各类应用(不止是dns应用)都很常见的攻击,你们也都知道,咱们构造数据包直接调用驱动,或者使用现成的pktgen改吧改吧,或者用dpdk,或者干脆多一点肉机,随意伪造源ip,dns请求(或者什么http请求,arp请求等等),一秒钟打出几百万或者几千万个包打出很大流量的请求来,不是什么难的事情(不是全部公司的系统都有很强的防攻击措施),而带宽就这么大,硬件的能力也好操做系统的能力也好就这么大,正常的客户请求就进不来而没法服务了,从而达到了攻击。
  2. Dns劫持攻击也有,伪造dns响应是很简单的,或者直接在上级dns上面配置泛域名,可是容易被发现,可是即便容易被发现,一旦进行了劫持,后果也是不堪设想的,好比前段时间根被劫持了,咱们从上图的递归dns向各级权威dns询问www.alibaba.com的ip是多少,根的nameserver或者com的nameserver原本是不该该直接告诉递归dns www.alibaba.com的ip究竟是多少的,必需要到alibaba.com的权威dns才能获得最终结果,但是根却在第一步递归过程当中,就告诉递归dns我知道www.alibaba.com的ip(当时好像是任何域名请求到根的namserver,根的namserver都直接给返回了同一个错误的ip),是y.y.y.y(一个错误的ip)了,这样最后产生http请求的时候,目标ip就彻底不对了,而因为各个递归dns ttl超期以后都会先从根递归,这样全部域名就都被劫持了,整个互联网也就崩溃了。
  3. 另外泛域名这种,举个简单的例子,若是我是根的namserver,我配置一个泛域名 ,让其ip为1.1.1.1,那么全部到根进行查询的任何域名查询,都会获得直接响应说ip是1.1.1.1,那打开任何网页,数据包的目标ip就都是1.1.1.1了,不堪设想。小点来讲若是我是com的namserver,配置一个泛域名,.com,那全部以”.com”结尾的域名也都不堪设想了,根本走不到各个公司去作dns查询这一步。

若有错误,欢迎指正。

相关文章
相关标签/搜索