让别人做网站需要注意什么问题,长尾关键词挖掘网站,产品建站工具,黑客入侵别人网站做seo阮老师的作品#xff0c;非常精彩#xff0c;转载#xff01; DNS 是互联网核心协议之一。不管是上网浏览#xff0c;还是编程开发#xff0c;都需要了解一点它的知识。 本文详细介绍DNS的原理#xff0c;以及如何运用工具软件观察它的运作。我的目标是#xff0c;读完此… 阮老师的作品非常精彩转载 DNS 是互联网核心协议之一。不管是上网浏览还是编程开发都需要了解一点它的知识。 本文详细介绍DNS的原理以及如何运用工具软件观察它的运作。我的目标是读完此文后你就能完全理解DNS。 一、DNS 是什么 DNS Domain Name System 的缩写的作用非常简单就是根据域名查出IP地址。你可以把它想象成一本巨大的电话本。 举例来说如果你要访问域名math.stackexchange.com首先要通过DNS查出它的IP地址是151.101.129.69。 如果你不清楚为什么一定要查出IP地址才能进行网络通信建议先阅读我写的《互联网协议入门》。 二、查询过程 虽然只需要返回一个IP地址但是DNS的查询过程非常复杂分成多个步骤。 工具软件dig可以显示整个查询过程。 $ dig math.stackexchange.com 上面的命令会输出六段信息。 第一段是查询参数和统计。 第二段是查询内容。 上面结果表示查询域名math.stackexchange.com的A记录A是address的缩写。 第三段是DNS服务器的答复。 上面结果显示math.stackexchange.com有四个A记录即四个IP地址。600是TTL值Time to live 的缩写表示缓存时间即600秒之内不用重新查询。 第四段显示stackexchange.com的NS记录Name Server的缩写即哪些服务器负责管理stackexchange.com的DNS记录。 上面结果显示stackexchange.com共有四条NS记录即四个域名服务器向其中任一台查询就能知道math.stackexchange.com的IP地址是什么。 第五段是上面四个域名服务器的IP地址这是随着前一段一起返回的。 第六段是DNS服务器的一些传输信息。 上面结果显示本机的DNS服务器是192.168.1.253查询端口是53DNS服务器的默认端口以及回应长度是305字节。 如果不想看到这么多内容可以使用short参数。 $ dig short math.stackexchange.com151.101.129.69151.101.65.69151.101.193.69151.101.1.69 上面命令只返回math.stackexchange.com对应的4个IP地址即A记录。 三、DNS服务器 下面我们根据前面这个例子一步步还原本机到底怎么得到域名math.stackexchange.com的IP地址。 首先本机一定要知道DNS服务器的IP地址否则上不了网。通过DNS服务器才能知道某个域名的IP地址到底是什么。 DNS服务器的IP地址有可能是动态的每次上网时由网关分配这叫做DHCP机制也有可能是事先指定的固定地址。Linux系统里面DNS服务器的IP地址保存在/etc/resolv.conf文件。 上例的DNS服务器是192.168.1.253这是一个内网地址。有一些公网的DNS服务器也可以使用其中最有名的就是Google的8.8.8.8和Level 3的4.2.2.2。 本机只向自己的DNS服务器查询dig命令有一个参数显示向其他DNS服务器查询的结果。 $ dig 4.2.2.2 math.stackexchange.com 上面命令指定向DNS服务器4.2.2.2查询。 四、域名的层级 DNS服务器怎么会知道每个域名的IP地址呢答案是分级查询。 请仔细看前面的例子每个域名的尾部都多了一个点。 比如域名math.stackexchange.com显示为math.stackexchange.com.。这不是疏忽而是所有域名的尾部实际上都有一个根域名。 举例来说www.example.com真正的域名是www.example.com.root简写为www.example.com.。因为根域名.root对于所有域名都是一样的所以平时是省略的。 根域名的下一级叫做顶级域名top-level domain缩写为TLD比如.com、.net再下一级叫做次级域名second-level domain缩写为SLD比如www.example.com里面的.example这一级域名是用户可以注册的再下一级是主机名host比如www.example.com里面的www又称为三级域名这是用户在自己的域里面为服务器分配的名称是用户可以任意分配的。 总结一下域名的层级结构如下。 主机名.次级域名.顶级域名.根域名# 即host.sld.tld.root 五、根域名服务器 DNS服务器根据域名的层级进行分级查询。 需要明确的是每一级域名都有自己的NS记录NS记录指向该级域名的域名服务器。这些服务器知道下一级域名的各种记录。 所谓分级查询就是从根域名开始依次查询每一级域名的NS记录直到查到最终的IP地址过程大致如下。 从根域名服务器查到顶级域名服务器的NS记录和A记录IP地址 从顶级域名服务器查到次级域名服务器的NS记录和A记录IP地址 从次级域名服务器查出主机名的IP地址 仔细看上面的过程你可能发现了没有提到DNS服务器怎么知道根域名服务器的IP地址。回答是根域名服务器的NS记录和IP地址一般是不会变化的所以内置在DNS服务器里面。 下面是内置的根域名服务器IP地址的一个例子。 上面列表中列出了根域名.root的三条NS记录A.ROOT-SERVERS.NET、B.ROOT-SERVERS.NET和C.ROOT-SERVERS.NET以及它们的IP地址即A记录198.41.0.4、192.228.79.201、192.33.4.12。 另外可以看到所有记录的TTL值是3600000秒相当于1000小时。也就是说每1000小时才查询一次根域名服务器的列表。 目前世界上一共有十三组根域名服务器从A.ROOT-SERVERS.NET一直到M.ROOT-SERVERS.NET。 六、分级查询的实例 dig命令的trace参数可以显示DNS的整个分级查询过程。 $ dig trace math.stackexchange.com 上面命令的第一段列出根域名.的所有NS记录即所有根域名服务器。 根据内置的根域名服务器IP地址DNS服务器向所有这些IP地址发出查询请求询问math.stackexchange.com的顶级域名服务器com.的NS记录。最先回复的根域名服务器将被缓存以后只向这台服务器发请求。 接着是第二段。 上面结果显示.com域名的13条NS记录同时返回的还有每一条记录对应的IP地址。 然后DNS服务器向这些顶级域名服务器发出查询请求询问math.stackexchange.com的次级域名stackexchange.com的NS记录。 上面结果显示stackexchange.com有四条NS记录同时返回的还有每一条NS记录对应的IP地址。 然后DNS服务器向上面这四台NS服务器查询math.stackexchange.com的主机名。 上面结果显示math.stackexchange.com有4条A记录即这四个IP地址都可以访问到网站。并且还显示最先返回结果的NS服务器是ns-463.awsdns-57.comIP地址为205.251.193.207。 七、NS 记录的查询 dig命令可以单独查看每一级域名的NS记录。 $ dig ns com
$ dig ns stackexchange.com short参数可以显示简化的结果。 $ dig short ns com
$ dig short ns stackexchange.com 八、DNS的记录类型 域名与IP之间的对应关系称为记录record。根据使用场景记录可以分成不同的类型type前面已经看到了有A记录和NS记录。 常见的DNS记录类型如下。 1 A地址记录Address返回域名指向的IP地址。 2 NS域名服务器记录Name Server返回保存下一级域名信息的服务器地址。该记录只能设置为域名不能设置为IP地址。 3MX邮件记录Mail eXchange返回接收电子邮件的服务器地址。 4CNAME规范名称记录Canonical Name返回另一个域名即当前查询的域名是另一个域名的跳转详见下文。 5PTR逆向查询记录Pointer Record只用于从IP地址查询域名详见下文。 一般来说为了服务的安全可靠至少应该有两条NS记录而A记录和MX记录也可以有多条这样就提供了服务的冗余性防止出现单点失败。 CNAME记录主要用于域名的内部跳转为服务器配置提供灵活性用户感知不到。举例来说facebook.github.io这个域名就是一个CNAME记录。 $ dig facebook.github.io...;; ANSWER SECTION:facebook.github.io. 3370 IN CNAME github.map.fastly.net.github.map.fastly.net. 600 IN A 103.245.222.133 上面结果显示facebook.github.io的CNAME记录指向github.map.fastly.net。也就是说用户查询facebook.github.io的时候实际上返回的是github.map.fastly.net的IP地址。这样的好处是变更服务器IP地址的时候只要修改github.map.fastly.net这个域名就可以了用户的facebook.github.io域名不用修改。 由于CNAME记录就是一个替换所以域名一旦设置CNAME记录以后就不能再设置其他记录了比如A记录和MX记录这是为了防止产生冲突。举例来说foo.com指向bar.com而两个域名各有自己的MX记录如果两者不一致就会产生问题。由于顶级域名通常要设置MX记录所以一般不允许用户对顶级域名设置CNAME记录。 PTR记录用于从IP地址反查域名。dig命令的-x参数用于查询PTR记录。 $ dig -x 192.30.252.153...;; ANSWER SECTION:153.252.30.192.in-addr.arpa. 3600 IN PTR pages.github.com. 上面结果显示192.30.252.153这台服务器的域名是pages.github.com。 逆向查询的一个应用是可以防止垃圾邮件即验证发送邮件的IP地址是否真的有它所声称的域名。 dig命令可以查看指定的记录类型。 $ dig a github.com
$ dig ns github.com
$ dig mx github.com 九、其他DNS工具 除了dig还有一些其他小工具也可以使用。 1host 命令 host命令可以看作dig命令的简化版本返回当前请求域名的各种记录。 $ host github.comgithub.com has address 192.30.252.121github.com mail is handled by 5 ALT2.ASPMX.L.GOOGLE.COM.github.com mail is handled by 10 ALT4.ASPMX.L.GOOGLE.COM.github.com mail is handled by 10 ALT3.ASPMX.L.GOOGLE.COM.github.com mail is handled by 5 ALT1.ASPMX.L.GOOGLE.COM.github.com mail is handled by 1 ASPMX.L.GOOGLE.COM.$ host facebook.github.comfacebook.github.com is an alias for github.map.fastly.net.github.map.fastly.net has address 103.245.222.133 host命令也可以用于逆向查询即从IP地址查询域名等同于dig -x ip。 $ host 192.30.252.153153.252.30.192.in-addr.arpa domain name pointer pages.github.com. 2nslookup 命令 nslookup命令用于互动式地查询域名记录。 $ nslookup facebook.github.io
Server: 192.168.1.253Address: 192.168.1.253#53Non-authoritative answer:facebook.github.io canonical name github.map.fastly.net.Name: github.map.fastly.net
Address: 103.245.222.133 3whois 命令 whois命令用来查看域名的注册情况。 $ whois github.com 转自http://www.ruanyifeng.com/blog/2016/06/dns.html 本文转自布拉君君 51CTO博客原文链接http://blog.51cto.com/5148737/1978502如需转载请自行联系原作者