DNS服务器解析
域名解析系统(domain-name-system):根据域名解析出服务器的外网IP
如果输入的是域名,需要进行 dns 解析成 IP,大致流程:
- 本地dns缓存
- 如果浏览器有缓存,直接使用浏览器缓存
- 本地DNS解析器缓存
- 否则使用hosts
- 客户端到本地dns服务端 [递归查询]
- 客户端向本地DNS服务器发出请求,等待肯定或者否定
- 这里使用的是UDP协议
- 本地dns服务器到高层级dns服务器 [迭代查询]
- 本地DNS服务器向根服务器发出请求,然后一层一层地往下一层级服务器询问
- 服务器和服务器之间使用的是TCP协议
- 本质的规则是DNS查询的包大于512字节的时候,触发DNS中的”TC位”(截断),使用TCP协议
- 所以,越来越多的应用使用IPv6,避免垃圾邮件和 DNSSEC(DNS Security Extensions) 之类的更新功能,由于响应量更大,DNS 逐渐趋向 TCP
递归查询和迭代查询的区别:
- 递归查询:A问B一个问题,B会直接回答是或者否,A只问了一次。
- 迭代查询:B问C一个问题,C说我不知道但是D可能知道,你去问D,然后B去问D,。。。,一直问出结果为止,B在整个询问过程中,要问很多次。
512字节的来源:
- 您可能想知道 512 字节的大小限制是从哪里来的。512 字节 UDP 有效负载大小取决于 IPv4。IPv4 标准规定,每台主机必须能够重组 576 字节或更小的字节的数据包,删除报头和其他选项,从而为有效负载数据保留 512 字节。这就是为什么原来只有 13 个 DNS 根服务器3的原因:13 个域名和 13 个 IPv4 地址很好地适合单个 UDP 数据包。
- 这个大小限制很早以前就被认为是一个问题。在 1999 年,提出了 DNS 扩展机制(EDNS),并对其进行了多年的更新,将其大小一直增加到 4096 字节(即 4 KB)。因此,如果您运行的是最新的 DNS 服务器,则切换到 TCP 的机会应该很小。
- 但是,即使 EDNS 已经存在了很长时间,它的支持也没有达到应有的普遍水平4。某些网络设备(例如防火墙)可能仍会假设 DNS 数据包大小。防火墙可能会认为是攻击,因此可能丢弃或拒绝大型 DNS 数据包。过去,这种行为可能没有引起明显的问题(或者确实没有,但是没有人理解为什么),但是随着 DNS 数据大小的不断增加,正确配置所有网络设备以支持较大的 DNS 数据包非常重要。如果网络环境不完全支持大型 DNS 消息,则可能导致 DNS 消息被网络设备拒绝,或者在分段过程中被部分丢弃。对于最终用户而言,这看起来像是 DNS 查询没有得到答复,或者花费了很长时间,给人的印象是 “DNS / 网络确实很慢”。
- 尽管 EDNS 对于现代 DNS 的运行是必不可少的,但发送更大消息的能力却助长了诸如Amplification 和 Reflection 之类的体积攻击。
- 如果本地没有,就向 dns 域名服务器查询(当然,中间可能还会经过路由,也有缓存等),查询到对应的 IP
dns解析的问题:注意,域名查询时有可能是经过了 CDN 调度器的(如果有 cdn 存储功能的话)而且,需要知道 dns 解析是很耗时的,因此如果解析域名过多,会让首屏加载变得过慢,每一次DNS解析时间预计在20~120毫秒。
优化策略:
- 减少DNS请求次数
- 服务集中在少数几个服务器上?
- 但是,实际上还是得部署多台服务器
- 服务器拆分劣势
- 增加了DNS解析次数
- 服务器拆分优势
- 资源的合理利用[大项目减少资金]
- 抗压能力加强
- 提高HTTP并发
- 服务器拆分劣势
- DNS预获取 dns-prefetch
- DNS Prefetch 就是根据浏览器定义的规则,提前解析页面中之后可能会用到的域名(图片服务器、音乐服务器等),使解析结果缓存到系统缓存中,缩短 DNS 解析时间,来提高网站的访问速度。
<meta http-equiv="x-dns-prefetch-control" content="on">
<link rel="dns-prefetch" href="//static.360buyimg.com"/>
<link rel="dns-prefetch" href="//misc.360buyimg.com"/>
<link rel="dns-prefetch" href="//img10.360buyimg.com"/>
<link rel="dns-prefetch" href="//d.3.cn"/>
<link rel="dns-prefetch" href="//d.jd.com"/>
- DNS Prefetch 就是根据浏览器定义的规则,提前解析页面中之后可能会用到的域名(图片服务器、音乐服务器等),使解析结果缓存到系统缓存中,缩短 DNS 解析时间,来提高网站的访问速度。
DNS 负载均衡:
- 网站对应的 IP 不止一个,DNS 可以根据每台机器的负载量、距离用户的距离等返回一个合适的服务器 IP 给用户,这个过程就是 DNS 负载均衡,又叫做 DNS 重定向。 CDN 就是利用 DNS 的重定向技术, DNS 会返回一个用户最接近的点的 IP 给用户。