简介:dns是一个分布式数据库,提供两种功能:1)域名转ip 2)ip转域名。程序在使用TCPIP等协议之前必须将域名转为ip,tcpip根本不知道域名。
DNS basis:
DNS组织的层次结构如图所示,最顶上的是根域名服务器。目前全世界有13台逻辑上的根域名服务器,全部都由美国控制。10台分布在美国,2台欧洲,1台日本。但是还有很多要域名器的镜像服务器(不知道原理是什么)分布在各个国家,中国也有。
其下是根域名服务器,分成三类:
1)arpa是一个用作地址到名字转换的特殊域。
2)7个3字符长的普通域。有些书也将这些域称为组织域。
3)所有2字符长的域均是基于ISO3166中定义的国家代码,这些域被称为国家域,或地理域。
DNS组织这颗大树的子树都可以称之为域,DNS很重要的一个概念就是授权,这些不同的域被授权给不同的组织分别维护。如添加,删除域名,设置主备域名服务器等。每个域名服务器必须知道根域名服务器的ip地址。对于自己不知道的域名,就需要像根域名服务器查询,多而获得相应的顶级域名服务器的地址,然后继续查询。
关于根域名服务器,不仅涉及到技术问题,还涉及到经济,政治,军事问题。知乎有一个相关的问题:
DNS message format
标识用来将请求与响应对应起来。
16位的标记又被分为若干字段:
QR:0表示请求,1表示响应
opcode:0表示标准查询,1表示反向查询,2表示服务器状态请求
AA:1表示此服务器对于问题中的域名是有权进行管理的
TC:1表示总长度超过了512字节,多余的部分被截断了。
RD:1表示期望递归查询。递归查询的意思就是如果你不知道,你帮我去向别人那查,查到结果之后将结果返回给我。
0表示迭代查询,意思就是说,如果你不知道,就告诉我谁知道,我自己再去问知道的那个人。
RA:1表示告诉请求方,我可以提供递归查询服务。
后面的4个字段分别表示变长字段中包含的条目数。通过长度与格式信息,可以区分问题,回答,授权,额外信息等不同字段之间的边界。
问题的格式:
查询类型和查询类长度固定,查询名长度不固定,表示方法如下:
第一个字节表示紧随其后的标识符(域名组织图中的圆圈所表示的内容)的长度,长度不超过63,因为规定标识符的长度不能超过63,所以高2位就 一定是0.
所以这也就产生了一种压缩方法:用长度+偏移量的方式来表示重复的域名。
表示方法:如果表示长度字节的高2位被置为了1,则表明,紧随其后的两个字节是一个表示偏移量的指针,(当然,这个字节的低6位依旧表示长度,不过表示的是重合的长度)。DNS报文的第一个字节的偏移量为0(也就是标识字段),每一个字节递增。
DNS报文中的三种资源的记录格式:
pointer queries 指针查询
如书上所说,这确实是很令人费解的一部分,网上相关的解释也比较少。
大意就是说,如果XX获得了某个域名空间的授权,那么你同时也获得了in-addr.arpa域名空间下对应的以ip为标识符的授权。比如说,noao.edu,注册的ip为B类地址,对应的网络号为140.252,那么252.140.in-addr.apra则同时也被授权给了XX。这样别人要用ip查找域名的时候就可以在这个域名空间下查找到ip对应的域名。
有一些细节问题没有弄明白:
1)一个ABC类网络号一定会分给一家机构吗?会不会通过子网的方式分给不同的机构,如果是的话,那么这个ip对应的域名空间该授权给谁呢?
2)在上面的例子中,252.140.in-addr.apra则同时也被授权给了XX,那么140.in-addr.apra这个域名空间是不是就没有授权给任何人呢。
resource Records
没看,略
cachiing
为了减少DNS查询引起的通信量,所有的名字服务器都使用了缓存技术。
如果没有指定默认的域名服务器,就会联系从配置文件中读取到的根域名服务器。根域名服务器不提供递归查询的服务,所以RD标志位不能开启。
如果是从缓存中得到的结果,那么AR(授权标志)标志位不会被置1.
不明白uu.net下面为什么可以授权不以uu.net结尾的域名空间。
14.9 another example
不明白这个步骤中:从tcp连接中得到IP->域名->ip,然后比较这个ip和之前从TCP连接中得到的ip是否相同这个过程的作用是什么。