域名解析系统
来学一学DNS吧。
简介
域名解析系统采用 客户端/服务器(Client/Server)模型,是一种应用层协议,它的作用是把我们所熟知的域名(domain )翻译成 ip 地址。主要是人们通常乐意记住域名而不是记住ip,就好比学校里老师喜欢叫名字而不是叫你学号,但是学号又是唯一确定的一个学生,而名字是可以重复的。给出一个学生名称,查询对应学号的一个系统就叫学号解析系统,类似的,给出一个域名,查询一个对应的ip地址就叫域名解析系统。
DNS提供的服务
以最简单的 url 为例,https://www.baidu.com/
。
把url化成一般格式是 <协议名称>://<主机域名或者是ip地址>:<端口号>/<资源路径>
对应起来,上面的那个 url 解析之后就是:
- 协议名称:https
- 主机域名:www.baidu.com
- 端口号:无(没有端口号会根据http还是https指定默认80或者443端口)
- 资源路径:/(网站根目录)
在网络层,我们知道我们要与一个确定的主机发起通信需要知道对方的 ip 地址,而 www.baidu.com
这样的地址并不能被路由器识别,所以在请求之前,会先在应用层中,做一次域名解析(DNS服务)。
所以域名解析为我们提供域名到ip地址的映射,这个映射是多对多(即一个 ip 地址可以有多个域名,一个域名也可以解析出多个ip地址)的。
DNS详解
域名
因特网采用层次树状结构的命名方法。域可划分为:顶级域、二级域、三级域。对应的域名可以划分为:顶级域名、二级域名、三级域名,不同层级的域名用英文的 .
分隔。
再上面这个域名的例子当中,www
表示三级域,baidu
表示二级域,com
表示顶级域。
域名中的标号具有以下特点:
- 标号中的英文不区分大小写。
- 标号中除连字符-以外不能使用其他标点符号。
- 每个域名不超过63个字符,多标号的完整域名不超过255个字符。
- 级别最低的域名写左边,级别最高的顶级域名写在最右边。
一般来说,最低级的域名叫主机名,比如对于 www.baidu.com
来说,www
是它的主机名。
域名服务器
DNS使用大量的域名服务器,他们以层次方式组织。主要有4类域名服务器:
根域名服务器
最高层次的域名服务器,所有的根域名服务器都知道所有顶级域名服务器的IP地址,也是最重要的域名服务器。碰到无法解析的域名,首先求助于根域名服务器。因特网上有13个根域名服务器。通常不直接告诉待查询的IP地址,而是告诉你去那个域名服务器查找。
顶级域名服务器
负责管理该顶级域名所注册的所有二级域名。
授权域名服务器
每台主机都必须在授权域名服务器处登记,授权域名服务器可以将主机名转换为该主机的IP地址。
本地域名服务器
每个因特网服务提供者ISP,或学校等,都可以拥有一个本地域名服务器。DNS查询请求时,是发送给本地域名服务器的。
DNS查询方式
你在接入因特网的时候,因特网服务提供商会给你指定一个域名服务器,这个叫本地域名服务器。
比如你接入了移动公司提供的网络,在你入网的时候,它会告诉你的设备,指定 114.114.114.114 这个服务器作为你的本地域名服务器。
比如在学校,学校可以作为一个小型的网络提供商,提供校园网服务,比如在ZJXU,它给我指定了 10.1.1.9
作为本地域名服务器。
你的所有请求都是发给你的本地域名服务器的,在ipv4的设置中,有一项设置就是指定dns,也就是你的本地域名服务器。一般来说,你只和它进行交互。查询有递归查询和迭代查询两种方式,
对于迭代查询,本地域名服务器要负责解析每一级的域名。
对于 www.baidu.com
的dns查询请求发送到了本地域名服务器之后,本地域名服务器就会问根域名服务器:请问 .com 是哪位,这个问题根域名服务器是可以回答的,于是告诉了本地域名服务器:.com 的 ip 是 xxx。.com是顶级域,告诉我们的这个对应的域名服务器是顶级域名服务器。本地域名服务器就知道了顶级域名服务器,于是它又问,请问 baidu.com
是哪位,这个问题 顶级域名服务器 当然是能够回答的,于是告诉了本地域名服务器,ip是多少。其实这个时候 baidu.com
已经是对应了一个独立的公司,同时公司在注册的时候,会把它的授权域名服务器告诉顶级域名服务器,所以其实这一步,我们在查 baidu.com
已经获得了一个 授权域名服务器 的 ip,最后,当然就是问 授权域名服务器,www.baidu.com
的 ip 地址,于是它给出了正确的 ip 地址,完成了一次迭代域名查询。
递归查询用的不是很多,但是听名字也应该知道,是以下方式进行查询的:
但是很明显,这样子对于根域名服务器的压力是很大的,因此现在比较多的还是迭代查询。