首页 > 编程知识 正文

TCPIP详解09应用层基于UDPDNSTFTP 和 BOOTP

时间:2023-05-03 12:57:35 阅读:222529 作者:4264

TCP/IP详解09-应用层(基于UDP):DNS、TFTP 和 BOOTP

TCP/IP详解09-应用层(基于UDP):DNS、TFTP 和 BOOTP 1. DNS:域名系统 1.1 DNS系统介绍 1.1.1 基础1.1.2 DNS的报文格式 1.2 例子 1.2.1 正向查询1.2.2 反向查询(指针查询) 1.3 其他问题 1.3.1 DNS服务器高速缓存1.3.2 用UDP还是TCP 2. TFTP:简单文件传送协议3. BOOTP:引导程序协议

1. DNS:域名系统

解析器 名字服务器

DNS(Domain Name System)是一种用于 TCP/IP 应用程序的分布式数据库(这里是指在 Internet 上的单个站点不能拥有所有的信息),它提供主机名字和 IP 地址之间的转换及有关电子邮件的选路信息。

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

1.1 DNS系统介绍 1.1.1 基础

以点“.”结尾的域名称为绝对域名或完全合格的域名 FQDN(Full Qualified Domain Name),例如 sun.tuc.noao.edu.。注意的是,DNS名字是由DNS树的底部逐步向上书写的。这意味着对于IP地址为140.252.13.33的sun主机,它的DNS名字为 33.13.252.140.in-addr.arpa。

顶级域名被分为三个部分:

1) arpa 是一个用作地址到名字转换的特殊域。2) 7 个 3 字符长的普通域。有些书也将这些域称为组织域。3) 所有 2 字符长的域均是基于 ISO3166 中定义的国家代码,这些域被称为国家域,或地理域。

这个树里面的域名并不是统一管理的,网络信息中心(NIS)负责分配顶级域和委派其他制定地区域的授权机构。

一个独立管理的 DNS 子树叫做一个区域 (zone),最常见的区域就是二级域名,比如说.com.cn。我们还可以把这个二级域名给划分成更小的区域,比如说sina.com.cn。一旦一个区域的授权机构被委派后,由它负责向该区域提供多个名字服务器。当一个新系统加入到一个区域中时,该区域的 DNS 管理者为该新系统申请一个域名和一个 IP 地址,并将它们加到名字服务器的数据库中。

DNS 系统是一个分布式的数据库,当一个数据库发现自己并没有某查询所需要的数据的时候,它将把查询转发出去,而转发的目的地通常是根服务器,根服务器从上至下层层转发查询,直到找到目标为止。DNS 还有一个特点就是使用高速缓存,DNS把查询过的数据缓存在某处,以便于下次查询时使用。

1.1.2 DNS的报文格式

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

标识字段由客户程序设置并由服务器返回结果。客户程序通过它来确定响应与查询是否匹配。 16 bit的标志字段被划分为若干子字段,如图 14-4所示。

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查询报文中的问题部分

查询名是要查找的名字,它是一个或多个标识符的序列。每个标识符以首字节的计数值 来说明随后标识符的字节长度,每个名字以最后字节为 0结束,长度为0的标识符是根标识符。
存储域名gemini.tuc.noao.edu最常用的查询类型是 A 类型,表示期望获得查询名的 IP 地址。一个 PTR 查询则请求获得一个 IP 地址对应的域名,这是一个指针查询。

A :一个A记录定义了一个IP地址,它存储32 bit的二进制数。 PTR 指针记录用于指针查询。IP 地址被看作是 in-addr.arpa 域下的一个域名(标识符串)。CNAME 这表示“规范名字 (canonical name)”。它用来表示一个域名(标识符串),而有规范名字的域名通常被称为别名 ( alias )。某些 FTP 服务器使用它向其他的系统提供一个易于记忆的别名。HINFO:表示主机信息:包括说明主机 CPU 和操作系统的两个字符串。并非所有的站点均提供它们系统的HINFO记录,并且提供的信息也可能不是最新的。MX:邮件交换记录NS:名字服务器记录。查询类通常是1,指互联网地址(某些站点也支持其他非 IP地址)。DNS响应报文中的资源记录部分

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

参见书14.4节

1.2.2 反向查询(指针查询)

正向查询指的是通过域名得到 IP 的查询,而反向查询就是通过 IP 得到域名。例如用 host 命令,host ip就可以得到服务器的域名,host domainName 就得到 IP。

稍微知道一点数据结构的人都能意识到,在正向查询的域里面做反向查询,其做法只有遍历整个数据集合—-对于DNS来说,那就是遍历整个数据库,这将带来巨大的负担,所以DNS采取了另一种方法,使用另一棵子树来维护IP-〉域名的对应表。这个子树的根节点是in-addr.arpa,而一个IP 例如192.168.11.2)所具有的DNS地址就是 2.11.168.192.in-addr.arpa(ip倒置)。在DNS系统里面,一个反向地址对应一个PTR纪录(对应A纪录),所以反向查询又叫做指针(PTR)查询

1.3 其他问题 1.3.1 DNS服务器高速缓存

BIND9默认是作为一个高速缓存服务器,其将所有的查询都转交到根服务器去,然后得到结果并放在本地的缓冲区,以加快查询速度。如果有兴趣可以安装一个BIND9来尝试一下。而自己定义的zone则可以规定其在缓存中的时间,一般是1天(就是配置文件中的1D)

1.3.2 用UDP还是TCP

DNS服务器支持TCP和UDP两种协议的查询方式,而且端口都是53。而大多数的查询都是UDP查询的,一般需要TCP查询的有两种情况:

当查询数据多大以至于产生了数据截断(TC标志为1),这时,需要利用TCP的分片能力来进行数据传输(看TCP的相关章节)。当主(master)服务器和辅(slave)服务器之间通信,辅服务器要拿到主服务器的 zone 信息的时候。 2. TFTP:简单文件传送协议 3. BOOTP:引导程序协议

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。