今天从DNS查询上对DNS进一步理解。
使用DNS工具理解为你问我答形式,需要啥请求啥,无任何冗余。
首先了解一下DNS的报文格式(RFC1035)
DNS回答的报文格式
Header存放各标志位,12字节。
问题字段(Question)是正在查询的信息。包括名字字段,指出正在被查询的主机名。类型字段,希望被查询的类型。(类型A还是类型MX...)
回答字段(Answer)包含了对最初请求的资源记录,包含Type,value,TTL,可以同时返回多条RR(Recourse Record)资源记录,因为一个主机名可以有多个对应IP。
权威字段(Authority)包含了对应的权威服务器域名。
附加区域(Additional)包含了其他需要帮助的记录。
DNS最赞的地方在于它是完全公开,所以我们很容易找到它。先使用Dig工具探索一下http://www.douban.com吧。
使用命令发送请求
会返回以下几段信息(参考上文DNS返回报文)
返回报文
简单的分析一下
Dig默认请求A字段命令,A字段请求的是主机的IPv4地址,AAAA字段请求的是IPv6的地址
第一个Header字段返回几个关于DNS服务器的几个技术参数。
第二个问题字段记录我所发送的请求,向http://www.douban.com这个主机名发送一个A字段请求。
第三个回答字段,服务器返回http://www.douban.com的A字段记录,TTL(Time To Live)
第四个权威字段返回对应的权威服务器的域名。
Others提供了查询所需的时间,本地DNS的地址,发送端口(DNS默认53)以及报文的时间和大小。
可见并没有返回附加区域的字段,并不是所有返回字段都需要包含这些信息的。
dig一下某视频网站
比如Dig一下某全球知名的视频网站,只返回四个字段。
你可以看到回答字段返回www.xxxxxxxx.com.多了一个.
这是所有域名都包含的尾部域名即根域名.root,因为大家都有所以就省略不写了。
正如你所见,当你每次打开网页的时发生了这么多的事情,每个web资源的获取都涉及DNS查询,所以如果DNS没有设计缓存这个流量可想而知。
如果各DNS服务器并没有被缓存,来一下DNS查询是如何进行的。
使用dig +tracewww.douban.com
可以看到返回四层报文,及分层查询。
第一层
第一层会列出根域名.的所有NS(Name System)记录,也就是所有的根服务器,全球从A-M一共13台根域名服务器。
这是本地服务器向根域名服务器发送的请求,根域名服务器告诉你你要的回答在.com这个顶级域名服务器上。最先返回请求的根域名服务器将被缓存。
第二层
第二层显示.com域名的13条NS记录,本地DNS服务器向顶级域名服务器发送请求,顶级域名服务器告诉你向次级域名服务器http://douban.com请求。
第三层
次级域名服务器返回两条NS记录,以及每条对应IP地址。然后本地服务器向两个权威服务器请求http://www.douban.com的IP.
第四层
最后返回http://www.douban.com的对应IP地址。三条A记录以及两条NS记录。
整个访问按.->.com.->douban.com.->www.douban.com.解析。
DNS的返回类型:(from:
DNS域名解析中A、AAAA、CNAME、MX、NS、TXT、SRV、SOA、PTR各项记录的作用 - IT笔录itbilu.com
A记录: 将域名指向一个IPv4地址(例如:100.100.100.100),需要增加A记录
CNAME记录: 如果将域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录。这个域名一般是主机服务商提供的一个域名
MX记录: 建立电子邮箱服务,将指向邮件服务器地址,需要设置MX记录。建立邮箱时,一般会根据邮箱服务商提供的MX记录填写此记录
NS记录: 域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录
TXT记录: 可任意填写,可为空。一般做一些验证记录时会使用此项,如:做SPF(反垃圾邮件)记录
AAAA记录: 将主机名(或域名)指向一个IPv6地址(例如:ff03:0:0:0:0:0:0:c1),需要添加AAAA记录
SRV记录: 添加服务记录服务器服务记录时会添加此项,SRV记录了哪台计算机提供了哪个服务。格式为:服务的名字.协议的类型(例如:_example-server._tcp)。
SOA记录: SOA叫做起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中那一台是主服务器
PTR记录: PTR记录是A记录的逆向记录,又称做IP反查记录或指针记录,负责将IP反向解析为域名
显性URL转发记录: 将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址。例如:将www.liuht.cn显性转发到www.itbilu.com后,访问www.liuht.cn时,地址栏显示的地址为:www.itbilu.com。
隐性UR转发记录L: 将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址,隐性转发会隐藏真实的目标地址。例如:将www.liuht.cn显性转发到www.itbilu.com后,访问www.liuht.cn时,地址栏显示的地址仍然是:www.liuht.cn。
关于TTL(Time To Live)
当你发送DNS请求的时候,服务器一旦接受到你的请求,会将你的访问记录保存在缓存中,并且设定一个生存时间,如果你在这段时间继续访问相同请求,服务器会立刻给你回答,而不是像第一次那样需要寻找后再给你答案。
假设diggoogle.com
第一次返回TTL为294
后几次查询的TTL会一点点变小,单位为s。
知道TTL变为0,服务器便会重置缓存,你的请求将会被重新查找,而不是从缓存中直接返回。