目录
- 前言
- 第一步:浏览器对 DNS 解析
- 第二步:本地 hosts文件 DNS解析
- 第三步:本地域名解析服务器 DNS 解析
- 第四步:根域名解析服务器 DNS 解析
- 第五步:gTLD服务器 DNS 解析
- 第六步:权威域名服务器 DNS 解析
- 第七步:返回缓存
- DNS 解析原理
- DNS 解析优化
- DNS 劫持
- DNS 劫持应答策略
- 结束语
- 题外话
- 参考
前言
在上一篇文章中,介绍浏览器解析 URL 的黑魔法,这篇文章来介绍一下 DNS 黑魔法。
概念
DNS 的全称是 Domain Name System 或者 Domain Name Service,它次要的作用就是将人们所相熟的网址 (域名) “翻译”成电脑能够了解的 IP 地址,这个过程叫做 DNS 域名解析。
为什么须要 DNS 解析
网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通信时只能辨认如“192.168.0.0.1”之类的IP地址,而不能意识域名。而对于人类的心智模型来说,很难记住10个以上IP地址的网站,所以咱们拜访网站时,更多的是在浏览器地址栏中输出域名,就能看到所须要的页面,这是因为有一个叫“DNS服务器”的计算机主动把咱们的域名“翻译”成了相应的IP地址,而后调出IP地址所对应的网页。
大厂常常问
DNS 解析在面试中是一个常见的问题。常常会存在这样的题目「在浏览器输出一个 URL 之后产生了什么?」,这个问题扩大开来就囊括了 DNS 的解析过程。当然还有的面试官会把 DNS 的解析过程独自拿进去问。这篇文章就具体来讲讲 DNS 怎么解析的。
第一步:浏览器 DNS 解析
查看浏览器缓存中是否缓存过该域名对应的IP地址
用户通过浏览器浏览过某网站之后,浏览器就会主动缓存该网站域名对应的地址,当用户再次拜访的时候,浏览器就会从缓存中查找该域名对应的IP地址,因为缓存不仅是有大小限度,而且还有工夫限度(域名被缓存的工夫通过属性来设置),所以存在域名对应的找不到的状况。
当浏览器从缓存中找到了该网站域名对应的地址,那么整个解析过程完结,如果没有找到,将进行下一步骤。对于的缓存工夫问题,不宜设置太长的缓存工夫,工夫太长,如果域名对应的发生变化,那么用户将在一段时间内无奈失常拜访到网站,如果太短,那么又造成频繁解析域名。
浏览器缓存 DNS 工夫
浏览器为了进步响应的工夫,会对 DNS 记录缓存,然而不同的浏览器缓存的工夫不一样。
chrome
chrome://net-internals/#dns 这里能够看各域名的DNS 缓存工夫。Chrome对每个域名会默认缓存60s。然而有可能chrome://net-internals显示不进去dns缓存。只有一个革除缓存的按钮。
当遇到这样的状况时,你能够依照如下的流程操作来查看 DNS 缓存,这个不能查看 DNS 缓存是因为 chrome://net-internals/ 的一些性能曾经在Chrome 71之后被移除了。
- chrome://net-export 导出日志
- https://netlog-viewer.appspot... 下导入日志查看
Firefox
Firefox有DNS缓存性能,默认缓存工夫只有1分钟。
IE
IE将DNS缓存30min。
Safari
Safari DNS缓存工夫约为10s
浏览器对 DNS 解析后果的解决
如果一个域名的DNS解析后果会有多个的话,浏览器是如何解决的呢?Chrome浏览器会优先向第一个IP发动HTTP申请,如果不通,再向前面的IP发动HTTP申请。DNS 域名查问网址
第二步:本地 hosts文件 DNS解析
如果第一个步骤没有实现对域名的解析过程,那么浏览器会去零碎缓存中查找零碎是否缓存过这个域名对应的地址,也能够了解为零碎本人也具备域名解析的根本能力。在零碎中,能够通过设置文件来将域名手动的绑定到 某个 IP 上。如果应用过代理软件(如 fiddler )的同学可能对这个比较清楚一点,在零碎的 hosts 文件,能够用来设置域名和 IP 的对于关系。对于普通用户,并不举荐本人手动绑定域名和,对于开发者来说,通过绑定域名和,能够轻松切换环境,能够从测试环境切换到开发环境,不便开发和测试。
hosts文件
hosts文件是一个用于贮存计算机网络中各节点信息的计算机文件。这个文件负责将主机域名映射到相应的IP地址。hosts文件通常用于补充或取代网络中DNS的性能。和DNS不同的是,计算机的用户能够间接对hosts文件进行管制。hosts文件的作用十分大,能够自在解析域名。
hosts文件地位
- Windows NT/2000/XP/Vista/win7(即微软NT系列操作系统):默认地位为 %SystemRoot%\system32\drivers\etc\,但也能够扭转。
- 典型的XP零碎hosts文件地位:C:\windows\system32\drivers\etc
- Windows 95/98/Me:%WinDir%\Linux及其他类Unix操作系统:/etc苹果系:
- Mac OS 9及更早的零碎:System Folder: Preferences或System folder(文件格式可能与Windows和Linux所对应的文件不同)
- Mac OS X:/private/etc(应用BSD格调的hosts文件)
- iPhone OS:/etc
- iPad OS:/private/etcSymbian第1/2版手机:C:\system\data\hosts
- Symbian第3版手机:C:\private\10000882\hosts,只能应用兼容AllFiles的文件浏览器拜访,大部分都不行。
地位如果有问题请告知,谢谢!
hosts文件的一些用处
- 将广告域名重定向到本地IP地址:127.0.0.1上来过滤广告。
- hosts文件可用于拦挡一些歹意网站的申请,从而避免拜访欺诈网站或感化一些病毒或恶意软件。
- 应用hosts文件来强制将网站指定到正确的IP上。
第三步:本地域名解析服务器 DNS 解析
如果在本机上无奈实现域名的解析,那么零碎只能申请本地域名解析服务零碎进行解析,本地域名零碎个别都是本地区的域名服务器,比方你连贯的校园网,那么域名解析零碎就在你的校园机房里,如果你连贯的是电信、挪动或者联通的网络,那么本地域名解析服务器就在本地区,由各自的运营商来提供服务。对于本地服务器地址,零碎应用命令就能够查看,在和零碎下,间接应用命令来查看服务地址。个别都缓存了大部分的域名解析的后果,当然缓存工夫也受域名生效工夫管制,大部分的解析工作到这里就差不多曾经完结了,负责了大部分的解析工作。
第四步:根域名解析服务器 DNS 解析
本地域名解析器还没有实现解析的话,那么本地域名解析服务器将向根域名服务器发动解析申请。本地域名解析向根域名服务器发动解析申请,根域名服务器返回的是所查域的通用顶级域xxx地址。
根域名解析服务器
因为晚期的 DNS 查问后果是一个512字节的 UDP 数据包。这个包最多能够包容13个服务器的地址,因而就规定全世界有13个根域名服务器,编号从a.root-servers.net始终到m.root-servers.net。
这13台根域名服务器由12个组织独立经营。其中,Verisign 公司治理两台根域名服务器:A 和 J。每家公司为了保障根域名服务器的可用性,会部署多个节点,比方单单 Verisign 一家公司就部署了104台根域名服务器(2016年1月数据)。
所以,根域名服务器其实不止13台。据统计,截止2016年1月,全世界共有 517 台根域名服务器。你能够在 http://root-servers.org 这个网站查到所有根域名服务器的信息。
第五步:gTLD服务器 DNS 解析
本地域名解析服务器向gTLD服务器发动申请。gLTD服务器查问并返回域名对应的Name Server域名服务器的地址,通常是你注册的域名服务器,例如你在某个域名服务器提供商申请的域名,那么这个域名解析工作就由这个域名服务提供商来实现。
第六步:权威域名服务器 DNS 解析
权威域名服务器会查问存储的域名和ip的映射关系表,将 ip 连同一个 TTL 值返回给DNS 本地域名服务器。
第七步:返回,而后缓存
本地域名服务器拿到 ip 和 TTL 会缓存起来。返回给浏览器。
DNS 解析原理
- 本地DNS解析是递归过程。
- 其余服务器DNS解析是迭代过程。
每一次DNS解析须要20~120ms ,第一次解析实现后,会把解析信息缓存到本地 下一次再次发送这个域名申请,间接从本地缓存中进行解析了
一个页面中域名很多那么须要解析的就很多服务器。缩小域名解析(页面中尽可能少用不同的服务器),然而真实情况要做一个取舍: 为了节约服务器资源,大型网站个别都是服务器分布式 或者 服务器拆散 WEB资源服务器 图片服务器 数据服务器 .....
DNS 解析优化
DNS解析会有20ms~120ms的耗时,哪缩小这个耗时是有必要的,通常是做饭是缩小 DNS 的申请次数,尽可能不要申请太多的服务器解析。然而当初很多的公司为了做负载平衡或者服务器的拆散独立部署,都是更可能多申请服务器。哪还有一种做法就是 DNS 预解析,DNS预解析其实就是缩小域名解析成IP的工夫。
<link rel="dns-prefetch" href="xxx"></link>
<meta http-equiv="x-dns-prefetch-control" content="on"/>
DNS 劫持
概念
DNS劫持即通过某种技术手段,篡改正确域名和IP地址的映射关系,使得域名映射到了谬误的IP地址,因而能够认为DNS劫持是一种DNS重定向攻打。DNS劫持通常可被用作域名欺诈,如在用户拜访网页时显示额定的信息来赚取支出等;也可被用作网络钓鱼,如显示用户拜访的虚伪网站版本并非法窃取用户的个人信息。
DNS 劫持大事记
《AWS route53 BGP路由透露事件》
事件产生在2018年4月24日。黑客针对四段调配给AWS,本应作为AWS route53 DNS服务器服务地址的IP空间(205.251.192.0/23, 205.251.194.0/23, 205.251.196.0/23, 205.251.198.0/23)公布了虚伪的BGP路由,导致在BGP透露的两个小时期间,本应该AWS route53 DNS服务器的DNS查问都被重定向到了黑客的歹意DNS服务器。且黑客DNS劫持的指标十分明确,歹意DNS服务器只响应对http://myetherwallet.com 的查问,其余域名的查问均返回SERVFAIL。一旦用户没有留神“网站不平安”的提醒而拜访http://myetherwallet.com 登录本人的以太坊钱包,黑客就能够轻易获取用户的私钥进而窃取用户的数字货币资产。
据不齐全统计,DNS劫持导致两个小时内有多个用户的以太坊钱包被转账清空,共计至多13000美元的资产被黑客盗取。
《巴西银行钓鱼事件》
事件产生在2018年。黑客利用D-Link路由器的破绽,入侵了至多500个家用路由器。黑客入侵后更改受害者路由器上的DNS配置,将受害者的DNS申请重定向到黑客本人搭建的歹意DNS服务器上。黑客入侵后更改受害者路由器上的DNS配置,将受害者的DNS申请重定向到黑客本人搭建的歹意DNS服务器上,最终诱导本来想拜访失常银行网站的受害者拜访到钓鱼网站,并歹意窃取受害者的银行账目明码信息。
黑客诱导本来想拜访失常银行网站的受害者拜访到钓鱼网站,并歹意窃取受害者的银行账目明码信息。
DNS 劫持分类
本地DNS劫持
- 篡改本地的 hosts文件。黑客通过木马病毒或者恶意程序入侵PC,篡改DNS配置(hosts文件,DNS服务器地址,DNS缓存等)。
攻打路由器或者利用路由器的破绽篡改 DNS 配置。
DNS解析门路劫持
- 通过技术手段(两头盒子,软件等)将DNS流量重定向到其余DNS服务器。
- 利用分光等设施将DNS查问复制到网络设备,并先于失常应答返回DNS劫持的后果。
网络设备或者软件间接代替DNS服务器对DNS查问进行应答。
篡改DNS权威记录
- 篡改DNS权威记录 咱们这里指的黑客非法入侵DNS权威记录治理账号,间接批改DNS记录的行为。
DNS 劫持应答策略
DNS劫持在互联网中仿佛曾经变成了粗茶淡饭,那么该如何应答各种层出不穷的DNS劫持呢?如果狐疑本人遇到了DNS劫持,首先要做的事件就是要确认问题。
如何确认DNS劫持
阿里云的能够检测域名是否被劫持(留神我不是阿里云的拖,哈哈哈哈),地址。
DNS劫持防备
- 装置杀毒软件,进攻木马病毒和恶意软件;定期批改路由器治理账号密码和更新固件。
- 抉择平安技术实力过硬的域名注册商,并且给本人的域名权威数据上锁,避免域名权威数据被篡改。
- 抉择反对DNSSEC的域名解析服务商,并且给本人的域名施行DNSSEC。DNSSEC可能保障递归DNS服务器和权威DNS服务器之间的通信不被篡改。阿里云DNS作为一家业余的DNS解析服务厂商,始终在不断完善打磨产品性能,DNSSEC性能曾经在开发中,不日就会上线公布。
- 在客户端和递归DNS服务器通信的最初一英里应用DNS加密技术,如DNS-over-TLS,DNS-over-HTTPS等。
结束语
如果文章中什么不对或者写的不好的中央,请大家多多斧正,谢谢!码字不易,点个赞加个关注吧!
题外话
笔者在「深圳虾皮」,一家口碑还不错的东南亚电商公司,2021大量招人,机会多多!快来退出咱们吧!
当初有想法,还是当前有想法的同学,都能够加我微信[stone---999]!内推你退出咱们的小家庭!
参考
- https://www.zhihu.com/questio...
- https://cloud.tencent.com/dev...
- https://www.ruanyifeng.com/bl...
- https://www.ruanyifeng.com/bl...
- https://zhuanlan.zhihu.com/p/...