1. 概念
DNS(Domain Name System):域名系统,是因特网使用的命名系统,用于解决IP地址和域名的映射关系。
DNS解析:互联网都是通过URL来请求资源的,而URL中的域名需要解析成IP地址才能与远程主机建立连接,如何将域名解析成IP地址就属于DNS解析的工作范畴。
2. 域名结构
从技术角度来看,域名是在Internet上用于解决IP地址的一种方法。一个完整的域名由2个或2个以上的部分组成,各部分之间用英文的句号“.”来分隔,最后一个“.”的右边部分称为顶级域名(TLD,也称为一级域名),最后一个“.”的左边部分称为二级域名(SLD),二级域名的左边部分称为三级域名,以此类推,每一级的域名控制它下一级域名的分配。(度娘)
eg:mail.cctv.com
其中:
com为顶级域名( top-level-domain,TLD)
cctv为二级域名
mail为三级域名
3. DNS解析过程
1 浏览器会检查缓存中有没有这域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束。
2 如果过程1中浏览器缓存中没有域名对应的ip,则从操作系统本身去做域名解析,我们在windows中的host文件可以设置特定域名映射到特定ip。
3 向本地域名解析服务器(LDNS)发起域名解析请求
上述步骤的1、2都是在本机中完成的域名解析,如果经过1、2步骤都没有完成域名的解析,则需要向LDNS发起域名解析,对于LDNS,Window中可以通过ipconfig/all来查询,
4.向根域名解析服务器(RDNS)发起域名解析的请求
当步骤3中没有完成域名的解析,则需要向RDNS发起域名解析的请求
5 根域名服务器返回通用顶级域名解析服务器(gTDL)地址
LDNS向根域名服务器发起请求,根域名服务器返回的是所查询的通用顶级域名(Generic top-level-domain, gTLD)地址,常见的通用顶级域名有.com、.org、.edu。
6 本地域名服务器向gTLD发起解析域名请求
7 gTLD服务器接收请求并返回注册的域名服务器(Name Server服务器)
当gTLD服务器接收到本地域名服务器发起的请求后,并根据需要解析的域名,找到该域名对应的Name Server 服务器,通常情况下,这个Name Server服务器就是你注册的域名服务器,那么你注册的域名的服务上的服务器将承担起域名解析的任务。
8 本地域名服务器向Name Server服务器发起域名解析请求
9 Name Server服务器会查询存储的域名和IP的映射关系表,然后返回该域名对应的ip和TTL给本地域名服务器,本地域名服务器进行缓存这个域名和ip的对应关系,缓存时间由TTL决定。
10 本地域名服务器返回查询域名对应的ip给用户(浏览器),浏览器进行缓存,缓存时间由TTL决定。
经过以上的10个步骤,就可以拿到真正的ip了,然后通过ip去对应的服务器上请求资源。
4. 域名解析方式
域名解析记录主要分为:A记录、MX记录、CNAME记录、 NS记录、TXT记录
具体内容如下:
A记录:A代表的是Address,用来指定域名对应的IP地址,A记录允许将多个域名解析到一个IP地址,但不允许将一个域名解析到多个IP上。
MX记录:MX代表的是Mail Exchage,就是可以将某个域名下的邮箱服务器指向自己的Mail Server
CNAME记录:CNAME指的是Canonical Name,也就是别名解析,可以将指定的域名解析到其他域名上,而其他域名就是指定域名的别名,整个解析过程称为别名解析。
NS记录:就是为了某个域名指定了特定的DNS服务器去解析。
TXT记录:为某个主机名或者域名设置特定的说明。
比如我在腾讯云上买的域名,那我访问自己的域名时,就需要腾讯来提供把域名解析到ip的工作,也就是腾讯提供Name Server服务器
但腾讯怎么知道我们域名对应的ip呢?其实是需要我们自己去绑定的,如下图所示,需要我们在腾讯云的管理后台把域名和ip关联起来,这里是A记录类型,其实就是建立域名和ip的映射表。
浏览器的并发限制:
浏览器对于同一域名下允许的并发请求数作了限制,通常同一域名下最大并发请求数为6个;
原因:
1、为了适应当时服务器的负载能力;之前的服务器的负载能力并没有这么强,高并发的请求可能会导致服务器无法正常提供服务甚至崩溃;
2、如果浏览器允许的最大并发请求书较大,容易造成DDoS(Distributed Denial of Sevice)攻击等安全隐患;
3、过多的并发请求可能会造成浏览器阻塞,使之处于“假死”的无响应状态;
4、浏览器目前已经支持了长连接,可以在同一个TCP连接中完成多个请求,没有必要再进行代价较大的重新开启新请求的操作;
域名发散
域名发散就是为了突破浏览器对于同一域名并发请求数的限制,使用域名发散为同一个服务申请多个域名,从而可以一定程度上提高并发量;当然,由于建立新的请求需要一定的代价,因此需要在域名发散与域名收敛间进行trade off,通常发散的域名个数为2-4个;
域名收敛
域名收敛就是将静态资源放在一个域名下不进行发散,这主要是为了适应移动端的发展需求;通常DNS是一个开销较大的操作,而移动端由于网络带宽和实时性、资源等的限制,这些开销对移动端的用户体验是致命的,因此需要进行域名收敛;