当前位置: 首页 > news >正文

《TCP/IP协议卷1》第14章 DNS:域名系统

什么 是 DNS?DNS 有什么用?DNS 如何实现的,过程是什么?

引言

  • 定义与作用:DNS是用于TCP/IP应用程序的分布式数据库,提供主机名字和IP地址转换以及电子邮件选路信息。分布式指Internet上单个站点不拥有所有信息,各站点保留自身信息数据库,通过客户 - 服务器程序供其他系统查询。
  • 应用访问方式:应用通过地址解析器访问DNS。在Unix主机中,解析器主要通过gethostbyname(3)gethostbyaddr(3)函数工作,在将主机名转换为IP地址(用于TCP连接或UDP数据报发送 )以及反向转换中起作用。解析器是应用程序一部分,与操作系统内核中的TCP/IP协议族不同。

DNS基础

  • 名字空间结构:DNS名字空间类似Unix文件系统,呈层次结构。每个结点有最长63个字符的标识,树根是无标识的特殊结点,命名标识不区分大小写。域名由从结点到最高层的域名串连而成,以“.”分隔。以“.”结尾的域名是绝对域名(FQDN ) ,否则为不完全域名。
  • 顶级域名分类
    • arpa:用于地址到名字转换的特殊域。
    • 7个3字符普通域:如com(商业组织 )、edu(教育机构 )等,一般认为主要用于美国组织机构,但许多非美国组织也会使用。
  • 2字符国家域:基于ISO3166定义的国家代码,用于各个国家。许多国家的二级域有类似普通域的结构划分,如.ac.uk(英国研究机构 )、.co.uk(英国商业机构 ) 。
  • 区域(zone)概念:独立管理的DNS子树,常见为二级域,如noao.edu 。二级域常划分为更小区域,类似Unix文件系统从逻辑到物理磁盘分区的划分。一旦区域授权机构被委派,它负责向区域内新系统提供名字服务器,新系统加入时需申请域名和IP地址并添加到名字服务器数据库。
  • 名字服务器:负责一个或多个区域,主名字服务器从磁盘文件调入区域所有信息,辅助名字服务器从主服务器调入信息(区域传送 ) 。新主机加入区域时,区域管理者更新主名字服务器配置文件,辅助名字服务器定时向主服务器询问新数据。名字服务器需与其他名字服务器联系,所有主名字服务器都要知道根服务器IP地址,根服务器知道二级域中授权名字服务器的IP地址,处理请求时,名字服务器与根服务器联系,根服务器指引其与相关名字服务器联系。
  • 超高速缓存特性:名字服务器收到主机名到IP地址映射信息时,会存放在高速缓存中,后续相同映射请求可直接使用缓存结果,无需通过其他服务器查询。

14.3 DNS的报文格式

  1. 总体格式:DNS定义了用于查询和响应的报文格式,由12字节长的首部和4个长度可变的字段组成。12字节首部包含标识字段(客户程序设置,服务器返回结果用于匹配响应与查询 )和16 bit标志字段(划分为多个子字段 ) 。

  1. 标志字段子字段含义
    • QR:1 bit字段,0表示查询报文,1表示响应报文。
    • opcode:4 bit字段,通常值为0(标准查询 ),还有1(反向查询 )、2(服务器状态请求 )等其他值。
    • AA:1 bit标志,“授权回答”,该名字服务器是授权于该域的。
    • TC:1 bit字段,“可截断的”,使用UDP时,应答总长度超512字节只返回前512字节。
    • RD:1 bit字段,“期望递归”,能在查询中设置,名字服务器支持递归查询则在响应中返回。若未授权回答,返回能解答查询的其他名字服务器列表(迭代查询 ) 。
    • RA:1 bit字段,“可用递归”,名字服务器支持递归查询则在响应中设置为1 。
    • 随后3 bit字段:必须为0。
    • rcode:4 bit返回码字段,通常0(没有差错 )、3(名字差错,仅从授权名字服务器返回,表明查询域名不存在 ) 。
    • 后续4个16 bit字段说明后面4个变长字段包含的条目数,查询报文问题数通常是1,其他3项为0;应答报文回答数至少是1 。

  1. DNS查询报文中的问题部分
    • 格式:每个问题格式包含查询名、查询类型、查询类。查询名是要查找的名字,由一个或多个标识符序列组成,每个标识符以首字节计数值说明后续标识符字节长度,名字以最后字节为0结束,长度为0的标识符是根标识符,计数字节值为0 - 63 ,最高两比特为1(192 - 255 )用于压缩格式 。
    • 查询类型:约20个不同类型值,常用的A类型表示期望获得查询名的IP地址,PTR查询请求获得一个IP地址对应的域名(指针查询 ) 。还有NS(名字服务器 )、CNAME(规范名称 )等类型 。
    • 查询类:通常是1,指互联网地址,某些站点也支持其他非IP地址 。

14.3.2 DNS响应报文中的资源记录部分

  1. 资源记录格式:DNS响应报文中的回答字段、授权字段和附加信息字段,均采用资源记录(RR)格式。其包含以下字段:
    • 域名:资源数据对应的名字,格式与查询名字段格式相同。
    • 类型:说明RR的类型码,与查询类型值相同。
    • :通常为1,代表Internet数据。
    • 生存时间:客户程序保留该资源记录的秒数,通常值为2天。
    • 资源数据长度:说明资源数据的数量。
    • 资源数据:格式依赖于类型字段的值,如类型1(A记录)的资源数据是4字节的IP地址 。

14.4 一个简单的例子

  1. 示例场景:在sun主机上运行Telnet客户程序远程登录到gemini主机,并连接daytime服务器(命令为sun % telnet gemini daytime ) 。此过程中,sun主机的名字解析器会与位于noao.edu(140.252.1.54 )的名字服务器交互,以获取gemini.tuc.noao.edu的IP地址。
  2. 相关配置文件:sun主机上的/etc/resolv.conf文件配置名字解析器行为。nameserver行给出主名字服务器IP地址(140.252.1.54 ) ,domain行设置默认域名(tuc.noao.edu ) ,若待查域名非完全合格域名,默认域名会加到待查名后。
  3. 报文交互过程
    • 查询报文:名字解析器向名字服务器发送UDP数据报进行查询。第1行输出表明查询源IP为140.252.1.29,目的IP为140.252.1.54,源端口号1447,目的端口号53(知名端口 ) 。查询类型为A(期望获得IP地址 ) ,待查名字为gemini.tuc.noao.edu ,报文总长度37字节,包含12字节首部、用于查询类型和查询类的4字节等,无填充数据。
    • 响应报文:名字服务器返回响应。第2行输出中,I*表示标识字段,星号表示设置AA标志(授权回答,该服务器是noao.edu域的主域名服务器,回答在该域内可信 ) 。2/0/0表示响应报文中回答资源记录数为2,授权RR和附加信息RR数均为0 。回答类型为A,值为140.252.1.11 。
  1. 知识点总结
    • 名字解析器与服务器交互:展示了名字解析器在建立网络连接前,通过与名字服务器通信获取目标主机IP地址的过程。
    • DNS报文格式应用:体现了DNS查询和响应报文中各字段(如标识、标志、查询类型、资源记录等 )在实际交互中的使用和含义。
    • 配置文件作用:说明了/etc/resolv.conf文件对名字解析器配置(如指定名字服务器、设置默认域名 )的重要性。

14.4 一个简单的例子(续)

  1. 多接口主机与多个回答:gemini是多接口主机,所以查询会得到两个IP地址。公开程序host可将查询传递给名字服务器并显示结果,使用host gemini.tuc.noao.edu A ,能看到两个IP地址140.252.1.11和140.252.3.54 。当名字服务器和发出请求的主机位于相同网络(或子网 )时,BIND会优先显示相同网络的地址。
  2. 路由与IP地址替换:使用traceroute工具发现从子网140.252.1到140.252.3的正常路由不经过gemini主机,而是经过连接两个网络的另一个路由器。若将IP地址(140.252.3.54 )来访问gemini主机,部分网络需额外跳数。可通过SNMP查看路由器路由表来研究替换路由的可行性。
  3. nslookup工具:多数DNS实现包含的程序,用于查询DNS相关信息,[Albitz and Liu 1992]的第10章详细介绍了其使用方法。
  4. dig工具:“域名Internet搜索(Domain Internet Groper)”程序,是查询DNS服务器的公开工具,可向合适名字服务器发送查询诊断含义不清的域名,并对返回结果进行简单分析,附录F有获取该程序的详细介绍。
  5. DNS报文的压缩与UDP数据长度
    • 查询结果的UDP数据长度为69字节,原因一是返回结果包含查询问题;二是域名gemini.tuc.noao.edu出现三次,为避免重复采用压缩方式。压缩时,当计数字节最高两位设为11 ,表示是16 bit指针,指针剩下14 bit说明在DNS报文中标识符所在位置(起始位置由标识字段非第一字节起算 ) 。
    • 图14 - 11展示了DNS应答格式,重申了IP首部和UDP首部封装情况,明确了问题部分域名中标识符计数字节,回答中的指针值为12表示从DNS首部开始偏移量。

14.5 指针查询

  1. 原理:指针查询是给定一个IP地址,返回与之对应的域名。通过in - addr.arpa域实现,当组织获得DNS域名空间授权(如noao.edu ) ,也获得对应IP地址的in - addr.arpa域名空间授权。IP地址在DNS树中的表示是从网络号开始依次写出字节,且DNS名字自树底部逐步向上书写,如IP地址140.252.13.33对应的DNS名字为33.13.252.140.in - addr.arpa 。
  2. 举例
    • 使用host程序结合tcpdump进行指针查询观察。在sun主机运行host 140.252.13.34 ,host程序自动产生指针查询。tcpdump输出显示,第1行标识查询,期望递归标志设为1 ,查询类型为PTR,数据包含DNS报文首部、域名标识符和查询类型字节。第2行是响应,RR类型为PTR,资源数据包含对应域名svr4.tuc.noao.edu 。
    • 名字解析器传递给名字服务器的指针查询是域名34.13.252.140.in - addr.arpa ,而非32 bit的IP地址。
  1. 主机名检查:当主机收到客户的UDP数据报或TCP连接请求时,能获取客户IP地址和端口号。部分服务器(如Rlogin服务器 )不仅需客户IP地址获取指针记录,还需向DNS询问该IP地址对应的域名,并检查返回地址与收到数据中的源IP地址是否匹配,以防止.rhosts文件(仅含主机名,无IP地址 )被伪造。使用gethostbyaddr函数可实现从IP地址获取对应名字,编程时需注意相关问题。 例如在SunOS 4.13名字解析器库的例子中,调用gethostbyaddr获取IP地址对应名字时,tcpdump捕获到名字解析器自动对第1行预期的指针查询和第2行显示的IP地址进行两个回答记录查询。若两个地址中无匹配输入参数的地址,函数会向系统日志发送报文并返回差错。

14.6 资源记录

  1. A记录:定义一个IP地址,存储32 bit的二进制数,用于将主机名映射到IP地址。
  2. PTR记录:用于指针查询,将IP地址看作in - addr.arpa域下的一个域名(标识字符串 ) ,实现从IP地址到域名的反向映射。
  3. CNAME记录:表示“规范名字(canonical name )” ,用于给服务器设置别名,系统提供易于记忆的别名,实际规范名通过别名可查到。如gated.cornell.edu是别名,规范名为COMET.CIT.CORNELL.EDU ,使用host -t cname gated.cornell.edu可查询。
  4. HINFO记录:表示主机信息,包括主机CPU和操作系统的两个字符串,提供主机基本信息,但并非所有站点都提供。如host -t hinfo sun ,可显示sun主机的相关信息为Sun - 4/25和SunOS 4.1.3 。
  5. MX记录:邮件交换记录,应用于多种场景。如未连入Internet的站点将邮件转发到连入Internet的站点;通过一种协议无法到达目的主机时,将邮件传送到替代主机;允许机构提供他人发送邮件的虚拟主机;防止防火墙限制外部与内部主机的连接。每个MX记录有16 bit的整数值(优先值 ) ,邮件处理器按优先值从小到大顺序使用MX记录。如host -t mx foo.com ,可查询到foo.com的MX记录为relay1.UU.NET和relay2.UU.NET 。
  6. NS记录:指定区域的授权名字服务器,由域名表示(符号串 ) ,用于标识负责某个域名区域的名字服务器。

14.7 高速缓存

  1. 缓存维护与作用:名字服务器维护高速缓存,减少Internet上DNS通信量。应用中的名字解析器不总处于工作状态,由名字服务器维护缓存,在其工作时起作用,且其他主机可共享缓存,提高查询效率。
  2. 实验设置与操作
  3. 配置修改:在sun主机上,从名字解析器文件/etc/resolv.conf中删除nameserver行,留下domain行,使名字解析器使用本地主机上的名字服务器。
  4. 查询过程及分析
      • 执行host ftp.uu.net ,tcpdump输出显示名字服务器与根名字服务器nsl.nic.ddn.mil联系进行A类型查询。根名字服务器返回的响应不含资源记录,含授权资源记录和附加信息资源记录,且未设置期望递归标志(RA ) 。
      • 名字服务器与授权名字服务器ns.uu.net联系,设置期望递归标志,得到包含IP地址的响应。再次执行host ftp.uu.net ,tcpdump无输出,因回答来自名字服务器高速缓存。
      • 执行host ftp.ee.lbl.gov ,名字服务器与根名字服务器c.nsysr.net联系,后续与授权名字服务器交互,得到CNAME资源记录(规范名ee.lbl.gov )和A记录(IP地址 ) 。体现了名字服务器在查询过程中对根服务器的选择(轮询不同根服务器取往返时间最小的 ) ,以及在响应中同时返回规范域名的CNAME记录和A记录的优化。

14.8 用UDP还是用TCP

  1. 协议支持情况:DNS名字服务器熟知端口号为53 ,同时支持UDP和TCP访问。
  2. 选择UDP的原因:多数DNS查询和响应报文长度较小,使用UDP即可满足需求,且UDP开销相对较小。当名字解析器发出查询,响应中TC(截断标志 )比特设为1时,意味着响应长度超512字节,仅返回前512字节,此时名字解析器通常用TCP重发查询以获取完整响应。
  3. 选择TCP的原因:辅助名字服务器从主名字服务器执行区域传送时,因传送数据量较大,使用TCP协议,能更好处理大量数据传输,保证数据可靠传输。
  4. 协议使用要点:DNS应用需自行处理超时和重传。与其他使用UDP的Internet应用(如TFTP、BOOTP和SNMP )相比,DNS查询和响应常经过广域网,分组丢失率和往返时间不确定性更高,所以良好的重传和超时程序对DNS客户端很重要。

1

相关文章:

  • 让报表成为生产现场的“神经系统”,推动管理自动化升级
  • Vue.js 中 “require is not defined“
  • 使用AkShare获取大A列表
  • GCC编译/连接/优化等选项
  • JavaWeb期末速成 JSP
  • 网络编程之HTML语言基础
  • flatbuffer源码编译和使用方法
  • 短剧小程序开发:开启碎片化娱乐新视界
  • SpringCloud微服务:服务保护和分布式事务
  • 三次握手建立连接,四次挥手释放连接——TCP协议的核心机制
  • Linux 下的 PM2 完整指南
  • linux基于内存实现jar文件搜索
  • 如何有效监控JVM环境,保障应用性能
  • Elasticsearch:使用 ES|QL 进行地理空间距离搜索
  • 动态规划3——背包类动态规划详解
  • elasticSearch是什么,如何使用,有什么用
  • 考研系列—408真题操作系统篇(2015-2019)
  • Windows环境变量原理(用户变量与系统变量)(用户环境变量、系统环境变量)
  • centos6.5 老旧系统编译glib-2.58.3.tar.bz2
  • vue-property-decorator实践(一)
  • 网站设计培训班老师/seo排名赚挂机
  • 视频推广平台有哪些/新网站seo外包
  • 网站建设推广公司排名/关键词推广seo怎么优化
  • 新余集团网站建设/个人网站设计
  • 常德政府网站市民留言/淘宝关键词怎么选取
  • 求个网站好人有好报2022/制作网站的基本流程