《TCP/IP 卷1》笔记:DNS:域名系统

DNS:域名系统

引言

DNS(域名系统)是一种用于TCP/IP应用程序分布式数据库,提供主机名字和IP地址之间的转换以及有关电子邮件的选路信息。
从应用角度看,对DNS的访问时通过一个地址解析器完成的,主要函数有两个getHostByName和getHostByAddr。

DNS基础

DNS的名字空间和unix的文件系统相似。
每个节点有一个至多63个字符长的表示。
树根没有任何表示的特殊节点
命名标识中一律不区分大写和小写。
命名树上任何一个结点的域名是将从该结点到最高层的域名串连起来,中间使用一个点“.”分隔。
unix文件系统时由树根依次向下想成的
DNS的层次组织
顶级域名被分为三个部分:

  1. arpa是一个用作地址到名字转换的特殊域
  2. 7个三个字符长的普通域。现在的普通域不止这三个
  3. 所有2字符长的域是基于ISO3166中定义的国家代码,称为国家域或者地理域

3个字符长的普通域

  • 一个独立管理的DNS子树称为一个区域。一个区域会有一个机构(或者公司)负责提供多个名字服务器。负责一个新系统加入时的域名和ip地址申请,并加入到名字服务器。
  • 名字服务器必须是高可用架构–主备
  • 主服务器负责把新系统的名字和ip写入到磁盘文件,备服务器定时同步
  • 当一个名字服务器没有请求的信息时,会联系其他名字服务器。每个名字服务器必须知道如何同根的名字服务器联系。
  • 全球有13台根服务器,根服务器知道所有二级域中的每个授权名字服务器的名字和ip
  • DNS的一个基本特性是使用超高速缓存

DNS查询和响应的一般格式

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

DNS报文首部中的标志字段

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

随后的4个16bit的字段说明最后4个变长字段中包含的条目数。对于查询,问题通常是1,其他是0.对于应答,回答数至少是1,剩下两项都行

DNS查询报文中的问题部分
DNS查询报文中问题部分的格式
查询名就是要查找的名字,是一个或多个标识符的序列。每个标识符以首字节的计数值来说明随后标识符的字节长度。以0结尾。长度为0的标识符是根标识符。计数字节的值必须是0~63的数,因为一个标识符的最大长度是63.(计数字节的最高两比特为1,即值192-255用于压缩格式)
在这里插入图片描述
在这里插入图片描述
每个问题的有一个查询类先,每个响应也有一个类型

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

  • DNS报文中最后的三个字段,都是使用资源记录RR的相同格式
  • 域名是记录中资源数据对应的名字,格式与查询的名字格式相同
  • 类型说明RR的类型码,与前面查询类型值相同
  • 生存时间是客户程序保留该资源记录的秒数
  • 资源数长度说明资源数据的量。该数据的格式依赖于类型字段的值

一个简单的例子

例子
名字解析器是客户程序的一部分,并且在telnet客户程序与daytime服务器建立TCP/IP连接之前,名字解析器就能通过名字服务器获取IP地址
简单的流程
可以在linux的etc目录下的resolv.conf文件中看到名字服务器的地址
名字服务器的地址

向名字服务器查询主机名的输出

  • 第1行冒号后的(1+)表示标识字段1,加号表示RD标志(期望递归)为1。A?,表示查询类型为A(需要查询一个IP地址),问号表明是一个查询。37表示UDP报文的用户数据长度。12字节是固定长度的报首部,21字节是查询的名字,以及用于查询类型和查询类的4个字节。
  • 第2行的1*是表示字段,星号表示设置了AA标志(授权应答),2/0/0表示响应报文中最后3个变长字段的资源记录数:回答RR数为2,授权RR和附加信息RR为0。只显示了一个回答,回答类型是A(IP地址)

yum install -y bind-utils – 安装host命令

host
可以查看多地址主机的ip地址。
nslookup和dig和doc都能查询域名

DNS应答格式

指针查询

DNS中难于理解的部分是指针查询方式:即给定一个IP地址,返回与该地址对应的域名
回首图14-1,查看一下顶级域arpa和它下面的in-addr域。当一个组织加入Internet,并获得DNS域名空间的授权,如noao.edu,则他们也获得了对应IP地址的in-addr.arpa的域名空间的授权。
DNS名字是从DNS树的底部逐步向上书写的。这样对于一个ip地址140.252.13.33的sun主机,它的DNS名字是33.13.252.140.in-addr.arpa

举例
使用host命令进行指针查询
域名的指针查询
主机名检查
一般系统调用getHostByAddr的调用过程

  1. 进行名字解析时,名字解析函数首先进行一个指针查询。第一行发起了指针查询
  2. 名字服务器返回了DNS响应,返回了域名。
  3. 发起了域名解析
  4. 返回域名对应的IP地址,如果没有与输入参数匹配的地址,会向系统日志发送报文,并向应用程序返回差错。
    指针查询

资源记录

一些不同类型的资源记录(RR)
一些资源记录

高速缓存

为了减少internet上的DNS的通信量,所有的名字服务器均使用高速缓存。
高速缓存由名字服务器的系统维护,而非名字解析器维护
根服务器只返回授权的名字服务器,不负责查询域名。

使用UDP还是TCP

DNS名字服务器同时支持TCP和UDP的端口53.
以下情况会使用TCP查询

  • 名字解析器发出一个查询请求,并且返回响应中TC(删除标志)比特被设置为1时,表示响应超长。会使用TCP重发刚刚的请求。
  • 当一个域的辅助名字服务器会定时从主服务器执行区域传送,区域传送就使用TCP,因为这时往往有大量数据

DNS主要使用UDP,名字解析器和名字服务器有一个好的重传和超时程序

一个例子

启动Rlogin客户和服务器的分组交换过程
先启动Rlogin客户程序,连接到一个位于其他域的Rlogin服务器。假定客户端和服务器都没有告诉缓存
在这里插入图片描述
在这里插入图片描述

小结

DNS是任何与Internet相连主机必不可少的一部分。层次树是组成DNS域名空间的基本组织形式
通过名字解析器可以将一个主机名转换成IP地址,也可将一个IP地址转换成对应的主机名

习题

14.1讨论一个DNS名字解析器和一个DNS名字服务器作为客户程序、服务器或同时作为客户和服务器的情况。
**答:**分别作为客户端和服务器时,客户端会每次发送DNS名字解析查询。同时作为客户和服务器时,服务器有高速缓存,那么就直接查询本地,分组不需要进入Internet

14.2说明图14-12中构成响应的75个字节的含义。
指针查询tcpdump
答: 44字节请求分别是12字节的头部+(34.13.252.140.in-addr.arpa.)的28字节的查询名字+4个字节的查询类型和查询类。响应中包含请求部分的字节。那么就是44字节+19字节的查询名字+4个字节的查询类型和查询类+4字节的生存时间+2字节的资源数据长度+2字节的资源数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
14.3在12.3节我们指出,一个既可接受点分十进制形式的IP地址、也可接收主机名的应用程
序,应先假定输入的是IP地址,如果失败,再假定是主机名。如果改变这个测试顺序会
出现什么情况?

**答:**增加DNS解析次数。

14.4每个UDP数据报有一个相应的长度。一个接收UDP数据报的进程将被告知这个长度。当
名字解析器使用TCP而不是UDP来处理查询请求时,由于TCP是没有任何记录标记的字
节流,那么应用程序是如何知道有多少数据返回?注意在DNS的报文首部(图14-3)中
没有任何长度字段(提示:查阅RFC1035)

**答:**这个是不是超纲了,等我看完tcp来填坑

14.5我们说一个名字服务器必须知道根名字服务器的IP地址,这一信息可通过匿名FTP获得。
不幸的是当根名字服务器表发生变化时,并不是所有的系统管理员都会更新他们的DNS
配置文件(根名字服务表的确会发生变化,尽管不是经常的)你认为DNS如何处理这个
问题?

**答:**名字服务器会轮询不同的根服务器查询对应的域名IP,当一台域名根名字服务器变化时不影响使用。

14.6利用习题1.8指明的文件来确定谁应负责维护根名字服务器。名字服务器更新的频度是
怎样的?

**答:**回去看了下不行。需要账号密码
在这里插入图片描述

14.7维护一个名字服务器和一个无状态的名字解析器高速缓存的问题分别是什么?
**答:**一个名字服务器是:保证服务器启动时,所以应用程序都能使用高速缓存。
一个无状态的名字解析器是怎么保证缓存一致性

14.8在图14-10的讨论中,我们指出名字服务器将对A类型记录进行排序以便在公共网中的地
址先出现。谁对A类型记录进行这种排序,是名字服务器还是名字解析器?

答: BIND会排线显示的结果,让相同网络的优先显示。名字解析器。这个任务交给名字解析器处理比较合理,名字服务器负责提供查询,根据结果进行不同的显示优先级由名字解析器完成。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值