常说DNS解析,其实DNS,就是一个服务,一个系统,主要是提供经过域名可查找其对应的IP地址的功能。前端
首先本机要知道DNS服务器的ip地址,经过DNS服务器才能知道某个域名对应的ip是什。DNS服务器有多是动态的,只有每次上网的时候由网关分配,也有可能事先就指定了固定地址。在*nix系统中,DNS服务器的IP地址在/etc/resolv.conf中文件中。数据库
咱们知道域名是有级别之分,分位根域名、顶级域名、次级域名、三级域名等等。也有人习惯了,直接说一级域名(对应顶级域名),二级域名(对应次级域名)。经过域名的级别来一层一层的查询对应的ip地址。vim
全部的域名,例如www.baidu.com,这是咱们经常使用的域名,可是他真正的域名表现应该是www.baidu.com.root。 .root就是根域名,不过全部的域名的根域名相同,故而省略。缓存
每一级的域名都存在一个NS(Name server)记录,这个记录保存着下一级的域名,同时返回对应的ip地址。举个例子:bash
一、从"根域名服务器"查到"顶级域名服务器"的NS记录和IP地址记录
二、从"顶级域名服务器"查到"次级域名服务器"的NS记录和IP
地址记录
三、从"次级域名服务器"查出"下一级"的IP地址
复制代码
经过指令dig +trace www.baidu.com咱们来看下百度的ip地址查找路径服务器
(1)首先看下本机的DNS服务器地址,vim /etx/resolv.conf网络
(3) 根域名中NS记录着com.的记录,以下图。这里有个策略,当前服务器每每会缓存第一个返回的服务器ip地址,而且后续请求将只请求当前缓存的ip地址dom
(4) 接下来经过上一级记录的ip地址去查询baidu.com.的ip地址工具
CNAME:规范名称记录(Canonical Name),返回另外一个域名,即当前查询的域名是另外一个域名的跳转,详见下文。区块链
通俗讲,咱们查询www.baidu.com.的域名,实际上返回的是www.a.shifen.com.的域名,这样设置的好处就是当咱们须要变动www.baidu.com的ip地址时候,只须要修改www.a.shifen.com这个域名便可,而用户所要访问的www.baidu.com的域名就不须要修改了
Blockstack Naming Service(BNS)是一个网络系统,它将名称绑定到脱链(off-chain)状态,而无需依赖任何中央控制点。它经过将其控制平面消息的日志嵌入到比特币之类的公共区块链中来作到这一点。
BNS中的名称具备三个属性:
一、名称是全局惟一的。该协议不容许名称冲突,而且全部行为良好的节点都将给定名称解析为相同状态。即相同名称的key在全部节点上有一样的value。
二、名称是由人赋予、命名的。每一个名称均由其建立者选择。
三、名称具备很强的全部权。只有名称的全部者能够更改其解析状态。具体来讲,名称拥有一个或多个ECDSA私钥。
在内部,BNS节点实现一个复制而来数据库。每一个BNS节点都会使其本身与世界上全部其余节点保持同步,所以,一个BNS节点上的查询在其余节点上将是相同的。 BNS节点容许名称全部者将最多40Kb的链下状态绑定到其名称,该名称将经过Atlas网络复制到全部BNS节点。
BNS节点从底层区块链中提取名称数据库日志(Blockstack Core当前使用比特币,而且过去曾使用Namecoin)。 BNS使用区块链为系统创建共享的“基础事实”:只要两个节点对区块链具备相同的视图,则它们将创建相同的数据库。
操做BNS对于开发人员而言,读取其名称状态既快速又代价小,而写入名称状态是很慢又代价昂贵。这是由于注册和修更名称须要将一次或屡次交易发送到所在的区块链上,而且BNS节点直到获得充分确认后才会对其进行处理。用户和开发人员须要获取并花费必要的加密货币(例如比特币等虚拟货币)来发送每一次的BNS交易。
咱们在平常生活中依赖命名系统,它们在许多不一样的应用程序中都扮演着相当重要的角色。例如,当您在社交媒体上查找朋友时,您正在使用平台的命名服务将他们的名字解析为他们的我的资料。当您查找网站时,您正在使用域名服务将主机名解析为其主机的IP地址。签出Git分支时,您正在使用Git客户端将分支名称解析为提交哈希。在密钥服务器上查找某人的PGP密钥时,您正在将其密钥ID解析为他们的公共密钥。
目前市场上常见的names系统,每每也具有这bns这样3中属性的系统体系,可是每每在使用时发现并不能保证1.名称在全球范围内是惟一的,2.名称具备人类意义,3.名称具备很强的全部权所有生效.你在查看那些用例时候,则会发现它们每一个都仅保证其中两个属性。
而BNS名称具备全部三个属性,而这些都不是问题。这使其成为构建各类网络应用程序的强大工具。使用BNS,咱们能够作如下事情和更多事情: 一、创建域名服务,主机名不能被劫持。
二、创建社交媒体平台,用户名不会被骗子窃取。
三、构建存储库分支不冲突的版本控制系统。
四、构建公钥基础设施,让用户很容易发现和记住彼此的密钥。
BNS名称被命名为一个全局名称层次结构。在这个层次结构中有三个不一样的与命名相关的层:
Namespaces:这些是层次结构中的顶级名称。与BNS命名空间相似的是DNS顶级域。现有的BNS命名空间包括.id,.podcast和.helloworld。全部其余名称仅属于一个名称空间。任何人均可以建立一个名称空间,可是为了使该名称空间得以保留,必须启动该名称空间,以便任何人均可以在其中注册名称。可是命名空间不归其建立者全部。
BNS names: 这些names是其记录直接存储在区块链上的。这些名称的全部权和状态经过发送区块链交易来控制。示例名称包括authenticated.podcast和muneeb.id。任何人均可以建立一个BNS名称,只要包含它的名称空间已经存在便可。 BNS名称的状态一般存储在Atlas网络中。
BNS subdomains:虽然这些子域是记录存储在链外的名称,但它们共同锚定在区块链上。这些名称的全部权和状态也是存在于Atlas网络中。虽然BNS子域名称拥有着单独的私钥,但BNS名称所拥有者必须广播其子域状态。子域示例包括jude.personal.id和podsaveamerica.verified.podcast。与BNS命名空间和名称不一样,BNS子域的状态不是区块链共识规则的一部分,而是独立的。
BNS比如一个全球性的localstorage,存储着惟一的名称,对应着全部区块链中相同的状态,他能够记录很是多东西的状态,就比如上文提到的DNS,例如某个某个域名是否有效,ip地址是否迁移等等。