Chinaunix首页 | 论坛 | 博客
  • 博客访问: 249704
  • 博文数量: 51
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 575
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-22 13:49
文章分类
文章存档

2009年(1)

2008年(13)

2007年(7)

2006年(30)

我的朋友

分类:

2006-10-05 13:59:32

*       DNS域名系统是应用层协议,可以用于UDP或TCP,通常使用UDP。
        DNS的概念和功能见RFC 1034,DNS的规范和实现见RFC 1035。

*       DNS域名的层次结构类似于Unix文件系统,各个分支可以有名称相同的结点,但结点是唯一确定的,也可以用别名连接两个结点。

*       顶级域名包括用于地址转换的arpa、3字节的组织域(.com, .org等)、
        2字节的地理域(.cn, .uk等,地理代码基于ISO 3166)

*       IP到域名的转换转换查询通过DNS服务器的服务实现,DNS缓存并更新域名信息,与其他DNS主机使用分布式交互信息。DNS在UDP或者TCP的知名端口均为53。

*       DNS服务器的根域为根服务器,由美国NIC负责管理或者委托授权。根服务器用于管理全球互联网上的IP分配、域名分配、DNS查询等。根服务器列表可以从NIC的ftp获取或者向nic@sri-nic.arpa发送邮件获取。

*       DNS服务器设置在/etc/resolv.conf,此配置文件也可能包含域名映射记录。

*       查询DNS的命令:host <主机名>

*       DNS报文包括首部、查询及三个RR资源记录信息组成。

*       首部共12字节,格式为:
        标识(2字节)--标志(2字节)--问题数(2字节)--资源记录数(2字节)--授权资源记录数(2字节)--附加资源记录数(2字节)

        标志字段包括(从高位到低位):
        QR(1 bits):            查询(0)和应答(1);
        opcode(4 bits):         标准查询(0)、反向查询(1)、服务器状态请求(2);
        AA(授权回答,1 bits):
        TC(报文可截断,1 bits):  为1则此位有效;
        RD(递归要求,1 bits):   置0且被请求的DNS服务器没有授权回答,则返回能解答该查询的其他DNS服务器列表;
        RA(递归可用,1 bits):   若DNS服务器支持递归查询,在响应中此位置1;
        left 0 (3 bits):       3位未使用,必须置0;
        rcode (4 bits):        通常设置为0(无错误)。若值为3表示域名错误,其
                                值只能从授权DNS服务器返回。

        问题数用于查询报文,通常为1,后面三个都为0
        资源记录通常用于应答报文,回答至少为1,剩下两项可以为0或非0;

*       DNS报文中查询部分的格式(长度不确定):

        查询名:        在各子域名前包含其长度,并以0结束,
                        如的报文中的格式应为3www6google2cn0
        类型:          大约有20种,最常用的是A,表示期望获得查询明的IP;
                        PTR表示获得一个IP对应的域名,等等。在host命令中可以用-t选项指明这个参数。
        类别:          通常为1,表示为互联网IP地址。

*       DNS报文中的响应部分(均采用资源记录RR的格式)

        域名:          格式于查询部分的查询明相同;
        类型:          和查询的类型相同;
        类别:          和查询的类别相同,通常是1;
        生存时间:      客户程序保留该记录的秒数,通常为2天;
        资源数据长度:  依赖于类型字段的值,如A类型(IP地址)则为4;
        资源数据:      如A类型(IP地址)则为4个字节的IP地址。

*       一个例子

        对域名的查询,-t a表明查询类型为A

root@mjxian-ubuntu ~
# host -t a
is an alias for
is an alias for www-china.l.google.com.
www-china.l.google.com has address 64.233.189.104

        tcpdump监听的输出:

13:35:18.761306 IP ubuntu.1061 > dart.scu.edu.cn.domain:  60353+ A? . (32)
13:35:18.762104 IP dart.scu.edu.cn.domain > ubuntu.1061:  60353 3/6/6 CNAME ,[|domain]
13:35:18.762770 IP ubuntu.1062 > dart.scu.edu.cn.domain:  11166+ PTR? 39.32.115.202.in-addr.arpa. (44)
13:35:18.763252 IP dart.scu.edu.cn.domain > ubuntu.1062:  11166* 1/2/2 (140)

        dart.scu.edu.cn则为所请求的DNS服务器,其IP为202.115.32.39,
        后缀domain表示采用DNS服务的知名端口53。

        第1行中60353为查询报文的标识,+号表示要求递归,A?表示查询类型,查询名字为,报文长度32。
        第2行中3/3/6表示回答RR、授权RR和附加信息RR的数量。CNAME的意思是该域名用了别名指向,[|domain]暂时不明……

        第3、4行是tcpdump监听对DNS发出的额外请求,如果采用-n选项则没有这两行。
        第3行要求得到202.115.32.39的主机域名,这主要是要求知道发送第2行数据的IP属于哪个主机。
        第4行为对第3行的回答,*号表示授权回答;

*       PTR指针查询
        用于对于指定的IP,要求知道其域名。采用in-addr.arpa域名进行转换。
        例如要查询202.115.32.129的主机域名,其在DNS中查询的名字则为129.32.115.205.in-addr.arpa。其转换一般由相关的socket函数完成。

        采用in-addr.arpa域主要是为了可以用一个单独的DNS分支查询IP到主机的映射,而不用遍历整个DNS树(从com到net再到org....)。

        查询
root@mjxian-ubuntu ~
# host -t ptr 202.115.32.129
129.32.115.202.in-addr.arpa domain name pointer wjl.scu.edu.cn.

        tcpdump的输出:
13:13:20.531126 IP ubuntu.1052 > dart.scu.edu.cn.domain:  17925+ PTR? 129.32.115.202.in-addr.arpa. (45)
13:13:20.531944 IP dart.scu.edu.cn.domain > ubuntu.1052:  17925* 1/2/2 (145)

*       TFTP和BOOTP
        用于无盘系统的引导,BOOTP比RARP更易于实现。略。
阅读(1801) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~