DNS详解(二)

一、DNS资源记录(这一节来源于《计算机网络:自顶向下方法》)

资源记录是域名与IP映射信息在DNS服务器中存储的方式,即服务器如何组织、存放、管理这些信息。他是一个包含了下列字段的4元组:

(Name, Value, Type, TTL)

TTL是该记录的生存时间,它决定了资源记录什么时候应当从缓存中删除。Name和Value的值取决于Type:

(1)Type = A,则Name是主机名,Value是对应的IP。这是标准的主机名到IP的映射,显然最底层的权威服务器中充满这种类型的记录。

(2)Type = NS, 则Name是域,而Value是管理该域的DNS服务器的主机名,NS记录后面一般要跟着一条A记录以之处该DNS服务器的主机名的IP。高级别的权威服务器存储的一般是这种类型的记录。

(3)Type = CNAME,则Name是主机的别名,Value是对应的规范主机名。

(4)Type = MX,则Value是别名为Name的邮件服务器的规范主机名

通过使用MX记录,一个公司的邮件服务器和其他服务器可以使用相同别名。为了获得邮件服务器的规范主机名,DNS客户机应当请求一条MX记录;而为了获得其他访问其他的规范主机名,DNS客户机应当请求一条CNAME记录。

二、DNS协议

DNS协议是应用层协议,运行在UDP之上,使用53号端口。改天会写一篇文章分析一下什么是所谓的应用层协议,这里可以简单的把DNS协议理解为一种规定:规定了支撑DNS的应用层软件通信的方式以及对应的动作。通信的方式就是所谓的报文。DNS只有查询和回答报文,并且它们的格式是一样的。如下图:

一条DNS报文被分成几个字段,每个字段都有不同的功能,只说比较重要的几个:

(1)标志字段的“权威”标志位:如果一条回答正好是请求域名的权威服务器,那么该标志就会被设置成1(我也不确定,但不是1就是0)。

(2)标志字段的“递归”标志位:查询动作有两种类型,即迭代查询还递归查询。打个比方,甲向乙问路,乙虽然不知道,但是他会自己去问丙然后告诉甲,这就是递归;而如果乙不知道就对甲说你自己去问丙,然后甲从丙那里得到答案,这就是迭代。一般来讲,客户端向本地缓存服务器发起的查询都是递归的,而本地缓存服务器向权威服务器发起的查询是迭代的。

(2)问题区域:这里存放正在进行的查询,包括要查询的域名以及需要的记录类型。

三、DNS查询详细过程

在Linux系统上,可以直接使用nslookup命令解析一个域名的IP,如:nslookup www.baidu.com, 就会给出这个域名的IP。

我在终端使用dig命令来追踪一下解析过程,如下图:

图中,127.0.1.1是我的本地缓存服务器的IP,这个服务器会配置根域名服务器的IP,这几个IP基本是不会变化的;

有了根域名服务器的IP,向其中的一个(本例是g.root-servers.net.)发起查询,得到的回答是com顶级域DNS服务器的IP;

向其中一个com服务器发起查询(k.gtld-servers.net),得到baidu.com二级域名的DNS服务器IP;

向其中一个百度的服务器发起查询(ns4.baidu.com),得到的是一个规范名bk.n.shifen.com.  也就是说,baike.baidu.com只是一个别名;

于是只好再次使用dig,参数改成bk.n.shifen.com.  然后就能得到最终答案(自己动一下手吧)。

然后就是几个没有搞清楚的问题:

(1)根域名服务器里面存放的只是顶级域名的DNS服务器 的IP,但顶级域名实际上数量相对较少,所以其存储量应该不大。但是根域名服务器却做成一个系统。共有13个IP,每个IP下都有至少几十台服务器,全球大概有1000多台。为什么需要这么多?不完全出于备份的目的吧?

(2)入网的主机都会分配IP,DNS服务器本身也不例外。在第4步中,顶级域的DNS服务器一般存放的信息仍然是其子域名的DNS服务器的IP,而不会是某个非DNS服务器的IP,即只存放NS记录以及对应的DNS服务器的A记录,这在资源记录中有提到。但是我还不是很确定。

(3)不同com顶级域的DNS服务器存放的内容一致吗?如果不一致,那么到底该向哪台com服务器发送请求呢?如果一样的话,第四步中该向哪一个IP发送请求呢?选择离自己“最近”的?

(3)本地缓存服务器每次从权威服务器那里得到应答都会保存记录(似乎所有的DNS服务器都会这么做),比如刚才执行dig +trace baike.baidu.com的时候,会保存从根域名服务器到百度自己的DNS服务器的IP,那么再次执行dig +trace bk.n.shifen.com时,它会从根域名服务器开始查询呢还是直接问百度的DNS服务器?

后来查到一些资料说,根域名一般是可以绕过的,例子就是DDos攻击,这些攻击本来是指向根域名服务器的,但是本地缓存中已经有了顶级域IP的缓存,于是攻击直接绕过根域名服务器而向顶级域服务器发起。不过顶级域是否也能被绕过呢?本地缓存服务器如何控制以及实现查询的深度呢?语言识别?智能匹配?

时间: 2024-08-29 17:18:25

DNS详解(二)的相关文章

05-Linux中DNS详解(二)

接"04-Linux中DNS详解(一)" 六.在Linux上测试域名解析1.先检查DNS是否设置正确 cat /etc/resolv.conf [resolv.conf] # Generated by NetworkManager nameserver 192.168.80.100 2.使用nslookup来测试域名解析a.常规解析法 nslookup wwww.zhangyujia.cn ----- Server: 192.168.80.100 Address: 192.168.80

UINavigationController详解二(转)页面切换和SegmentedController

原文出自:http://blog.csdn.net/totogo2010/article/details/7682433,非常感谢. 1.RootView 跳到SecondView 首先我们需要新一个View.新建SecondView,按住Command键然后按N,弹出新建页面,我们新建SecondView 2.为Button 添加点击事件,实现跳转 在RootViewController.xib中和RootViewController.h文件建立连接 在RootViewController.m

Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

[Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.Android 布局学习之——LinearLayout的layout_weight属性   4.Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline    Layout Parameters(布局参数): 在XML文件中,我们经常看到类似与lay

CSS3中的弹性流体盒模型技术详解(二)

在上一篇文章<CSS3中的弹性流体盒模型技术详解(一)>里,我给大家列出了,从css1到css3各版本中盒子模型的基本元素.本篇我会把余下的属性进行详细讲解. box-pack 作用:用来规定子元素在盒子内的水平空间分配方式 box-pack 语法:box-pack: start | end | center | justify; start 对于正常方向的框,首个子元素的左边缘吸附在盒子的左边框显示 对于相反方向的框,最后子元素的右边缘吸附在盒子的右边框显示 end 对于正常方向的框,最后子

php学习之道:WSDL详解(二)

3.定义服务使用的逻辑消息 当服务的操作被调用时,服务被定义为消息交换.在wsdl文档中,这些消息被定义message元素.这些消息由称之为part元素的部分组成. 一个服务的操作,通过指定逻辑消息的方式来定义.当操作被调用时,逻辑消息被交换.(也就是说,逻辑消息代表了服务的操作)这些逻辑消息,将在网络上传输的数据定义为xml文档.他包含了所有的参数,这些参数是方法调用的一部分.(也就是说,逻辑消息里的参数,是操作对应方法的参数集合) 消息和参数列表:每一个被服务暴露的操作能且仅能有一个输入消息

LinearLayout详解二:从其父类View说起

这个View类说来就话长了,但我们又不得不说,要说呢,就得说的彻底,要让大家看得一清二楚,明明白白.所以我们就从源代码角度来看一个view是如何被加载的吧. 如果大家不知道怎么下载android的源代码,或者说懒得去下载(因为源代码确实比较大,大概有10G)的话,教大家几个取巧的办法: 1.直接在google中输入"android view.java"即可.这种方法成功率非常高,一般android的比较重要的类都能搜到. 2.给大家提供一个人家用于放源码的的git:[email pro

Centos 6.5 DNS详解

Centos 6.5  DNS详解 为什么会出现DNS?为了让你上网浏览网页时不必直接输入IP地址而是输入更易记忆和理解的主机名字 主机间通信依靠IP地址.计算机诞生之初是没有DNS概念的,当时的主机数量寥寥无几,主机通信依靠的是写在host文件中的主机名到IP地址的对应关系来查询IP地址,然后使用IP进行通信.但是随着时间的推移,主机数量急剧增长,host文件的弊端显露无疑.此时急需一种高效方便的解决方案.DNS应时而生.是的DNS就是用于主机名到IP的解析的. 下面结合下图分析dns解析过程

jquery validate 详解二

原文:http://blog.sina.com.cn/s/blog_608475eb0100h3h2.html 这里只是第二篇,前面的内容请参阅上一篇 五.常用方法及注意问题 1.用其他方式替代默认的SUBMIT 1 $().ready(function() { 2 $("#signupForm").validate({ 3 submitHandler:function(form){ 4 alert("submitted"); 5 form.submit(); 6

cocos2dx 启动过程详解二:内存管理和回调

在上一篇的第二部分中,我们有一句代码待解释的: // Draw the Scene void CCDirector::drawScene(void) { -- //tick before glClear: issue #533 if (! m_bPaused) //暂停 { m_pScheduler->update(m_fDeltaTime);   //待会会解释这里的内容 } -- } 这里是一个update函数,经常会写像this->schedule(schedule_selector(X

PopUpWindow使用详解(二)——进阶及答疑

相关文章:1.<PopUpWindow使用详解(一)——基本使用>2.<PopUpWindow使用详解(二)——进阶及答疑> 上篇为大家基本讲述了有关PopupWindow的基本使用,但还有几个相关函数还没有讲述,我们这篇将着重看看这几个函数的用法并结合源码来讲讲具体原因,最后是有关PopupWindow在使用时的疑问,给大家讲解一下. 一.常用函数讲解 这段将会给大家讲下下面几个函数的意义及用法,使用上篇那个带背景的例子为基础. [java] view plain copy pu