DNS(DomainNameSystem),是一个层次化、分布式域名系统。它主要是用于将域名转换成对应的IP地址。
每当用户去访问某个网站,键入这个url后,DNS就会开始去解析当前域名,最终找到对应的IP地址。
DNS就像是一个庞大的对象,里面存储了很多键值对,key是域名,而value则是对应IP地址。
比如,域名显示为.(简写),实际是.root。这不是疏忽,而是所有域名的尾部,实际上都有一个根域名。而这个根域名都是一样的。
次级域名second-leveldomain(SLD)再下一级叫做"次级域名",比如里面的.baidu,这一级域名是用户可以注册的;
主机名host(三级域名)再下一级是主机名,比如里面的www,这是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的。
现代浏览器默认都会将DNS记录缓存一段时间。当DNS开始解析的时候,浏览器缓存是第一个访问的地点。
其实每个终端都是域名服务器的客户端,又称DNS解析器(DNSresolver),它主要用来向域名服务器发起域名解析请求,然后找到对应IP地址。DNSresolver的查询方式主要分为三类:
域名其实有好几种类型,我们也称其为"记录"(record)类型。它就相当于域名与IP之间的对应关系:
(2)NS:域名服务器记录(NameServer),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。
(4)CNAME:规范名称记录(CanonicalName),返回另一个域名,即当前查询的域名是另一个域名的跳转,详见下文。
(5)PTR:逆向查询记录(PointerRecord),只用于从IP地址查询域名,详见下文。
一般来说,为了服务的安全可靠,至少应该有两条NS记录,而A记录和MX记录也可以有多条,这样就提供了服务的冗余性,防止出现单点失败。
CNAME记录主要用于域名的内部跳转,为服务器配置提供灵活性,用户感知不到。举例来说,facebook.github.io这个域名就是一个CNAME记录。我们平常注册CDN时都能看见CNAME。
DNS相关技术可以使用在前端性能优化的时候,主要是为了缩短DNS查询时间,为前端页面首屏渲染时间的缩短尽一份力。