* 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) |