DNS协议
DNS(Domain Name System,域名系统)协议,是一个用来将域名转化为IP地址的应用层协议。
DNS背景
TCP/IP中通过IP地址和端口号的方式,来确定网络中一个主机上的一个程序。但IP地址是一长串数字,并不便于人们记忆,于是人们发明了一种叫做主机名的东西,并用hosts文件夹来描述主机名和IP地址之间的对应关系。
最初,这个hosts文件是由互联网信息中心(SRI-NIC)来管理的。
- 如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts文件。
- 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网。
- 当用户通过域名访问互联网服务时,会先通过域名在本地的hosts文件中找到其对应的IP地址,然后再用这个IP地址去访问对应的服务。
但这样太麻烦了,于是产生了DNS系统。
- 由一个组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系。
- 如果新计算机要接入网络,或者某个计算机IP变更,就需要将对应信息注册到数据库中。
- 当用户通过域名访问互联网服务时,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址。
至今,我们的计算机上仍然保留了hosts文件,这个hosts文件当中一般存储的是主机名与IP地址之间的映射,用户也可以在hosts文件中自主添加域名和IP映射关系,在域名解析的过程中会优先查找hosts文件的内容。
通过cat /etc/hosts
可以查看hosts文件当中的内容。
域名简介
域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称,例如www.baidu.com
。
- com:一级域名,表示这是一个工商企业域名。同级的还有
.net
(网络提供商)和.org
(开源组织或非盈利组织)等。 - baidu:二级域名,一般对应的就是公司名。
- www:只是一种习惯用法,之前人们在使用域名时,往往命名成类似于
ftp.xxx.xxx/www.xxx.xxx
这样的格式,来表示主机支持的协议。
域名解析过程
在浏览器中输入url
后,如果url
当中包含域名,则需要进行域名解析。
- 首先会在浏览器的DNS缓存中去查询是否有对应的记录,如果查询到记录就可以直接得到对应的IP地址,完成解析。
- 如果在浏览器的DNS缓存中没有找到,就会去查询操作系统中的DNS缓存,如果查询到对应的IP地址则完成解析。
- 如果在操作系统的DNS缓存中没有找到,就会去查找本地的hosts文件,如果查询到对应的IP地址则完成解析。
- 如果在本地的hosts文件中也没有找到,就会去本地DNS服务器中查找。本地DNS服务器IP地址一般由本地网络服务商提供,如电信、移动等公司,一般通过DHCP自动分配。目前使用的比较多的是谷歌提供的公用NDS 8.8.8.8和国内公用DNS 114.114.114.114。如果在本地DNS服务器中有对应域名的缓存,则直接返回对应的IP地址,完成解析。
- 如果本地DNS服务器中仍然没有找到,那么本地DNS服务器就会拿着域名去根DNS服务器中询问,根DNS服务器会告诉本地DNS顶级域名服务器的IP地址。
- 本地DNS拿到顶级域名服务器的IP地址后,就会拿着域名去找顶级DNS服务器,顶级域名服务器会告诉本地DNS权威域名服务器的IP地址。
- 本地DNS服务器拿着域名去权威域名服务器中,查询域名对应的IP地址,最终将该域名对应的IP地址返回给浏览器,此时整个域名解析过程就完成了。
使用dig工具分析DNS过程
我们可以使用dig工具来查看域名解析的过程,例如查看百度域名www.baidu.com
的解析过程。
dig工具的分析结果如下:
结果解释:
- 开头位置是dig工具的版本号。
- 第二部分是服务器返回的详情,其中status参数为NOERROR表示查询成功。
- QUESTION SECTION表示待查询的域名。
- ANSWER SECTION表示查询的结果,首先
www.baidu.com
被查询成了www.a.shifen.com
,而最终www.a.shifen.com
被查询成了两个具体的IP地址。 - 最下面是一些结果统计,包含查询时间和DNS服务器的地址等。
参考文献:
http://t.csdn.cn/gwHLE