什么是DNS?
DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。
DNS的获取流程
简单版
1 | 用户输入域名 -> 浏览器缓存查询 -> 系统缓存查询 -> 路由器缓存查询 -> ISP DNS 缓存查询 -> 根域名服务器查询 -> 顶级域名服务器查询 -> 二级域名服务器查询 -> 三级域名服务器查询 -> 获取IP地址并返回 |
详细版
DNS是应用层协议,事实上他是为其他应用层协议工作的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为ip地址。具体过程如下:
用户主机上运行着DNS的客户端,就是我们的PC机或者手机客户端运行着DNS客户端了
浏览器将接收到的url中抽取出域名字段,就是访问的主机名,比如
www.lab.glasscom.com
, 并将这个主机名传送给DNS应用的客户端DNS客户机端向DNS服务器端发送查询报文,报文中包含着要访问的主机名字段(中间包括一些列缓存查询以及分布式DNS集群的工作),具体查询流程如图(图片来自《网络是怎样连接的》):
该DNS客户机会收到一份回答报文,其中包含有该主机名对应的IP地址
一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接,即可进行网站访问
DNS 查询以各种不同的方式进行解析。客户机有时也可通过使用从以前查询获得的缓存信息就地应答查询。DNS 服务器可使用其自身的资源记录信息缓存来应答查询,也可代表请求客户机来查询或联系其他 DNS 服务器,以完全解析该名称,并随后将应答返回至客户机。这个过程称为递归。
另外,客户机自己也可尝试联系其他的 DNS 服务器来解析名称。如果客户机这么做,它会使用基于服务器应答的独立和附加的查询,该过程称作迭代,即DNS服务器之间的交互查询就是迭代查询。
总之,如果要访问的 Web 服务器已经在 DNS 服务器上注册,那么这条记录就能够被找到,然后其 IP 地址会被写入响应消息并返回给客户端。接下来,消息经过网络到达客户端,再经过协议栈被传递给解析器,然后解析器读取出消息取出 IP 地址,并将 IP 地址传递给应用程序。
顺带一提
向 DNS 服务器发送消息时,我们当然也需要知道 DNS 服务器的 IP 地址。只不过这个 IP 地址是作为 TCP/IP 的一个设置项目事先设置好的,不需要再去查询了。