本文装载自:http://www.apeblog.cn/article/52.html
转载声明:本文转载自网络,如有侵权,请联系删除。

今天拟草一篇介绍服务端配置 HTTPS 教程时突然找到介绍 DNS 的博客,由于他介绍的太赞了、简单粗暴易懂,填补了我的知识盲区,马上把它分享出来给你们。

DNS 是啥?

  DNS 是 Domain Name System 的缩写,直译过来就是“域名系统”。

DNS 有啥用?

  咱们每天打交道的这个互联网,其底层的基石是“IP”。IP 是“Internet Protocol”的缩写,中文就“互联网协议”(光看名字就知道这玩意儿很重要)。咱们日常用的那些互联网软件(浏览器、聊天工具、下载工具、等等)在工作时,必须依靠 IP 地址才能进行网络数据传输。
  “IP地址”是设计给软件用滴——虽然软件很容易处理,但对于人类而言,却很难记忆。于是,后来又发明了 DNS。有了 DNS,人类就不需要记住长长的一串 IP地址,而只需记住“域名”(域名通常更短,也更具有可读性)。
  比如你上网的时候,只需在地址栏输入网站的“域名”,而不用输入网站的“IP地址”。然后电脑系统会利用 DNS 来把“域名”翻译成“IP地址”。这个翻译的过程术语叫“域名解析/DNS解析”。

域名的结构是咋样滴?

  域名是按照“树形结构”组织的。不懂得啥是“树形结构”的同学,可以对照一下电脑硬盘上的目录结构。域名的结构和目录结构很类似,目录结构是用“斜杠”作分隔符,而域名是用小数点作分隔符。两者的主要区别在于:目录结构名称的形式是从左到右(上级在左,下级在右),而域名是从右到左(上级在右,下级在左)。
  以俺博客的域名为例:program-think.blogspot.com 的上级域名是 .blogspot.com.blogspot.com 的上级域名是 .com 这里的 .com 就被称为顶级域名(Top-Level Domain,简称 TLD),跟 .com 类似的那些 .net .org .gov 也是顶级域名。还有那些以国家/地区的代码命名的(比如 .cn .tw .hk .jp 等等)也是顶级域名。

“域名解析”是咋实现滴?

  如果你曾经配置过电脑的网卡,应该记得上面除了有IP地址、掩码等设置,还有一项设置是“DNS服务器/域名服务器”。这项设置就是用来帮助你的电脑进行域名解析的。你可以把这个“DNS服务器”想象成114查号台。每当电脑需要翻译某个域名,就找这个域名服务器查询,然后域名服务器会告诉你的电脑,要查询的域名对应的IP地址是啥。
  下面简单说一下,你的电脑进行域名解析的过程。
  为了叙述方便,以俺博客为例。当你在浏览器的地址栏中输入 http://program-think.blogspot.com/,然后敲回车,这时候电脑软件会进行如下一系列事情。
  1. 首先根据输入的网址,提取出域名(在本例中,也就是 program-think.blogspot.com)
  2. 如果你在系统中配置了 Hosts 文件,那么电脑会先查询 Hosts 文件,看这个 program-think.blogspot.com 否已经在 Hosts 里面有了对应的记录。如果有,直接就可以拿到该记录中的 IP地址,过程就结束了。
  3. 如果 Hosts 里面没有这个别名,那么电脑会看你有没有设置域名服务器(DNS 服务器)。如果你的系统没有设置域名服务器,那电脑就没辙了,浏览器直接会报错,说网站的域名无法解析。过程就结束了。
  4. 如果你设置过“域名服务器”,那么电脑会向这个域名服务器发送一个域名查询(DNS query)的请求,然后等候域名服务器的回应。
  5. 如果域名服务器始终没有回应(比如域名服务器挂了,或域名服务器的IP填错了,或请求被 GFW 拦截了),那么电脑还是没辙(浏览器会报错)。
  6. 如果域名服务器回应了,那么你的电脑就可以根据域名服务器的应答信息,得到该域名的 IP地址。之后浏览器就会向这个 IP地址 对应的 Web 端口发送 HTTP 请求。
  通常情况下,电脑拿到的(DNS服务器)应答信息是正确的——也就是说,应答中的 IP地址 确实对应那个域名——这种情况下,你的网络软件就可以正常工作了。
  但是在天朝这个奇葩的国家,电脑拿到的 DNS 应答有可能是【错的】。为啥会这样捏,本文的后半部,俺会介绍一下“域名劫持”和“域名污染”。

域名服务器如何知道这些信息?

  刚才介绍了“客户端域名解析”的过程。接下来说说域名服务器是如何得到这些信息的。
* ##### 域名的缓存
  大伙儿平时使用的域名服务器,技术术语叫“递归域名服务器”。“递归服务器”是面向普通网友的。刚才介绍“域名解析”的时候提到的服务器就是“递归服务器”。
  “递归服务器”的内部通常会有一个 DNS记录 的缓存——这个缓存是为了提高查询效率的。当某台电脑向递归服务器发起域名查询时,递归服务器首先看自己的缓存中有没有该域名的记录,如果有,直接就回复该记录给查询的电脑。
  万一对方想要查询的域名没找到,咋办捏?这时候就要进行缓存的同步。

  • ##### 缓存的同步
      下面就拿俺博客的域名为例,说说这种情况的处理流程。
      1. 对方查询 program-think.blogspot.com 这个域名,“递归服务器”发现自己的缓存中没有
      2. “递归服务器”会先去找“根域名服务器”帮忙,“根服务器”会告诉“递归服务器”说:这个域名属于 com 这个分支之下,你去找 com 这个域名的“权威服务器”,这个权威服务器的 IP地址 是 xxx。
      3. 然后“递归服务器”根据拿到的这个 xxx地址,又去找“com 域名的权威服务器”。“com 域名的权威服务器”告诉它:你应该去找“blogspot.com 域名的权威服务器”,这个权威服务器的 IP地址 是 yyy
      4. 然后“递归服务器”又屁颠屁颠地去找“blogspot.com 域名的权威服务器”。这时候“blogspot.com 域名的权威服务器”才会告诉它,program-think.blogspot.com 这个域名的 IP地址 到底是多少。
      大伙儿看到没有?整个过程如同“踢皮球”,效率是很低的。所以俺前面提到,“递归域名服务器”必须得有一个缓存,以此来优化效率(不用每次查询都来一次“踢皮球”)。
  • ##### 同步的周期
      说完了“域名的同步”,顺便提一下“同步的周期”。
      因为互联网上的域名信息是有可能发生变化的。比如增加了某个新域名,注销了某个旧域名,或者某个域名对应的 IP地址 变了。所以,“递归服务器”上保留的缓存中,每一条域名记录都有一个生命周期(可能是几分钟,也可能是几小时)。如果某条记录的生命周期过了,就会被删除,然后重新同步。

啥是“域名劫持”?

  刚才说了,域名服务器上都会保存一大堆的域名记录(每条记录包含“域名”和“IP地址”)。当收到域名查询的时候,域名服务器会从这堆记录中找到对方想要的,然后回应给对方。
  如果域名服务器上的某条记录被人为修改了,那么一旦要查询这条记录,得到的就是错误的结果。这种情况称之为“域名劫持”。

谁有“域名劫持”的企图?

  “域名劫持”通常是电信运营商(ISP)干的好事儿。很多宽带用户用的域名服务器就是 ISP 提供给你的。而天朝的 ISP 也是很奇葩的——经常耍流氓。
  举例:
  前几年曾经出现过:某个 ISP 跟百度勾结,把谷歌的流量重定向到百度。具体搞法是:该 ISP 篡改自己的域名服务器的记录,把里面跟 google.com 相关的域名记录的 IP地址 修改为百度服务器的 IP地址。如此一来,假设你用的是这个 ISP 的域名服务器,当你在浏览器输入 www.gooogle.com 的时候,你的电脑查询到的 IP地址 其实是百度的 IP地址,所以浏览器打开的是“百度”的主页。

如何对付“域名劫持”?

  刚才说了,“域名劫持”的根源在于:域名服务器上的记录被人给改了。要对付这种耍流氓,最直接的办法就是不要使用这种流氓 ISP 提供的域名服务器,改用国外那些比较靠谱的。目前口碑最好的,大概是 Google 提供的两个域名服务器,IP地址 分别是 8.8.8.88.8.4.4 ——这俩不光是地址好记,更重要的是,不会耍流氓。

啥是“域名污染”?

  先提醒一下:“域名污染”这个词还有其它几个别名,分别是“域名欺骗”、“域名缓存投毒”(洋文叫:DNS cache poisoning)。今后看到这几个别名,要晓得是同一个意思。
  “域名污染”的原理,简单说来是这样滴:当你的电脑向域名服务器发送了“域名查询”的请求,然后域名服务器把回应发送给你的电脑,这之间是有一个时间差的。如果某个攻击者能够在域名服务器的“DNS应答”还没有到达你的电脑之前,先伪造一个错误的“DNS应答”发给你电脑。那么你的电脑收到的就是错误的信息,并得到一个错误的 IP地址。

谁有“域名污染”的企图?

  从技术上讲,只要攻击者能够位于“你”和“域名服务器”的传输线路中间,那么攻击者就有机会搞“域名污染”。能够做到这点的,可能是一个黑客/骇客,也可能是 ISP。不过这些都不是本节聊的重点。本节的重点是 GFW——它是最有资源搞域名污染的,同时也最有意愿搞域名污染的。在《如何翻墙?》这篇全面扫盲教程中,俺提到 GFW 最有名的三板斧,其中一板斧就是“域名污染”。
  举例:
  比如某个国外网站,长年累月地抹黑咱们伟大光荣正确的党国,搞得咱们的“伟光正”很没面子,很不爽。那么朝廷的“真理部”就会给 GFW 下达封杀令——要求 GFW 全面封锁某某网站。对于 GFW 而言,要全面封掉某个网站,最简单的一个办法就是直接污染该网站的域名。用了这招之后,那些不懂翻墙的网友只要是通过【域名的方式】访问该网站,他们的电脑进行 DNS查询 之后,多半会得到错误的结果(也就是说,查到的 IP地址 是假的);既然拿到假的 IP地址,当然就无法打开这个网站的页面啦。

GFW 的两种“域名污染”

  刚才俺解释了“域名污染”的原理,那种形式不妨称为“直接污染”。由于 GFW 的特殊性,它不但可以做到“直接污染”,还可以做到“间接污染”。而普通的骇客顶多只能做到“直接污染”,难以做到“大范围的间接污染”。  那么这两种污染有啥区别捏?且听俺细细道来。

GFW 部署在哪?

  首先有必要先扫盲一下“GFW的部署位置”。咱们天朝的互联网只有少数几个国际出口(名气较大的是:北京出口、上海出口、广州出口)。如果你要访问天朝之外的网站,你的网络数据流就必定会经过其中的某个“国际出口”。而天朝的【每一个】国际出口都部署了 GFW 的设备。
  说到 GFW 的设备,顺便插一句:
  GFW 是洋文“Great FireWall”的缩写。很多同学(包括很多懂技术的同学)都望文生义,想当然地以为 GFW 就是某种“防火墙”设备。其实不然。GFW 是基于 IDS(IDS是“入侵监测系统”的缩写)打造的。有空的话,俺再来聊聊 GFW 本身的技术细节。

GFW 的直接污染

  因为 GFW 部署在天朝的国际出口。如果你用的是【国外的】域名服务器,你的“DNS请求”必定会经过国际出口;同样,域名服务器的“DNS应答”必定也会经过国际出口才能到你的电脑。这一来一回就给 GFW 提供了耍流氓的机会。
  这种污染就是俺所说的“直接污染”。

GFW 的间接污染

  刚才介绍了“使用国外域名服务器会被直接污染”。那如果你用的是【国内的】域名服务器捏?就会被“间接污染”。过程如下:
  1. 比方说你用的是电信的 DNS服务器,然后你想要访问某个(被封杀的)反共网站。
  2. 对于被封杀的网站,其网站服务器必定在国外,而且网站的域名肯定也不会使用 CN 之下的域名。所以,被封锁的网站,其上级域名的“权威域名服务器”肯定也是在国外。
  3. 当你向“电信的DNS服务器”查询反共网站的域名,这台“电信的DNS服务器”就会去找这个反共网站的上一级域名对应的“权威域名服务器”去进行“域名查询”。
  4. 因为是从国外进行域名查询,相关的数据流必定要经过国际出口。一旦经过国际出口,就会被 GFW 污染。
  5. 如此一来,“电信的域名服务器”拿到的是已经被污染的域名记录(里面的IP是错的)。而且“电信的域名服务器”会把这条错误的记录保存在自己的域名缓存中。
  6. 下次如果有另一个网友也找这台“电信的域名服务”查询这个反共网站,也会查到错误的结果。
   上述过程不断重复,最终会导致:全国所有的域名服务器,它们的缓存中只要是包含了那个反共网站的记录,记录中的 IP地址 必定是错的(这个错误的 IP地址 也就是 GFW 伪造的那个)。所以说“间接污染”是很牛逼的,可以把错误的域名记录扩散到全国。
  刚才俺说了,“域名污染”也叫“域名缓存投毒”。“投毒”一词真的非常形象——就好象在某条河流的源头下毒,从而把整条河流的水都污染。在互联网时代搞“域名污染”是非常卑鄙下流的。因为 DNS 是互联网的基础设施,而“域名污染”直接破坏了互联网的基础设施。

谈谈 DNS 原理及“域名劫持”和“域名欺骗/域名污染”相关推荐

  1. 域名劫持定义及原理、域名被劫持解决办法有那些

    域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的IP地址从而实现用户无法访问目标网站的目的或者蓄意或恶意要求用户访问指 ...

  2. 什么是域名劫持和域名污染

    域名劫持 域名服务器上都会保存一大堆的域名记录(每条记录包含"域名"和"IP地址").当收到域名查询的时候,域名服务器会从这堆记录中找到对方想要的,然后回应给对 ...

  3. 新手如何预防网站域名劫持?预防劫持工具有哪些

    有些站长在建站过程中会发现,自己的域名用着用着不能用了,或者跳转到别的网站上.很多站长都遇到过域名劫持的问题,那么如果遭遇域名被劫持该如何做呢?小白遇到这种问题该怎么操作呢?新手如何预防网站域名劫持? ...

  4. 你知道域名劫持的重要性吗? 教你防范网站被域名劫持

    域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的地址从而实现用户无法访问目标网站的目的. 域名劫持,有什么危害: 域名 ...

  5. cn域名保护隐私_为什么域名隐私保护如此重要

    为什么域名隐私保护如此重要 如今,维护个人隐私已变得越来越艰难. 保证个人信息不受陌生人侵犯是一种永恒的挑战,您应该对这一点保持警惕. 如果您拥有自己的博客,那么您的信息可能正暴露在大众的视野里--除 ...

  6. 全面了解移动端DNS域名劫持等杂症:原理、根源、HttpDNS解决方案等

    1.引言 对于互联网,域名是访问的第一跳,而这一跳很多时候会"失足"(尤其是移动端网络),导致访问错误内容.失败连接等,让用户在互联网上畅游的爽快瞬间消失. 而对于这关键的第一跳, ...

  7. 【转载】全面了解移动端DNS域名劫持等杂症

    原文链接:http://www.52im.net/thread-2121-1-1.html 0 前言 之前在公司的项目中,引入了HttpDNS,但是有很多同事对HttpDNS的原理不是很了解,之前分享 ...

  8. Linux:设置/修改linux主机名+hosts映射+主机名解析机制分析+DNS域名劫持

    设置/修改主机名 查看主机名hostname,修改主机名(在vim编译器里修改),重启命令(reboot),操作如下: 结果如下: 设置hosts映射: 操作意义:ip地址很长,不好记忆,直接记忆主机 ...

  9. 运营商 html劫持 原理,域名劫持、运营商流量劫持的现象及分析

    1.域名劫持 现象就是,打开网站的页面,会出现莫名的跳转到站内或站外其他的网址.或者直接显示了站外的内容. 判断方法,更换其他绑定您网站的域名来访问,看是否正常.如果其他域名访问正常,应该基本确定是被 ...

  10. 1、请简述DNS的作用,并说明当你输入网址“www.nxtc.edu.cn“按下回车后,DNS是怎么工作的?(关键步骤可以给出相应图示) 2、详细描述域名劫持攻击的过程及防御方式。

    一.请简述DNS的作用,并说明当你输入网址"www.nxtc.edu.cn"按下回车后,DNS是怎么工作的?(关键步骤可以给出相应图示) DNS的作用: 把网址解析转化成ip地址, ...

最新文章

  1. python编写脚本方法_【Python】教你一步步编写banner获取脚本
  2. linux c++ 目录操作,C++文件及文件夹操作整理(代码示例)
  3. 如何搭建数据中台?行业AI独角兽:一手AI,一手Know-How
  4. mysql查询操作及正则表达式小结
  5. PAT_A1106#Lowest Price in Supply Chain
  6. C/C++中的常量指针与指针常量
  7. 《剑指offer》面试题15—输出链表中倒数第n个结点
  8. URLencode 转义符
  9. Haswell 事务内存相关的一些资源介绍
  10. IDEA黑色主题Darcula主题看不到鼠标指针
  11. PHPStorm长时间Updating Indices
  12. 【代码审计】51 TP5框架、无框架 变量覆盖反序列化
  13. java发送邮件连接超时,Java邮件超时和连接超时处理
  14. 如何在 Mac 上更改鼠标光标颜色?
  15. 为音视频自动生成字幕的python工具
  16. 计算机隐藏文件夹无法显示,无法显示隐藏文件怎么办 无法显示隐藏文件夹的解决方法...
  17. 高峰期在线人数以及高峰期的持续时间
  18. 探究PBR的两种流程以及Unity中的PBS
  19. 红米K40参数和配置 红米k40上市时间和价格
  20. 网站项目策划的确立过程分析

热门文章

  1. 计算机组装与维护毕业论文范文,计算机应用毕业论文 计算机组装与维护
  2. 深刻认识差模电压和共模电压
  3. html网页字体颜色代码大全
  4. 2019 ICPC 南京区域赛 - H Prince and Princess(博弈+思维)
  5. Cloud E随笔-后端_piece3--实现登录功能
  6. 计算机之父ppt,24计算机之父童年的故事.ppt
  7. U3D常用介绍,搭建一个简单的三维效果
  8. 配对t检验的应用条件是什么_配对t检验在实际工作中的应用
  9. 使用cnpm yarn下载依赖后,pdfjs-dist包报错
  10. TYPE g_date_tbl_typ IS TABLE OF DATE INDEX BY VARCHAR2(1000);