TCP/IP学习之“DNS”

DNS域名系统
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

从应用的角度上看,对DNS的访问是通过一个地址解析器(resolver)来完成的。在Unix主机中,该解析器主要是通过两个库函数gethostbyname(3) 和gethostbyaddr(3)来访问的,它们在编译应用程序时与应用程序连接在一起。前者接收主机名字返回IP地址,而后者接收IP地址来寻找主机名字。解析器通过一个或多个名字服务器来完成这种相互转换。


DNS的层次组织

TCP/IP学习之“DNS”

顶级域名被分为三个部分:
1) arpa是一个用作地址到名字转换的特殊域
2) 7个3字符长的普通域(组织域)
3) 所有2字符长的域均是基于ISO3166中定义的国家代码(国家域或地理域)

3字符长的普通域

TCP/IP学习之“DNS”


DNS的报文格式

DNS查询和响应的一般格式

TCP/IP学习之“DNS”

报文由12字节长的首部和4个长度可变的字段组成

  • 标识字符由客户程序设置并由服务器返回结果,客户程序通过它来确定响应与查询是否匹配
  • 16 bit的标志位被划分为若干子字段
    TCP/IP学习之“DNS”

    • QR是1 bit字段:0表示查询报文,1表示响应报文
    • opcode是一个4 bit字段:通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求)
    • AA是1 bit标志,表示“授权回答(authoritative answer)”,该名字服务器是授权于该域的
    • TC是1 bit字段,表示“可截断的(truncated)”,使用UDP时,它表示当应答的总长度超过512字节时,只返回前512个字节
    • RD是1 bit字段表示“期望递归(recursion desired)”。该比特能在一个查询中设置,并在响应中返回。这个标志告诉名字服务器必须处理这个查询,也称为一个递归查询。如果该位为0,且被请求的名字服务器没有一个授权回答,它就返回一个能解答该查询的其他名字服务器列表,这称为迭代查询
    • RA是1 bit字段,表示“可用递归”。如果名字服务器支持递归查询,则在响应中将该比特设置为1
    • 随后的3 bit字段必须为0
    • rcode是一个4 bit的返回码字段。通常的值为0(没有差错)和3(名字差错)。名字差错只有从一个授权名字服务器上返回,它表示在查询中制定的域名不存在

4个16 bit 字段说明最后4个变长字段中包含的条目数。对于查询报文,问题(question)数通常是1,而其他3项则均为0。类似地,对于应答报文,回答数至少是1,剩下的两项可以是0或非0


DNS查询报文中的问题部分

DNS查询报文中问题部分的格式

TCP/IP学习之“DNS”

查询名是要查找的名字,它是一个或多个标识符的序列。每个标识符以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为0结束,长度为0的标识符是根标识符。计数字节的值必须是0 ~ 63的数,因为标识符的最大长度仅为63(计数字节的最高两比特为1,即值192~255,将用于压缩格式)

DNS问题和响应的类型值和查询类型值

TCP/IP学习之“DNS”


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

DNS报文中最后的三个字段,回答字段、授权字段和附加信息字段,均采用一种称为资源记录RR(Resource Record)的相同格式

DNS资源记录格式

TCP/IP学习之“DNS”

  • 域名是记录中资源数据对应的名字。它的格式和前面介绍的查询名字段格式相同
  • 类型说明RR的类型码。它的值和前面介绍的查询类型值是一样的。类通常为1,指Internet数据
  • 生存时间字段是客户程序保留该资源记录的秒数。资源记录通常的生存时间值为2天
  • 资源数据长度说明资源数据的数量。该数据的格式依赖于类型字段的值。对于类型1(A记录)资源数据是4字节的IP地址

资源记录

  • A : 一个A记录定义了一个IP地址,存储32 bit的二进制数
  • PTR : 指针记录用于指针查询。IP地址被看作是in-addr.arpa域下的一个域名
  • CNAME : 这表示“规范名字(canonical name)”。它用来表示一个域名(标识符串),而有规范名字的域名通常被称为别名(alias)
  • HINFO : 表示主机信息:包括说明主机CPU和操作系统的两个字符串。并非所有的站点均提供它们系统的HINFO记录,并且提供的信息也可能不是最新的
  • MX : 邮件交换记录,用于以下一些场合:(1)一个没有连到Internet的站点能将一个连到Internet的站点作为它的邮件交换器。这两个站点能够用一种交替的方式交换到达的邮件,而通常使用的协议是UUCP协议。(2)MX记录提供了一种将无法到达其目的主机的邮件传送到一个替代主机的方式。(3)MX记录允许机构提供供他人发送邮件的虚拟主机。(4)防火墙网关能使用M X记录来限制外界与内部系统的连接
  • NS : 名字服务器记录。它说明一个域的授权名字服务器。它由域名表示(符号串)

启动Rlogin客户和服务器的分组交换过程

TCP/IP学习之“DNS”

1) 客户程序启动后,调用它的名字解析器函数将我们键入的主机名转换为一个IP地址。一个A类型的查询请求被送往一个根服务器。
2) 由根服务器返回的响应中包含为该服务器所在域服务的名字服务器名。
3) 客户端的名字解析器将向该服务器的名字服务器重发上述A类型查询,这个查询通常是将期望递归标志设置为1。
4) 返回的应答中包含Rlogin服务器的IP地址。
5) Rlogin客户和Rlogin服务器建立一个TCP连接。客户和服务器的TCP模块间将交换3个分组。
6) Rlogin服务器收到来自客户的连接请求后,调用它的名字解析器通过TCP连接请求中的IP地址获得客户主机名。这是一个PTR查询请求,由一个根名字服务器处理。这个根名字服务器可以不同于步骤1中客户使用的根名字服务器。
7) 这个根名字服务器的响应中含有为客户的in-addr.arpa域的名字服务器。
8) 服务器上的名字解析器将向客户的名字服务器重传上述PTR查询。
9) 返回的PTR应答中含有客户主机的FQDN。
10) 服务器的名字解析器向客户的名字服务器发送一个A类型查询请求,查找前一步返回的名字对应的IP地址。
11) 从客户的名字服务器返回的响应含有客户主机的A记录。Rlogin服务器将客户的TCP连接请求中的IP地址与A记录作比较。


猜你喜欢

转载自blog.51cto.com/14033577/2541557