DNS 是域名系统 (Domain Name System) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。 DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如 IP 地址。因为,你在上网时输入的网址,是通过域名解析系统解析找到了相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。
在IPV4中IP是由32位二进制数组成的,将这32位二进制数分成4组每组8个二进制数,将这8个二进制数转化成十进制数,就是我们看到的IP地址,其范围是在0~255之间。因为,8个二进制数转化为十进制数的最大范围就是0~255。现在已开始试运行、将来必将代替IPv4的IPV6中,将以128位二进制数表示一个IP地址。
DNS使用的是UDP53号端口
一,DNS的工作原理
以访问www.xxx.com为例说明
1)客户端首先检查本地c:/windows/system32/drivers/etc/host文件,是否有对应的IP地址,若有,则直接访问WEB站点,若无
2)客户端检查本地缓存信息,若有,则直接访问WEB站点,若无
3)本地DNS检查缓存信息,若有,将IP地址返回给客户端,客户端可直接访问WEB站点,若无
4)本地DNS检查区域文件是否有对应的IP,若有,将IP地址返回给客户端,客户端可直接访问WEB站点,若无,
5)本地DNS根据cache.dns文件中指定的根DNS服务器的IP地址,转向根DNS查询。
6)根DNS收到查询请求后,查看区域文件记录,若无,则将其管辖范围内.com服务器的IP地址告诉本地DNS服务器
7).com服务器收到查询请求后,查看区域文件记录,若无,则将其管辖范围内.xxx服务器的IP地址告诉本地DNS服务器
8).xxx服务器收到查询请求后,分析需要解析的域名,若无,则查询失败,若有,返回www.xxx.com的IP地址给本地服务器
9)本地DNS服务器将www.xxx.com的IP地址返回给客户端,客户端通过这个IP地址与WEB站点建立连接
具体看一个名字到地址的解析过程(上面的例子仅是为了引发您的思维,而不能与实际的DNS查询过程一一对应,不要生搬硬套)
当您在浏览器中输入(www.seebod.com.),我们的电脑是如何得到IP地址的:
1、浏览器发现是一个名字,于是调用我们机器内部的DNS Client软件,这个软件会把我们的请求发送到网卡Tcp/IP设置中的默认DNS服务器IP地址(上海电信提供DNS的服务器有3台,其中一台IP是202.96.209.5):“您可以告诉我www.seebod.com.的IP地址吗?我这是一个递归查询”
2、 202.96.209.5的DNS服务器会检查自己的DNS缓存,如果缓存里有,就直接返回给客户,如果没有,202.96.209.5就会向自己系统内部配置中负责.域的DNS服务器的IP地址(负责.域的那台DNS服务器位于美国,共13台,系统会随机选一台,这里比如是61.1.1.1)发出请求: “您能告诉我www.seebod.com.的IP地址吗?我这是一个跌代查询”
3、.域DNS服务器61.1.1.1中包含负责net.域解析的IP地址,把查询结果返回给202.96.209.5:“负责net.域的DNS服务器地址是54.4.4.4”
4、202.96.209.5收到上面的查询结果后,于是询问负责net.域的DNS服务器54.4.4.4 :“您能告诉我负责www.seebod.com.的IP地址吗?我这是一个跌代查询。”
5、负责net.域的DNS服务器54.4.4.4把查询后的结果返回给202.96.209.5:“负责seebod.com.域的dns服务器的ip地址是 211.152.17.58”
6、202.96.209.5收到上面的查询结果够,于是询问负责seebod.com.域的DNS服务器211.152.17.58:“您能告诉我www.seebod.com.所对应的IP地址吗?”
7、211.152.17.58把查询后的结果返回给202.96.209.5:“www.seebod.com.对应的IP地址是211.100.26.123”
8、202.96.209.5把最终结果放到自己的DNS缓存里,这样以后就不用再进行上面的跌代查询了。
9、202.96.209.5把最终结果返回给最初发起请求的客户机。
10、客户机的dns client软件把最终结果返回给浏览器。
11、浏览器把目的IP地址连同http数据传递给网络层。
12、网络层根据目标地址判断路由,发现目标IP地址211.152.17.58与本机不在同一个网段(判断是否是同一个网段使用子网掩码与目的IP地址做与运算),于是决定把次包发给网关。
13、检查本地arp缓存表获得本地网关的MAC地址。
.....
........
二,怎样实现DNS?
无论您是通过linux还是windows搭建dns服务器,原理都是一致的。
您可以把DNS服务器配置成以下3类之一:
1、主DNS服务器。
2、辅DNS服务器。
3、缓存DNS服务器。
1、在例子中,我们提到的211.152.17.58就是主DNS服务器,这台服务器负责seebod.com.域的名字到IP解析。
2、在例子中,seebod.com.域还有台辅dns服务器,名字是dns2.100ok.com,ip地址是 211.157.101.174。辅DNS的存在的意思是:当主DNS瘫痪由辅dns提供服务。
3、在例子中,202.96.209.5就是缓存DNS服务器。这样的DNS服务器不负责任何域的最终解析,只缓存解析记录,这样用户下次请求相同的解析记录时直接从缓存中的名字到IP的对应关系返回给用户,而不需要再递归或者跌代查询了。
三,DNS在哪里?
提供DNS的是计算机,是安装了DNS服务器端软件的计算机。服务器端软件即可以是基于类Unix操作系统,也可以是基于Windows操作系统的。装好DNS服务器软件后,您就可以在您指定的位置创建区域文件了,所谓区域文件就是包含了此域中名字到IP地址解析记录的一个文件(如文件名可能是seebod.com.这个文件的内容是这样的:
primary name server = dns2.100ok.com (主服务器的主机名是 dns2.100ok.com)
serial = 2007042913 (当前序列号是2007042913。这个序列号的作用是当辅域名服务器来copy时候这个文件时,如果号码增加了就copy)
refresh = 10800 (3 hours) (辅域名服务器每隔3小时查询一个主服务器)
retry = 3600 (1 hour) (当辅域名服务试图在主服务器上查询更时,而连接失败了,辅域名服务器每隔1小时访问主域名服务器)
expire = 604800 (7 days) (辅域名服务器在向主服务更新失败后,7天后删除seebod.com.中的记录。)
default TTL = 3600 (1 hour) (缓存服务器保存记录的时间是1小时。也就是告诉202.96.209.5保存seebod.com.域的解析记录为1小时)
http://qiusuoge.com/ Addresses: 211.100.26.124, 211.100.26.121, 211.100.26.122, 211.100.26.123 (http://qiusuoge.com/对应的ip地址有4个。起到冗于的作用)
seebod.com MX preference = 10, mail exchanger = mail.seebod.com (seebod.com域中两台mail服务器实现冗于.不同的IP/web界面,相同的web数据库)
seebod.com MX preference = 20, mail exchanger = mail2.seebod.com
seebod.com nameserver = dns2.100ok.com (两台DNS服务器实现冗于)
seebod.com nameserver = dns5.100ok.com
)。
四、如何解决DNS解析故障:
当我们的计算机出现了DNS解析故障后不要着急,解决的方法也很简单。
(1)用nslookup来判断是否真的是DNS解析故障:
(2)查询DNS服务器工作是否正常:ipconfig/all查看dns地址
(3)清除DNS缓存信息法:ipconfig/flushdns
当计算机对域名访问时并不是每次访问都需要向DNS服务器寻求帮助的,一般来说当解析工作完成一次后,该解析条目会保存在计算机的DNS缓存列表中,如果这时DNS解析出现更改变动的话,由于DNS缓存列表信息没有改变,在计算机对该域名访问时仍然不会连接DNS服务器获取最新解析信息,会根据自己计算机上保存的缓存对应关系来解析,这样就会出现DNS解析故障。这时我们应该通过清除DNS缓存的命令来解决故障。
(4)修改HOSTS文件法:
修改HOSTS法就是把HOSTS文件中的DNS解析对应关系进行修改,从而实现正确解析的目的。因为在本地计算机访问某域名时会首先查看本地系统中的HOSTS文件,HOSTS文件中的解析关系优先级大于DNS服务器上的解析关系。
这样当我们希望把某个域名与某IP地址绑定的话,就可以通过在HOSTS文件中添加解析条目来实现。
第一步:通过“开始->搜索”,然后查找名叫hosts的文件。
第二步:当然对于已经知道他的路径的读者可以直接进入c:/windows/system32/drivers/etc目录中找到HOSTS文件。如果你的系统是windows 2000,那么应该到c:/winnt/system32/drivers/etc目录中寻找。
第三步:双击HOSTS文件,然后选择用“记事本”程序将其打开。
第四步:之后我们就会看到HOSTS文件的所有内容了,默认情况下只有一行内容“127.0.0.1 localhost”。(其他前面带有#的行都不是真正的内容,只是帮助信息而已)
第五步:将你希望进行DNS解析的条目添加到HOSTS文件中,具体格式是先写该域名对应的IP地址,然后空格接域名信息。例如笔者添加了“211.153.80.1 http://qiusuoge.com/”与“10.82.0.1www.xkq.com”两个条目。
第六步:设置完毕后我们访问http://qiusuoge.com/时就会自动根据是在内网还是外网来解析了。