DNS协议是互联网的核心协议之一。无论是浏览互联网还是编程开发,都需要稍微了解一下。1、什么是DNS?DNS(DomainNameSystem)是“域名系统”的英文缩写。它是一种组织成域层次结构的计算机和网络服务命名系统。它用于TCP/IP网络。将域名转换为IP地址的工作。你可以把它想象成一本巨大的电话簿。比如你要访问域名math.stackexchange.com,首先要通过DNS查到它的IP地址是151.101.129.69。这些称为DNS记录。什么是域名系统?DNS含义通过示例了解DNS端口53了解DNS记录-PTRMXSRVCNAMEAAAA2.DNS域名空间结构域名系统是一个分层的分布式数据库,包含各种类型的数据,包括主机名和域名。DNS数据库中的名称形成称为域名称空间的分层树结构。根域:在使用DNS域名时,规定以'.'结尾。用于指定名称位于根或更高级别的域层次结构。顶级域:用于表示国家、地区或组织。使用三个字符,例如com->商业公司,edu->教育机构,net->互联网公司,gov->非军事政府机构,等等。二级域名:个人或组织在互联网上使用的注册名称。使用两个字符,例如:cn->中国,jp->日本,uk->英国,hk->香港等等。主机:主机名位于域名空间结构的底部。主机名和域名的组合构成了FQDN,主机名是FQDN最左边的部分。使用命令刷新DNS缓存快速指南3:DNS服务器运行DNS服务器程序的计算机存储DNS数据库信息。DNS服务器将尝试解析客户端的查询请求。在回答查询时,如果DNS服务器能够提供所请求的信息,则直接对解析结果作出响应。如果DNS服务器没有对应的域名信息,则为客户端提供另一个可以帮助解析查询的服务器地址。如果以上两种方法都失败,则响应客户端没有请求的信息或请求的信息。该信息不存在。适用于PS4PS5的最佳和最快DNS服务器适用于游戏的最佳和最快DNS服务器2021年免费DNS服务器4:DNS缓存DNS服务器在解析客户端请求时可能会询问其他DNS服务器是否没有本地DNS信息。当其他域名服务器返回查询结果时,DNS服务器会将结果记录在本地缓存中,成为DNS缓存。当客户端下次提交同样的请求时,DNS服务器可以直接使用缓存中的DNS信息进行解析。FlushDNSCachewithCommand快速指南5.DNS获取过程DNS是一种应用层协议。事实上,它也适用于其他应用层协议,包括但不限于HTTP、SMTP和FTP,用于将用户提供的主机名解析为IP地址。.具体过程如下:①DNS客户端运行在用户主机上,即我们的PC或手机客户端运行DNS客户端。②浏览器从收到的url中提取域名字段,即要访问的主机名,如http://www.baidu.com/,将主机名传给DNS应用的客户端。③DNS客户端向DNS服务器发送查询报文,其中包含要访问的主机名字段(包括一些列缓存查询和分布式DNS集群的工作)。④DNS客户端最终会收到一个回复??报文,其中包含主机名对应的IP地址。⑤浏览器一旦收到来自DNS的IP地址,就可以向该IP地址所在的HTTP服务器发起TCP连接。实例理解DNS53端口6.DNS服务架构DNS服务的作用:将域名解析为IP地址,将IP地址解析为域名。假设在用户主机上运行的某些应用程序(如Webl浏览器或邮件阅读器)需要将主机名转换为IP地址。这些应用程序将调用DNS的客户端并指定需要转换的主机名。(在许多基于UNIX的机器上,应用程序需要调用函数gethostbyname()才能执行此转换)。收到用户主机的DNS客户端后,向网络发送DNS查询报文。所有的DNS请求和回复报文都使用UDP数据报通过53端口发送(至于为什么使用UDP,请参考为什么只有13个域名根服务器?-郭无心的回答)在几毫秒到几毫秒的延迟之后■最后,用户主机上的DNS客户端收到一条提供所需映射的DNS回复消息。此查询的结果传递给调用DNS的应用程序。因此,从调用用户主机上的应用程序的角度来看,DNS是一个提供简单直接转换服务的黑盒子。但实际上,实现这个服务的黑盒是非常复杂的。它由分布在世界各地的大量DNS服务器和定义DNS服务器与查询主机之间通信方式的应用层协议组成。实例探究EDNS7.为什么DNS不采用单点集中式设计方式,而是采用分布式集群工作方式?DNS的一种简单设计模式是在Internet上只使用一个DNS服务器,它包含所有的映射。在这种集中式设计中,客户端直接将所有查询请求发送到单个DNS服务器,DNS服务器直接响应所有查询客户端。尽管这种设计方法很诱人,但它不适用于当前的Internet。因为今天的互联网拥有数量庞大且不断增长的主机,这种集中式设计会存在单点故障,通信能力(查询数亿台主机发送的DNS报文请求,包括但不限于所有HTTP请求,电子邮件服务器、TCP长期连接服务)、远距离时延(例如从澳大利亚到纽约)、高维护开销(因为所有主机名-IP映射必须在服务站点更新)等。DNS服务器通常是分为根DNS服务器、顶级DNS服务器、权威DNS服务器三种。八、DNS服务的工作过程当DNS客户端需要查询程序中使用的名称时,它会查询本地的DNS服务器来解析名称。客户端发送的每条查询消息都包含3条信息来指定服务器应该回答的问题。●指定的DNS域名,表示为完全限定域名(FQDN)。●指定查询类型,可以按类型指定资源记录,也可以作为专门类型的查询操作。●DNS域名的指定类别。对于DNS服务器,应始终将其指定为Internet类别。例如,指定的名称可以是计算机的完全限定域名,如im.qq.com,指定的查询类型用于搜索该名称的地址资源记录。DNS查询以各种不同的方式解析。客户端有时还可以使用从以前的查询中获得的缓存信息就地回答查询。DNS服务器可以使用自己的资源记录信息缓存来回答查询,也可以代表请求客户端查询或联系其他DNS服务器以完全解析名称,然后将答案返回给客户端。这个过程称为递归。或者,客户端本身可能会尝试联系其他DNS服务器来解析名称。如果客户端这样做,它会根据服务器的回答使用独立的和额外的查询。这个过程称为迭代,即DNS服务器之间的交互查询是迭代查询。使用Tcpdump过滤DNS包9:DNS查询流程1、在浏览器中输入www.qq.com域名,操作系统会先检查其本地的hosts文件是否有这个URL映射关系。如果是,就调用这个第一个IP地址映射完成域名解析。2、如果hosts中没有该域名的映射,则查找本地DNS解析器的缓存,看是否存在该URL的映射关系。如果是,则直接返回,完成域名解析。3、如果hosts与本地DNS解析器缓存没有对应的URL映射关系,会先寻找TCP/ip参数中设置的首选DNS服务器。这里我们称之为本地DNS服务器。当本服务器收到查询时,如果要将查询到的域名包含在本地配置区资源中,并将解析结果返回给客户端完成域名解析,具有权威性。4、如果查询的域名没有被本地DNS服务器区解析,但是服务器缓存了URL映射关系,那么调用这个IP地址映射完成域名解析,不具有权威性。5、如果本地DNS服务器的本地区域文件和缓存解析无效,则根据本地DNS服务器的设置查询(是否设置转发器)。如果不使用转发方式,本地DNS会把请求发给13根DNS,根DNS服务器收到请求后,会判断谁有权管理这个域名(.com),并会返回一个IP负责顶级域名服务器。本地DNS服务器收到IP信息后,会联系负责.com域的服务器。负责.com域的服务器收到请求后,如果无法解析,就会找一个管理.com域的下级DNS服务器地址(http://qq.com)到本地DNS服务器。当本地DNS服务器收到这个地址后,会寻找http://qq.com域服务器,重复上述动作,查询直到找到www.qq.com主机。6、如果使用转发方式,DNS服务器会将请求转发给上级DNS服务器,由上级服务器解析。如果上级服务器无法解析,则要么查找根DNS,要么将请求转发给上级,并循环。无论本地DNS服务器使用转发还是根提示,最终都会将结果返回给本地DNS服务器,再由DNS服务器返回给客户端。从客户端到本地DNS服务器是递归查询,DNS服务器之间的交互查询是迭代查询。通过示例探索DNSTTL10。DNS记录A记录,又称主机记录,是目前应用最广泛的DNS记录。A记录的基本作用是解释一个域名对应的IP地址。比如我们要用A记录来说明一个主机的IP地址域名是bbs.hexun.com,IP是202.99.16.185,是一条DNS的A记录。UnderstandingDNSARecordwithExamplesUnderstandingDNSRecords-PTRMXSRVCNAMEAAAAExplorerDNSTTLwithExamples十一:使用Dig查询DNS记录dig执行后返回的内容显示dig命令的版本和输入参数显示返回的一些技术细节服务器(status:NOERROR表示查询成功结束)显示要查询的域名查询的查询结果的一些统计信息Linux中用Dig命令查询DNS记录了解LinuxDig命令用Dig命令查询DNSTxt记录十二:Tcpdump抓取DNS包在执行一次tcpdump抓包时,我们使用“端口域”过滤数据包,也就是只抓取使用domain(域名)服务的数据包,即DNS查询和响应包。tcpdump的输出如下:IP192.168.0.141.53511>192.168.0.1.53:65362+A?京东网。(28)IP192.168.0.1.53>192.168.0.141.53511:653622/0/0CNAMEwww.jdcdn.com.,A14.152.71.1(68)这两个数据包开头的“IP”表示它们背后的内容描述了一个IP数据报。tcpdump以“IP地址.端口号”的形式描述通信的某一端;“>”表示数据传输的方向,“>”前面是源端,后面是目的端。可以看出,第一个数据包是测试主机1(IP地址192.168.0.141)向其首选DNS服务器(IP地址192.168.0.1.53)发送的DNS查询报文(目的端口53为DNS使用的端口service),第二个数据包是服务器反馈的DNS响应报文。FilteringDNSwithTcpdumpPort53UsingTcpdumptoFilterDNS数据包
