不断创造,更快成长!这是我参加“挖金日计划·6月更新挑战”的第5天。点击查看活动详情
目录 前言步骤1:浏览器DNS解析步骤2:本地hosts文件DNS解析步骤3:本地域名解析服务器DNS解析步骤4:根域名解析服务器DNS解析步骤5:gTLD服务器DNS解析步骤6:权威域名服务器DNS解析步骤7:返回缓存DNS解析原理DNS解析优化DNS劫持DNS劫持应对策略结语题外话参考文献前言
上一篇文章#面试秀:URL能用八进制代替吗?简单讲了“浏览器是如何解析URL的”,这篇文章讲了DNS是如何解析的。DNS解析是面试中常见的问题,经常会有类似“在浏览器输入URL之后会发生什么?”这样的问题,这个问题扩展为DNS解析过程,当然有些面试官会单独问DNS解析过程,本文就来详细讲讲DNS是如何解析的。
概念
DNS的全称是Name或者Name。它的主要作用是把人们所熟悉的URL(域名)“翻译”成计算机能够理解的IP地址。这个过程就叫DNS域名解析。
为什么需要DNS解析?
大多数网络通讯都是基于 TCP/IP,而 TCP/IP 又是基于 IP 地址的。因此,计算机在互联网上通讯时,只能识别“192.168.0.0.1”这样的 IP 地址,无法识别域名。对于人类的心智模型来说,很难记住超过 10 个 IP 地址的网站,所以我们在访问网站时,一般都是在浏览器地址栏中输入域名,才能看到需要的页面。这是因为有一台叫做“DNS 服务器”的计算机,它会自动将我们的域名“翻译”成对应的 IP 地址,然后调出 IP 地址对应的网页。
步骤1:浏览器DNS解析检查域名对应的IP地址是否缓存在浏览器缓存中
用户通过浏览器浏览某个网站后,浏览器会自动缓存该网站域名对应的地址,当用户再次访问时,浏览器会从缓存中查找该域名对应的IP地址,由于缓存不仅有大小限制,还有时间限制(域名缓存的时间是通过属性设置的),所以会出现找不到域名的情况。
当浏览器从缓存中找到网站域名对应的地址时,整个解析过程就结束了,如果没有找到,才会进行下一步。至于缓存时间问题,不建议设置太长的缓存时间,时间太长的话,如果域名发生变化,用户一段时间内无法正常访问网站,如果时间太短,又会造成域名频繁解析,真是让人“苦不堪言”。
浏览器缓存 DNS 时间
为了提高响应时间,浏览器会缓存DNS记录,但是不同的浏览器缓存时间不同。
://net-/#dns 这里可以看到每个域名的DNS缓存时间,每个域名默认会缓存60秒,不过有可能://net-不显示dns缓存,只有一个清除缓存的按钮。
遇到此类情况可以按照下面的流程查看DNS缓存,无法查看DNS缓存的原因是71之后://net-/的部分功能被移除了。
://net-导出日志和导入日志查看
有DNS缓存功能,默认缓存时间也是60s。
IE
IE 缓存 DNS 30 分钟。
DNS缓存时间约为10s
浏览器如何处理DNS解析结果
如果一个域名有多个DNS解析结果,浏览器如何处理?浏览器会先向第一个IP发起HTTP请求,如果失败,再向后续的IP发起HTTP请求。
DNS域名查询网站
步骤2:本地hosts文件的DNS解析
如果第一步没有完成域名解析过程,那么浏览器就会去系统缓存中查找系统是否缓存了这个域名对应的地址。也可以理解为系统本身具备基本的域名解析能力。在系统中可以通过设置文件来手动将域名和某个IP进行绑定,如果你用过代理软件(如),可能对这一点更加清楚。系统中的hosts文件可以用来设置域名和IP的对应关系,对于普通用户来说,不建议自己手动绑定域名。对于开发者来说,通过绑定域名和,可以方便的进行环境切换,可以从测试环境切换到开发环境,方便开发测试。
Hosts 文件
hosts文件是用来存储计算机网络中各个节点信息的计算机文件。此文件负责将主机域名映射到相应的IP地址。hosts文件通常用于补充或替代网络中DNS的功能。与DNS不同,计算机用户可以直接控制hosts文件。hosts文件非常有用,可以自由解析域名。
hosts文件位置hosts文件的一些用途步骤3:本地域名解析服务器DNS解析
如果在本地机器上无法完成域名解析,那么系统只能请求本地的域名解析服务系统进行解析。本地域名系统一般就是本地的域名服务器,比如你连的是校园网,那么域名解析系统就在你校园机房,如果你连的是电信、移动或者联通的网络,那么本地域名解析服务器就在本地,由各自的运营商提供。对于本地的服务器地址,系统内可以使用命令查看。在系统下,直接使用命令查看服务地址。一般来说,大部分域名解析结果都会被缓存起来,当然缓存时间也是受域名过期时间控制的。大部分解析工作到这里就差不多结束了,它负责了大部分的解析工作。
步骤4:根域名解析服务器DNS解析
如果本地域名解析器还未完成解析,则本地域名解析服务器会向根域名服务器发起解析请求,本地域名解析服务器向根域名服务器发起解析请求,根域名服务器返回所查询域的通用顶级域xxx地址。
根 DNS 服务器
由于早期的DNS查询结果是一个512字节的UDP数据包。这个数据包最多可以装下13个服务器地址,所以规定全球共有13台根域名服务器,编号从到。这13台根域名服务器分别由12个组织独立运营。其中,公司管理两台根域名服务器:A和J。为了保证根域名服务器的可用性,每个公司都会部署多个节点。例如,单个公司就部署了104台根域名服务器(2016年1月数据)。因此,根域名服务器的数量实际上远不止13台。据统计,截止2016年1月,全球共有517台根域名服务器。您可以在此网站找到所有根域名服务器的信息。
步骤 5:gTLD 服务器 DNS 解析
本地域名解析服务器向gTLD服务器发起请求,gLTD服务器查询并返回该域名对应的Name域名服务器的地址,这个域名服务器一般就是你注册的域名服务器。比如你是从某个域名服务器提供商那里申请的域名,那么域名解析任务就是由这个域名服务商来完成的。
第六步:权威域名服务器DNS解析
权威域名服务器会查询保存的域名与IP映射表,并将IP和TTL值一起返回给DNS本地域名服务器。
步骤 7:返回并缓存
本地域名服务器获取IP地址和TTL,并将其缓存起来,并返回给浏览器。
DNS解析原理
每次DNS解析需要20-120ms,首次解析完成后会将解析信息缓存在本地,下次再次发送域名请求时,会直接从本地缓存中进行解析。
如果一个页面中有很多域名,就需要解析很多台服务器。减少域名解析(一个页面中使用尽可能少的不同服务器),但现实中必须做出权衡:大型网站为了节省服务器资源,一般都有分布式服务器或者单独的服务器WEB资源服务器、图片服务器、数据服务器......
DNS解析优化
DNS 解析需要 20ms 到 120ms,所以需要减少这个时间。通常的做法是减少 DNS 请求次数,尽量不要请求过多的服务器解析。但是现在很多公司为了做负载均衡或者服务器单独独立部署,会请求更多的服务器。还有一种做法是 DNS 预解析,其实就是减少域名解析成 IP 的时间。
<link rel="dns-prefetch" href="xxx">
http-equiv="x-dns-prefetch-control" content="on"/>
DNS劫持
DNS劫持就是通过某种技术手段篡改正确的域名与IP地址的映射关系,使域名映射到错误的IP地址上。因此DNS劫持可以认为是一种DNS重定向攻击。DNS劫持通常可以用于域名欺诈,比如在用户访问网页时显示附加信息以赚取收入等;也可以用于钓鱼,比如显示用户访问网站的假版本,非法窃取用户的个人信息。
DNS 劫持事件:AWS BGP 路由泄漏
事件发生于2018年4月24日,黑客将分配给AWS的四个本该作为AWS 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 DNS服务器的DNS查询被重定向到了黑客的恶意DNS服务器上。黑客的DNS劫持目标非常明确,恶意DNS服务器只响应针对该域名的查询,其他域名的查询全部被返回。一旦用户不理会“网站不安全”提示,登录自己的以太坊钱包,黑客就能轻松获取用户的私钥,窃取用户的数字货币资产。
据不完全统计,DNS劫持导致多个用户的以太坊钱包在两小时内被清空,总计至少1.3万美元资产被黑客窃取。
巴西银行网络钓鱼事件
该事件发生于2018年,黑客利用D-Link路由器的漏洞,入侵了至少500台家用路由器。入侵后,黑客通过修改受害者路由器上的DNS配置,将受害者的DNS请求重定向到黑客自建的恶意DNS服务器上。入侵后,黑客通过修改受害者路由器上的DNS配置,将受害者的DNS请求重定向到黑客自建的恶意DNS服务器上,最终诱导原本想要访问正常银行网站的受害者访问钓鱼网站并恶意窃取受害者的银行账户密码信息。黑客通过修改受害者路由器上的DNS配置,将受害者的DNS请求重定向到黑客自建的恶意DNS服务器上,最终诱导原本想要访问正常银行网站的受害者访问钓鱼网站并恶意窃取受害者的银行账户密码信息。
DNS劫持分类 本地DNS劫持 DNS解析路径劫持 篡改DNS权限记录 DNS劫持应对策略
DNS劫持似乎已经成为了互联网上的常见现象,那么面对层出不穷的各类DNS劫持事件,我们该如何应对呢?如果你怀疑自己遭遇了DNS劫持,那么首先要做的就是确认问题所在。
如何确认 DNS 劫持
阿里云可以检测域名是否被劫持(注意,我不是阿里云的拖累,哈哈哈哈)。
DNS 劫持预防参考
扫一扫在手机端查看
-
Tags : 域名解析host文件_面试装X:深入理解 DNS 解析
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。