您的位置:首页 > 理论基础 > 计算机网络

TCP/IP 协议之 DNS

2008-11-18 16:29 204 查看
1、DNS协议的公用端口是53,常用UDP封装(也可以用TCP封装的)。

DNS(域名系统)是一种分布式数据库(IP -- 名字)

2、一些概念:

(1)、DNS的域名的域名最多有63个字符,不分大小写,比如:sun.tuc.noao.edu 最右边的是顶级(一级)域名,往左依次是二级域名,三级域名...。最多可以有128级域名(0-127;其中0级域名为空)

(2)、顶级域有三个组成部分,一是组织域(普通域),常用的有7com,edu,org,int,net,gov,mil(其中gov,mil为美国专用),二是国家域(比如:cn等),三是反向域名:arpa,它底下只有一个二级域名in-addr(用来做从名字到IP的转换)

(3)、以点‘.’结尾的域名称为FQDN(绝对域名)。(一般说,不完整的域名有两段(以上),默认为完整的)

(4)、主从服务器,主服务器负责维护映射,而从服务器不创建更新文件,只是定期的把另一台服务器(可主可从)中信息拷过来备份而已(这个拷贝过程叫做区域传输),目的是为了创建数据的备份,如果某部服务器坏了,还有另外的嘛。

3、报文格式:首部12字节加上可变数据部分

(1)、首部,注意的是标示字段(2B),应用程序的询问和应答通过这个来匹配;标志字段(2B)中的QR位,0表示查询,1表示应答;AA位,由应答服务器设置,当为1时表示该服务器是该域名的授权服务器;TC位,当DNS使用UDP封装,而数据超过512B时,就截断后面的部分,并将该位置1;RD位,当置1时,客户希望得到递归应答;RA位,当DNS应答包回来,名字服务器置1时,表示递归可用;0

(2)、查询报文中的问题部分:每个问题格式如下:查询名(4B),查询类型(2B),查询类(2B)。问题的总数记在首部的问题数字段。

其中,查询名的格式如下:(以tuc.noao.edu为例):3tuc4noao3edu0

查询类型常用的如下:A(查IP),PTR(查指针记录),NS(表示该域名服务器是要求名字的授权服务器)

查询类通常是:IN(0x01 表示互联网地址)

(3)、应答部分格式如下:域名(4B),类型名(2B),类(2B),生存时间(4B),数据长度(2B),数据(由长度值给定)

其中,域名,类型名和类字段照查询报文填充;
生存时间以秒为单位,表示客户程序记住该记录的时间(这段时间可以放在高速缓存内)。
数据:(分3类)
a、IP地址(类型为A时)
b、域名(用在PTR类型中返回结果)
c、偏移指针(长度为2B,头2bit为11),表示数据放在DNS数据的头部的距离(一般为12,因为DNS的首部占12字节,再下来就是DNS域名),这个叫做压缩

4、递归解析和迭代解析

递归解析就是:服务器A如果知道该域名对应的IP地址,则返回结果;如果不知道,就向别的服务器B发送请求,如此类推到结果出来为止。

迭代解析就是:如A知道,返回结果;如果不知道,则返回别的域名服务器B的地址给客户,让客户去访问B,如此类推。

5、指针查询(已知IP查域名)

已知IP,在问题部分的域名字段要这样做(以220.181.6.19为例),域名是 19.6.181.220.in-addr.arpa (就是顶级域arpa的用途)。发送类型为PTR的查询,返回的结果的数据部分就是所求。

6、linux下,DNS服务器的地址在这个文件中:/etc/resolv.conf 文件中。应用程序通过本地的名字解释器进行IP与域名的呼唤,而名字解释器进程则通过名字服务器打交道。(用host程序可以运行域名解析器进程);windows下,用nslookup程序运行域名解析器进程

7、注意的一些东西:

高速缓存,当服务器收到另外一个服务器的应答时,在将应答发回给客户的同时,拷贝一份到高速缓存,同时标记为未授权的;生存时间字段就是针对这个来用的,就是有效期只是生存时间里面的秒数;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息