而网络交互最初是的动作就是连接,所以我认为优化的方向先要从网络连接这个点切入。
而连接的最初的动作是DNS解释,在第一篇中,描述DNS的状况是:
域名换ip。这一步看似简单却充满陷阱,10分钟的DNS的Cache过期时间,200~2000ms不等的DNS耗时,坑了无数应用。
解决无非有三个策略:
-
ip直连
-
域名重用(收敛)
-
HttpDNS
不过仅仅用一段话来描述DNS的疼点还是比较生硬的,所以在学习ip直连和HttpDNS之前,我需要先弄懂DNS出现问题的具体原因。
========================================================================
在网络世界中,我们如果想要访问某一个服务器的东西,我们需要知道它的ip地址是多少,这样才能去连接走Http。
但是 ip地址32位二进制的数字,它的常用格式: XXX.XXX.XXX.XXX
显然,我就是为了访问一个服务器,你让我记住这么一长串的数字,这不是在为难人吗?我每天都要访问数十个网站,一秒钟几亿上下,每个网站的ip都要记在小本子上,而且一个服务器可能还有好几个ip,然后在访问时还要很细心一个个敲在输入框中…
所以为了解决这种体验问题,DNS(Domain Name System)就这么出现了。服务器可以申请得到域名,比如说我们熟知的百度的域名就是 : www.baidu.com
。这样我们在浏览器的输入框只要输入这个域名,就能访问百度的服务器了。
那我们看到DNS出现,不用去记那么一长串的ip地址了,只用记住域名就可以了,域名一般来说都是英文加数字格式,很方便人类进行记忆。
那我们已经很清楚DNS的作用了,我们告诉DNS域名,DNS帮我们找到ip地址,即 域名换ip,来看下下图:
这样人类就可以很哈批的去访问各种网站了。
注:DNS大部分都是基于UDP的,所以DNS本身具有UDP连接的不可靠性
每天都有成万上亿的人在互联网冲浪,这说明DNS没有一刻不在被使用,所以DNS服务器一定要保证高可用、高并发和分布式服务器。所以有必要了解DNS的结构。
我们先来看下域名的空间结构:
像 com、net、cn这些代表的就是顶级域名(也叫根域名),顶级域名前面的就是二级域名,二级域名前面的是三级域名。
比如 www.baidu.com
, .com
就是根域名, .baidu
就是二级域名, www
就是三级域名。根据这个我们再来看看DNS的结构。
从理论上说,任何形式的标准域名要想被实现解析,按照技术流程,都必须经过全球“层级式”域名解析体系的工作,才能完成。所以DNS的服务器结构是根据官方的层级式来分类的,有下面四类:
-
根域名服务器(Root Name Server)
-
顶级域名服务器(Top-level Name Server)
-
权威域名服务器(Authoritative Name Server)
-
本地 DNS 服务器(Local DNS Server)
2.2.1 根域名服务器
根域名服务器是互联网域名解析系统(DNS)中最高级别的域名服务器,负责返回顶级域的权威域名服务器地址。
“层级式”域名解析体系第一层就是根服务器,负责管理世界各国的域名信息,在根服务器下面是顶级域名服务器,即相关国家域名管理机构的数据库。
一个域名必须首先经过根数据库的解析后,才能转到顶级域名服务器进行解析。
在根域名服务器中虽然没有每个域名的具体信息,但储存了负责每个域(如.com,.xyz,.cn,.ren,.top
等)的解析的域名服务器的地址信息。
全世界域名的最高管理机构,是ICANN,在美国加州,它制定了根域名的规范,管理所有域名的顶级域名。它就是根域名服务器。
当然了,域名这么多,来自各个国家各个区域,所以为了便于管理,所有域都会被一些组织、群体所托管,比如 .cn
域名的托管商就是中国互联网络信息中心(CNNIC),它决定了.cn
域名的各种政策。而像Verisign管理着 .com
、.net
等,而这些服务器就是顶级域名服务器了,如下图所示:
也就是说,当我们输入 www.example.cn
时,会先去找根域名服务器ICANN