日期:2014-05-18  浏览次数:20855 次

DNS.resolve运行原理
问题如题所示。

众所周知,dns解析时需要一个DNS   Server才能完成。而从DNS.resolve配置参数看来,它并没要填Dns   Server的地方,也就是说它应该用的是系统定义的Dns   Server。

但我查看了系统的DNS   Server和WINS   Server后,发现调用这API时发送的地址并非来自这里,而是来自IE   Explorer定义的Proxy。

有谁知道这个Api是怎么运行的吗?

------解决方案--------------------
.net中Dns.Resolve 使用的是ws2_32.dll中的getaddrinfo函数.

你说的问题不太明白. :-(


Dns解析的原理不是你想想的那样, 它不会全在你自己的Dns服务器上面解析. 它会先检测本机的缓存, 没有再去 "根名字服务器 " 解析. 建议看看Dns解析原理.
------解决方案--------------------
up
------解决方案--------------------
找了篇文章,获取对你有所帮助


第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。

  第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。

  第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。

  第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。

  第五步:重复第四步,直到找到正确的纪录。

  第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。

  让我们举一个例子来详细说明解析域名的过程.假设我们的客户机如果想要访问站点:www.linejet.com , 此客户本地的域名服务器是dns.company.com , 一个根域名服务器是NS.INTER.NET , 所要访问的网站的域名服务器是dns.linejet.com,域名解析的过程如下所示:

  (1)客户机发出请求解析域名www.linejet.com的报文

  (2)本地的域名服务器收到请求后, 查询本地缓存, 假设没有该纪录, 则本地域名服务器dns.company.com则向根域名服务器NS.INTER.NET发出请求解析域名www.linejet.com

  (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 收到回应后,再发出请求解析域名www.linejet.com的报文。

  (5)域名服务器 dns.linejet.com收到请求后,开始查询本地的记录,找到如下一条记录:www.linejet.com A 211.120.3.12 (表示linejet.com域中域名服务器dns.linejet.com的IP地址为:211.120.3.12),并将结果返回给客户本地域名服务器dns.company.com。

  (6)客户本地域名服务器将返回的结果保存到本地缓存,同时将结果返回给客户机。

  这样就完成了一次域名解析过程。