DNS系统
DNS系统是域名系统(Domain Name System)的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人方便的访问互联网,而不用去记住能够被机器直接读取的IP数串,DNS是一个典型的最终一致性的系统。
DNS域名解析过程
当一个用户在浏览器中输入www.baidu.com网址时,DNS解析将会有将近10个步骤:
- 浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过TTL属性来设置。这个缓存时间太长和太短都不好,如果缓存时间太长,一旦域名被解析到的IP有变化,会导致客户端缓存的域名无法解析到变化后的IP地址,以致该域名不能正常解析,这段时间内可能会有一部分用户无法访问网站。如果时间设置太短,会导致用户每次访问网站都要重新解析一次域名。
- 如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。其实操作系统也会有一个域名解析的过程,在Windows中可以通过C:\Windows\System32\drivers\etc\hosts文件来设置,你可以将任何域名解析到任何能够访问的IP地址。如果你在这里指定了一个域名对应的IP地址,那么浏览器会首先使用这个IP地址。例如:我们在测试时可以将一个域名解析到一台测试服务器上,这样不用修改任何代码就能测试到单独服务器上的代码的业务逻辑是否正确。正是因为有这种本地DNS解析的过程,所以黑客就有可能通过修改你的域名解析来把特定的域名解析到它指定的IP地址上,导致这些域名被劫持。这导致早期的Windows版本中出现过很严重的问题,而且对于一般没有太多电脑知识的用户来说,出现问题后很难自己解决,所以Windows7中奖hosts文件设置成了只读的,防止这个文件被轻易修改。
- 如何、怎么知道域名服务器呢?在我们的网络配置中都会有“DNS服务器地址”这一项,这个地址就用于解决前面所说的如果两个过程无法解析时要怎么办,操作系统会把这个域名发送给这里设置的LDNS,也就是本地区的域名服务器。大约80%的域名解析到这里就已经完成了,所以LDNS主要承担了域名的解析工作
- 如果LDNS任然没有命中,就直接到Root Server域名服务器请求解析
- 根域名服务器返回给本地域名服务器一个所查询域的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如.com、.cn和.org等,全球只有13台左右
- 本地域名服务器(Local Dns Server)再向上一步返回的gTLD服务器发送请求
- 接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server通常就是你注册的域名服务器。例如:你在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成。
- Name Server域名服务器会查询存储的域名和IP大映射关系表,正常情况下都根据域名得到目标IP记录,连同一个TTL(Time To Live,失效时间)值返回给DNS Server 域名服务器.
- 返回该域名对应的IP和TTL值,Local DNS Server 会缓存这个域名和IP的对应关系,缓存的时间有TTL值控制
- 把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。
DNS系统是最终一致性的