DNS(Domain Name System)一种层次化组织的用于TCP/IP网络的网络服务命名系统,实现域名和实际IP地址之间的转换。DNS是一种应用层协议,基于UDP,通过53端口通讯。其工作过程如下:

  1. 用户主机上的应用(如浏览器)抽取URL中的域名段,首先在应用缓存中查询,再在hosts文件中查询,如果找到就返回对应IP地址。
  2. 如果没有找到,应用将域名发送给用户主机上的DNS客户端,DNS客户端首先查询本地DNS缓存,如果有则 返回,如果无则向DNS服务器通过53端口,发送一查询报文(UDP),包含域名。

3. DNS服务器首先查询区域配置,如果有则返回结果,完成域名解析,此域名解析具有权威性。

4. 如果不在本地配置区域,则查询DNS服务器缓存,如查到则返回;此解析不具备权威性。

5.如果区域配置和缓存均无,则根据DNS服务器配置,选择a.转发给上一级DNS服务器,如此在DNS服务器间传递,直到完全解析;或b.发送请求给根DNS服务器,根DNS服务器判断域名的授权管理服务器,并返回该服务器IP.本地DNS服务器根据收到的管理服务器IP,联系管理服务器,进行解析,如果管理服务器无法解析,则找下一级DNS服务器IP返回,本地服务器再次进行联系,重复此过程直至完全解析。

DNS服务出错一般需要检查下面几个地方:

  1. Hosts文件: 解析错误地址
  2. resolv.conf, hosts.conf[linux]:DNS服务器无法访问
  3. 防火墙 udp协议 53端口:DNS服务器可以ping通,但无法解析

测试主机是否连通用ping

测试tcp端口使用telnet

telnet ${host} ${port}

测试udp端口使用netcat

nc -u ${host} ${port}