Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4436400
  • 博文数量: 252
  • 博客积分: 5347
  • 博客等级: 大校
  • 技术积分: 13838
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-30 10:13
文章分类
文章存档

2022年(12)

2017年(11)

2016年(7)

2015年(14)

2014年(20)

2012年(9)

2011年(20)

2010年(153)

2009年(6)

分类: 系统运维

2010-03-02 16:09:46

       当你在浏览器中输入一个网址的时候,系统首先检查本地缓存中有没有相关的记录如果有则直接转换为IP地址进行访问,如果没有则连接到你ISP的主DNS服务器进行域名解析,如果还没有则向更上一级的DNS服务器寻找只到找到为止
DNS的工作原理及过程分下面几个步骤:
    第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
    第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
    第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
    第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
    第五步:重复第四步,直到找到正确的纪录。
    第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
    让我们举一个例子来详细说明解析域名的过程.假设我们的客户机如果想要访问站点: , 此客户本地的域名服务器是dns.company.com , 一个根域名服务器是NS.INTER.NET , 所要访问的网站的域名服务器是dns.linejet.com,域名解析的过程如下所示:
   (1)客户机发出请求解析域名的报文
   (2)本地的域名服务器收到请求后, 查询本地缓存, 假设没有该纪录, 则本地域名服务器dns.company.com则向根域名服务器NS.INTER.NET发出请求解析域名
   (3)根域名服务器NS.INTER.NET收到请求后查询本地记录得到如下结果:linejet.com NS dns.linejet.com (表示linejet.com域中的域名服务器为:dns.linejet.com ), 同时给出dns.linejet.com的地址,并将结果返回给域名服务器dns.company.com。
   (4)域名服务器dns.company.com 收到回应后,再发出请求解析域名的报文。
   (5)域名服务器 dns.linejet.com收到请求后,开始查询本地的记录,找到如下一条记录: A 211.120.3.12 (表示linejet.com域中域名服务器dns.linejet.com的IP地址为:211.120.3.12),并将结果返回给客户本地域名服务器dns.company.com。
   (6)客户本地域名服务器将返回的结果保存到本地缓存,同时将结果返回给客户机。
  这样就完成了一次域名解析过程,
 
       但必须要明白的一点是,从应用的角度上看,对DNS的访问是通过一个地址解析器来完成的。在Linux主机中,该解析器通过两个库函数 gethostbyname 睡gethostbyaddr来完成的。在一个应用程序请求TCP打开一个连接或使用UDP发送一个数据报之前,必须将一个主机名转换为一个IP地址。操作系统内核中的TCP/IP协议族对于DNS一点都不知道。在进行TCP连接之前,名字解析器就能通过名字服务器获取IP地址。
阅读(1907) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~