DNS的几个基本概念:


一. 根域


就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。

根域服务器我们知道有13台,但是这是错误的观点。

根域服务器只是具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的技术,所以我们可以在全球设立这些IP的镜像站点,你访问到的这个IP并不是唯一的那台主机。

具体的镜像分布可以参考维基百科。这些主机的内容都是一样的

二. 域的划分

根域下来就是顶级域或者叫一级域,

有两种划分方式,一种互联网刚兴起时的按照行业性质划分的com.,net.等,一种是按国家划分的如cn.,jp.,等。

具体多少你可以自己去查,我们这里不关心。

每个域都会有域名服务器,也叫权威域名服务器。

Baidu.com就是一个顶级域名,而www.baidu.com却不是顶级域名,他是在baidu.com 这个域里的一叫做www的主机。

一级域之后还有二级域,三级域,只要我买了一个顶级域,并且我搭建了自己BIND服务器(或者其他软件搭建的)注册到互联网中,那么我就可以随意在前面多加几个域了(当然长度是有限制的)。

比如a.www.baidu.com,在这个网址中,www.baidu.com变成了一个二级域而不是一台主机,主机名是a。

三. 域名服务器

能提供域名解析的服务器,上面的记录类型可以是A(address)记录,NS记录(name server),MX(mail),CNAME等。

(详解参见博客:域名解析中A记录、CNAME、MX记录、NS记录的区别和联系)

A记录是什么意思呢,就是记录一个IP地址和一个主机名字,比如我这个域名服务器所在的域test.baidu.com,我们知道这是一个二级的域名,然后我在里面有一条A记录,记录了主机为a的IP,查到了就返回给你了。

如果我现在要想baidu.com这个域名服务器查询a.test.baidu.com,那么这个顶级域名服务器就会发现你请求的这个网址在test.baidu.com这个域中,我这里记录了这个二级域的域名服务器test.baidu.com的NS的IP。我返回给你这个地址你再去查主机为a的主机把。

这些域内的域名服务器都称为权威服务器,直接提供DNS查询服务。(这些服务器可不会做递归哦)

四.解析过程

那么我们的DNS是怎么解析一个域名的呢?


1.现在我有一台计算机,通过ISP接入了互联网,那么ISP就会给我分配一个DNS服务器,这个DNS服务器不是权威服务器,而是相当于一个代理的dns解析服务器,他会帮你迭代权威服务器返回的应答,然后把最终查到IP返回给你。

2.现在的我计算机要向这台ISPDNS发起请求查询www.baidu.com这个域名了,(经网友提醒:这里其实准确来说不是ISPDNS,而应该是用户自己电脑网络设置里的DNS,并不一定是ISPDNS。比如也有可能你手工设置了8.8.8.8)

3.ISPDNS拿到请求后,先检查一下自己的缓存中有没有这个地址,有的话就直接返回。这个时候拿到的ip地址,会被标记为非权威服务器的应答

4.如果缓存中没有的话,ISPDNS会从配置文件里面读取13个根域名服务器的地址(这些地址是不变的,直接在BIND的配置文件中),

5.然后像其中一台发起请求。

6.根服务器拿到这个请求后,知道他是com.这个顶级域名下的,所以就会返回com域中的NS记录,一般来说是13台主机名和IP。

7.然后ISPDNS向其中一台再次发起请求,com域的服务器发现你这请求是baidu.com这个域的,我一查发现了这个域的NS,那我就返回给你,你再去查。

(目前百度有4台baidu.com的顶级域名服务器)。

8.ISPDNS不厌其烦的再次向baidu.com这个域的权威服务器发起请求,baidu.com收到之后,查了下有www的这台主机,就把这个IP返回给你了,

9.然后ISPDNS拿到了之后,将其返回给了客户端,并且把这个保存在高速缓存中。



下面我们来用 nslookup 这个工具详细来说一下解析步骤:


从上图我们可以看到:

          第一行Server是:DNS服务器的主机名--210.32.32.1

          第二行Address是: 它的IP地址--210.32.32.1#53

          下面的Name是:解析的URL--    www.jsjzx.com

          Address是:解析出来的IP--112.121.162.168


但是也有像百度这样的DNS比较复杂的解析:

你会发现百度有一个cname = www.a.shifen.com  的别名。

这是怎么一个过程呢?

我们用dig工具来跟踪一下把(linux系统自带有)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Dig工具会在本地计算机做迭代,然后记录查询的过程。


第一步是向我这台机器的ISPDNS获取到根域服务区的13个IP和主机名[b-j].root-servers.net.。

第二步是向其中的一台根域服务器(Servername就是末行小括号里面的)发送www.baidu.com的查询请求,他返回了com.顶级域的服务器IP(未显示)和名称,

第三步,便向com.域的一台服务器192.33.4.12请求,www.baidu.com,他返回了baidu.com域的服务器IP(未显示)和名称,百度有四台顶级域的服务器

     【此处可以用dig @192.33.4.12 www.baidu.com查看返回的百度顶级域名服务器IP地址】。


第四步呢,向百度的顶级域服务器(202.108.22.220)请求www.baidu.com,他发现这个www有个别名,而不是一台主机,别名是www.a.shifen.com。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

按照一般的逻辑,当dns请求到别名的时候,查询会终止,而是重新发起查询别名的请求,所以此处应该返回的是www.a.shifen.com而已。

但是为什么返回a.shifen.com的这个域的NS呢?

我们可以尝试下面的这个命令:dig +trace  shifen.com 看看有什么结果。。。。。。。。


你会发现第三步时shifen.com这个顶级域的域名服务器和baidu.com这个域的域名服务器是同一台主机(即:dns.baidu.com)!


当我拿到www.baidu.com的别名www.a.shifen.com的时候,我本来需要重新到com域查找shifen.com域的NS,但是因为这两个域在同一台NS上,所以直接向本机发起了,

shifen.com域发现请求的www.a.shifen.com是属于a.shifen.com这个域的,

于是就把a.shifen.com的这个NS和IP返回,让我到a.shifen.com这个域的域名服务器上查询www.a.shifen.com。

于是我便从ns X .a.shifen.com中一台拿到了一条A记录,最终的最终也便是www.baidu.com的IP地址了.【此处也可以用dig +trace www.a.shifen.com】跟踪一下

用一个图来说明一下(图中第三步的全世界只有13台是错误的)


以下内容为在虚拟机中搭建local dns服务器得到的实验数据,纠正上述结论

在上面的分析中,我们用dig工具进行了追踪,但是dig没有继续追踪当我们从baidu.com拿到cname和ns2.a.shifen.com的IP之后的事情。

我们就所以然的下结论认为local dns会向ns2.a.shifen.com请求www.a.shifenc.om。

其实这个想法是错误,在自己的本地搭建一个local dns,抓取整个解析过程中是所有包,看看就明白拉。

实际的结果是虽然dns.baidu.com返回了a.shifen.com域的服务器地址和IP,

但是local dns并不是直接向上述返回的IP请求www.a.shifen.com,而是再一次去请求com域,得到shifen.com域的服务器(也就是baidu.com的那四台),

然后又请求www.a.shifen.com,返回a.shifen.com的域的服务器,最后才是去请求www.a.shifen.com,

虽然上面已经返回了IP,但是实验的结果就是再走一遍shifen.com域的查询。


上图就是localdns在解析www.baidu.com的抓包全过程。蓝色那条就是在收到cname和响应的a.shifen.com的域名服务器IP地址之后,继续向com域请求shifen.com。

下表是这些机器的管理单位、设置地点及最新的IP地址:

字母
IPv4地址
IPv6地址
自治系统编号(AS-number)
旧名称
运作单位
设置地点
#数量(全球性/地区性)
软件
A
198.41.0.4
2001:503:ba3e::2:30
AS19836
ns.internic.net
VeriSign
以任播技术分散设置于多处
6/0
BIND
B
192.228.79.201
(2004年1月起生效,旧IP地址为128.9.0.107)
2001:478:65::53 (not in root zone yet)
none
ns1.isi.edu
南加州大学信息科学研究所
(Information Sciences Institute, University of Southern California)
美国加州马里纳戴尔雷伊
(Marina del Rey)
0/1
BIND
C
192.33.4.12
2001:500:2::C
AS2149
c.psi.net
Cogent Communications
以任播技术分散设置于多处
6/0
BIND
D
199.7.91.13(2013年起生效,旧IP地址为128.8.10.90)
2001:500:2::D
AS27
terp.umd.edu
马里兰大学学院市分校
(University of Maryland, College Park)
美国马里兰州大学公园市
(College Park)
1/0
BIND
E
192.203.230.10
 
AS297
ns.nasa.gov
NASA
美国加州山景城
(Mountain View)
1/0
BIND
F
192.5.5.241
2001:500:2f::f
AS3557
ns.isc.org
互联网系统协会
(Internet Systems Consortium)
以任播技术分散设置于多处
2/47
BIND
G
192.112.36.4
 
AS5927
ns.nic.ddn.mil
美国国防部国防信息系统局
(Defense Information Systems Agency)
以任播技术分散设置于多处
6/0
BIND
H
128.63.2.53
2001:500:1::803f:235
AS13
aos.arl.army.mil
美国国防部陆军研究所
(U.S. Army Research Lab)
美国马里兰州阿伯丁(Aberdeen)
1/0
NSD
I
192.36.148.17
2001:7fe::53
AS29216
nic.nordu.net
瑞典奥托诺米嘉公司(Autonomica)
以任播技术分散设置于多处
36
BIND
J
192.58.128.30
(2002年11月起生效,旧IP地址为198.41.0.10)
2001:503:c27::2:30
AS26415
 
VeriSign
以任播技术分散设置于多处
63/7
BIND
K
193.0.14.129
2001:7fd::1
AS25152
 
荷兰RIPE NCC
以任播技术分散设置于多处
5/13
NSD
L
199.7.83.42
(2007年11月起生效,旧IP地址为198.32.64.12)
2001:500:3::42
AS20144
 
ICANN
以任播技术分散设置于多处
37/1
NSD
M
202.12.27.33
2001:dc3::35
AS7500
 
日本WIDE Project
以任播技术分散设置于多处
5/1
BIND
中国大陆地区内只有6组根服务器镜像(F,I(3台),J,L),在少数极端情况下(比如全球互联网出现大面积瘫痪、或者中国互联网国际出口堵塞),至少能保证国内的站点由国内的域名服务器来解析。虽然国外的用户连接到我国的网络会出现问题,但是我国可以自己解决中国境内的域名解析问题,保证国内网络正常使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

废水处理计算书 excel_废水监测数据是匿名的吗?

废水处理计算书 excelOur collective flushes help track and respond to Covid-19 and so much more. Your body waste contains harvestable compounds that can reveal your illnesses and diseases, consumption habits, and cosmetic use. Researchers gain insights from…

文件在线预览 图片 PDF Excel Word

1、前端实现pdf文件在线预览功能 方式一、pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面。在仅仅是预览pdf文件且UI要求不高的情况下可以直接通过a标签href属性实现预览 <a href"文档地址"></a> 2、word、xls、ppt文件在线预览功能 word、pp…

数据科学还是计算机科学_您应该拥有数据科学博客的3个原因

数据科学还是计算机科学“Start a Blog to cement the things you learn. When you teach what you’ve learned in the form of a blog you can see the gaps in your knowledge and fill them in” — My Manager (2019)“创建一个博客以巩固您所学到的东西。 当您以博客的形…

D3.js 加标签

条形图还可以配上实际的数值,我们通过文本元素添加数据值。 svg.selectAll("text").data(dataset).enter().append("text").text(function(d){return d;}) 通过 x 和 y 值来定位文本元素。 .attr("text-anchor", "middle").attr("…

oppo5.0以上机器(亲测有效)激活Xposed框架的教程

对于喜欢玩手机的朋友而言&#xff0c;常常会用到xposed框架以及种类繁多功能强大的模块&#xff0c;对于5.0以下的系统版本&#xff0c;只要手机能获得ROOT权限&#xff0c;安装和激活xposed框架是异常简便的&#xff0c;但随着系统版本的迭代&#xff0c;5.0以后的系统&#…

和matlab一样的轻量级

Python&#xff08;英国发音&#xff1a;/ˈpaɪθən/ 美国发音&#xff1a;/ˈpaɪθɑːn/&#xff09;, 是一种面向对象、解释型计算机程序设计语言&#xff0c;由Guido van Rossum于1989年发明&#xff0c;第一个公开发行版发行于1991年。Python是纯粹的自由软件&#xff…

熊猫分发_流利的熊猫

熊猫分发Let’s uncover the practical details of Pandas’ Series, DataFrame, and Panel让我们揭露Pandas系列&#xff0c;DataFrame和Panel的实用细节 Note to the Readers: Paying attention to comments in examples would be more helpful than going through the theo…

redis tomcat session

本机ip为192.168.1.101 1、准备测试环境 两个Tomcat 在Eclipse中新建2个Servers&#xff0c;指定对应的Tomcat&#xff0c;端口号错开。 Tomcat1&#xff08;18005、18080、18009&#xff09; Tomcat2&#xff08;28005、28080、28009&#xff09; 一个Redis Redis下载官网&…

Fiddler抓包-只抓APP的请求

from:https://www.cnblogs.com/yoyoketang/p/6582437.html fiddler抓手机app的请求&#xff0c;估计大部分都会&#xff0c;但是如何只抓来自app的请求呢&#xff1f; 把来自pc的请求过滤掉&#xff0c;因为请求太多&#xff0c;这样会找不到重要的信息了。 环境准备&#xff1…

技术分享 | 基于EOS的Dapp开发

区块链技术是当前最能挑动社会舆论神经&#xff0c;激起资本欲望的现象级技术。去中心化的价值互联&#xff0c;信用共识&#xff0c;新型组织构架&#xff0c;新的生产关系和智能合约&#xff0c;颠覆法币的发行流通体系和记账体系。这些新的技术都让人充满想象&#xff0c;充…

DOCKER windows 安装Tomcat内容

DOCKER windows安装 DOCKER windows安装 1.下载程序包2. 设置环境变量3. 启动DOCKERT4. 分析start.sh5. 利用SSH工具管理6. 下载镜像 6.1 下载地址6.2 用FTP工具上传tar包6.3 安装6.4 查看镜像6.5 运行 windows必须是64位的 1.下载程序包 安装包 https://github.com/boot2doc…

python记录日志_5分钟内解释日志记录—使用Python演练

python记录日志Making your code production-ready is not an easy task. There are so many things to consider, one of them being able to monitor the application’s flow. That’s where logging comes in — a simple tool to save some nerves and many, many hours.使…

理解 Linux 中 `ls` 的输出

理解 Linux 中 ls 的输出ls 的输出会因各 Linux 版本变种而略有差异&#xff0c;这里只讨论一般情况下的输出。 下面是来自 man page 关于 ls 的描述&#xff1a; $ man ls ls - list directory contents 列出文件夹中的内容。 但一般我们会配合着 -l 参数使用&#xff0c;将输…

锁表的进程和语句,并杀掉

查看锁表进程SQL语句1&#xff1a; select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sess where ao.object_id lo.object_id and lo.session_id sess.sid; 查看锁…

p值 t值 统计_非统计师的P值

p值 t值 统计Here is a summary of how I was taught to assess the p-value in hopes of helping some other non-statistician out there.这是关于如何教会我评估p值的摘要&#xff0c;希望可以帮助其他一些非统计学家。 P-value in Context上下文中的P值 Let’s start wit…

获取对象属性(key)

for…in方法Object.keysObject.getOwnPropertyNames关于对象的可枚举性&#xff08;enumerable&#xff09; var obj {a: 1,b: 2 } Object.defineProperty(obj, c, {value: 3,enumerable: false }) 复制代码enumerable设置为false&#xff0c;表示不可枚举&#xff0c;for…in…

github免费空间玩法

GitHub 是一个用于使用Git版本控制系统的项目的基于互联网的存取服务,GitHub于2008年2月运行。在2010年6月&#xff0c;GitHub宣布它现在已经提供可1百万项目&#xff0c;可以说非常强大。 Github虽然是一个代码仓库&#xff0c;但是Github还免费为大家提供一个免费开源Github …

用php生成HTML文件的类

目的 用PHP生成HTML文档, 支持标签嵌套缩进, 支持标签自定义属性 起因 这个东西确实也是心血来潮写的, 本来打算是输出HTML片段用的, 但后来就干脆写成了一个可以输出完整HTML的功能; 我很满意里边的实现缩进的机制, 大家有用到的可以看看p.s. 现在都是真正的前后端分离了(vue,…

在Markdown中输入数学公式

写在前面 最近想要把一些数学和编程方面的笔记记录成电子笔记&#xff0c;因为修改、插入新内容等比较方便。这里记一下在Markdown中输入数学公式的方法。 基础知识 公式与文本的区别 公式输入和文本输入属于不同的模式&#xff0c;公式中无法通过空格来控制空白&#xff0c;通…

如何不部署Keras / TensorFlow模型

While the most articles about deep learning are focusing at the modeling part, there are also few about how to deploy such models to production. Some of them say “production”, but they often simply use the un-optimized model and embed it into a Flask web…