什么是 DNS
DNS,全称 Domain Name System,域名系统,是一个记录域名和 Ip 地址相互映射的一个系统,能够将用户访问互联网时使用的域名地址转换成对应的 IP 地址,而不用使用者去记住数量众多的 IP 地址。通过域名得到域名对应的 IP 地址的过程被称为域名解析。DNS 运行于 UDP 协议之上,使用的端口为 53。
域名结构解析
域名结构是树状结构,树的最顶端代表 根服务器,根的下一层就是由我们所熟知的.com、.net、.cn 等通用域和.cn、.uk 等国家域组成,称为顶级域。网上注册的域名基本都是二级域名,比如 baidu.com、taobao.com 等等二级域名,它们基本上是归企业和运维人员管理。接下来是三级或者四级域名,这里不多赘述。总体概括来说域名是由整体到局部的机制结构。
DNS 解析流程
DNS 解析流程:
1.首先客户端位置是一台电脑或手机,在打开浏览器以后,比如输入 http://www.zdns.cn 的域名,它首先是由浏览器发起一个 DNS 解析请求,如果本地缓存服务器中找不到结果,则首先会向根服务器查询,根服务器里面记录的都是各个顶级域所在的服务器的位置,当向根请求 http://www.zdns.cn 的时候,根服务器就会返回.cn 服务器的位置信息。
2、递归服务器拿到.cn 的权威服务器地址以后,就会寻问 cn 的权威服务器,知不知道 http://www.zdns.cn 的位置。这个时候 cn 权威服务器查找并返回 http://zdns.cn 服务器的地址。
3、继续向 http://zdns.cn 的权威服务器去查询这个地址,由 http://zdns.cn 的服务器给出了地址:202.173.11.10
4、最终才能进行 http 的链接,顺利访问网站。
5、这里补充说明,一旦递归服务器拿到解析记录以后,就会在本地进行缓存,如果下次客户端再请求本地的递归域名服务器相同域名的时候,就不会再这样一层一层查了,因为本地服务器里面已经有缓存了,这个时候就直接把 http://www.zdns.cn 的 A 记录返回给客户端就可以了。
DNS资源记录
记录一条域名信息映射关系,称之为资源记录(RR)。
当我们查询域名http://www.zdns.cn的时候,查询结果得到的资源记录结构体中有如下数据:
- TTL,就是生存周期,是递归服务器会在缓存中保存该资源记录的时长。
- 网络/协议类型,它的代表的标识是IN,IN就是internet,目前DNS系统主要支持的协议是IN。
- type,就是资源记录类型,一般的网站都是都是A记录(IPv4的主机地址)。
- rdata是资源记录数据,就是域名关联的信息数据。
常用的资源记录类型:
- A :Address地址, IPv4
- AAAA:Address地址 IPv6
- NS :Name Server域名服务器
- SOA:Start of Authority起始授权机构
- MX:Mail Exchanger邮件交换
- CNAME:Canonical Name规范名
- PTR:Pointer指针
- TXT:Text
- SRV:Service
DNS服务器的分类
常见的DNS服务器就是两种:权威解析服务器和递归解析服务器。递归解析服务器也可以叫做localDNS。
权威解析服务器
DNS权威服务器保存着域名空间中部分区域的数据。如果DNS服务器负责管辖一个或多个区域时,称此DNS服务器为这些区域的权威服务器。
根权威DNS或者二级权威服务器中的资源记录标记被指定为区域权威服务器的DNS服务器。通过资源记录中列出服务器,其他服务器就认为它是该区域的权威服务器。这意味着在 NS 资源记录中指定的任何服务器都被其他服务器当作权威的来源,并且能肯定应答区域内所含名称的查询。
递归服务器
递归服务器在正常情况下,初始的时候里面没有任何域名解析数据,里面所有的域名解析数据都来自于它到权威解析服务器的查询结果,一旦查询完毕,递归服务器就会根据TTL时间在本地形成一条缓存记录,并为用户提供DNS解析的查询服务,这是递归服务器的功能。
DNS实现原理
DNS域名
DNS在网络中存在着数量众多的域名,如.com、.org等,而域名系统中是以层级树状结构划分域名的,类似于下图:
位于域名系统的顶端为根域名,而后为一级域名.net、.com、.org等,再往下则为二级域名,如.qq、.ibm等。而位于域名系统最底层的为主机名,如www,finance等。一个合法的域名格式,应遵循FQDN(Full Qualified Domain Name)格式,以域名系统的级别从低到高,从左往右编写,如:www.qq.net.、www.sina.org.。
DNS的查询方式
DNS的查询方式有两种,分别为递归查询(recursion)和迭代查询(iteration)。
递归查询:客户端发起一个DNS解析请求,若本地DNS服务器若不能为客户端直接解析域名,则域名服务器会代替客户端(下级服务器)向域名系统中的各分支的上下级服务器进行递归查询,直到有服务器响应回答了该请求后,将该请求结果返回客户端。在此期间,客户端将一直处于等待状态。
迭代查询:客户端(下级服务器)发起一个DNS解析请求后,若上级DNS服务器并不能直接提供该DNS的解析结果,则该上级DNS服务器会告知客户端(下级服务器)另一个可能查询到该DNS解析结果的DNS服务器IP,客户端(下级服务器)再次向这个DNS服务器发起解析请求,如此类推,直到查询到对应的结果为止。
通常递归查询这种方式用于PC机与本地DNS服务器之间的查询,而递归查询则多用于DNS服务器之间的查询,如下图:
DNS服务器的类型
DNS服务器的类型可以分为:主名称服务器、辅助名称服务器和缓存名称服务器。主名称服务器至少负责解析一个域内的域名,维护所负责解析的域的数据库,可对该域数据库进行读写操作;辅助名称服务器则负责从主名称服务器或其他辅助名称服务器中复制相关解析库,为主名称服务器缓解解析压力;而缓存名称服务器则不负责域名解析,仅仅作为缓存,加快解析速度。
DNS的正向解析与反向解析
在DNS服务器中逻辑上存在着两个区域,一个是正向解析区域,另一个是反向解析区域。正向解析区域即我们通常所说的域名解析,而反向解析指的是IP反向解析,即通过查询IP地址的PTR记录来得到该IP地址所指向的域名记录。而PTR记录为邮件交换记录的一种,另一种为A记录。A记录解析域名到IP地址,而PTR记录则负责解析IP地址到域名。
从地址栏输入URL到显示页面都发生了什么?
① DNS 解析:当用户输入一个网址并按下回车键的时候,浏览器获得一个域名,而在实际通信过程中,我们需要的是一个 IP 地址,因此我们需要先把域名转换成相应 IP 地址。
② TCP 连接:浏览器通过 DNS 获取到 Web 服务器真正的 IP 地址后,便向 Web 服务器发起 TCP 连接请求,通过 TCP 三次握手建立好连接后,浏览器便可以将 HTTP 请求数据发送给服务器了。
③ 发送 HTTP 请求:浏览器向 Web 服务器发起一个 HTTP 请求,HTTP 协议是建立在 TCP 协议之上的应用层协议,其本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。在这一过程中,会涉及到负载均衡等操作。
④ 处理请求并返回:服务器获取到客户端的 HTTP 请求后,会根据 HTTP 请求中的内容来决定如何获取相应的文件,并将文件发送给浏览器。
⑤ 浏览器渲染:浏览器根据响应开始显示页面,首先解析 HTML 文件构建 DOM 树,然后解析 CSS 文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。
并将文件发送给浏览器。
⑤ 浏览器渲染:浏览器根据响应开始显示页面,首先解析 HTML 文件构建 DOM 树,然后解析 CSS 文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。
⑥ 断开连接:客户端和服务器通过四次挥手终止 TCP 连接。