BNS 与 DNS

5,352 阅读7分钟

DNS

什么是dns(domain name system)

常说DNS解析,其实DNS,就是一个服务,一个系统,主要是提供通过域名可查找其对应的IP地址的功能。

如何查找对应IP

首先本机要知道DNS服务器的ip地址,通过DNS服务器才能知道某个域名对应的ip是什。DNS服务器有可能是动态的,只有每次上网的时候由网关分配,也有可能事先就指定了固定地址。在*nix系统中,DNS服务器的IP地址在/etc/resolv.conf中文件中。

分级查询

我们知道域名是有级别之分,分位根域名、顶级域名、次级域名、三级域名等等。也有人习惯了,直接说一级域名(对应顶级域名),二级域名(对应次级域名)。通过域名的级别来一层一层的查询对应的ip地址。

所有的域名,例如www.baidu.com,这是我们常用的域名,但是他真正的域名表现应该是www.baidu.com.root。 .root就是根域名,不过所有的域名的根域名相同,故而省略。

每一级的域名都存在一个NS(Name server)记录,这个记录保存着下一级的域名,同时返回对应的ip地址。举个例子:

1、从"根域名服务器"查到"顶级域名服务器"的NS记录和IP地址记录
2、从"顶级域名服务器"查到"次级域名服务器"的NS记录和IP
地址记录
3、从"次级域名服务器"查出"下一级"的IP地址

通过指令dig +trace www.baidu.com我们来看下百度的ip地址查找路径

(1)首先看下本机的DNS服务器地址,vim /etx/resolv.conf

(2)在终端输入指令后,截取第一段返回内容,如下图,发现最新请求的是"."这层域名,也就是根域名,前面讲过,正常域名还存在一个根域名.root,在查询时,会将其所写成www.baidu.com.,故而第一层就直接查询".", 目前全世界一供只有13个根域名服务器,分别从a~m, 发送请求到对应的ip地址如图,127.22.1.253,和resolv.conf配置文件一致

(3) 根域名中NS记录着com.的记录,如下图。这里有个策略,当前服务器往往会缓存第一个返回的服务器ip地址,并且后续请求将只请求当前缓存的ip地址

(4) 接下来通过上一级记录的ip地址去查询baidu.com.的ip地址

(5) 最后通过上一级域名记录的ip地址去查询www.baidu.com.的ip地址,这里我们发现www.baidu.com.记录的是CANME而非NS,所谓CNAME,从前端来讲,类似重定向的概念

CNAME:规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转,详见下文。

通俗讲,我们查询www.baidu.com.的域名,实际上返回的是www.a.shifen.com.的域名,这样设置的好处就是当我们需要变更www.baidu.com的ip地址时候,只需要修改www.a.shifen.com这个域名即可,而用户所要访问的www.baidu.com的域名就不需要修改了

BNS

什么是BNS

Blockstack Naming Service(BNS)是一个网络系统,它将名称绑定到脱链(off-chain)状态,而无需依赖任何中央控制点。它通过将其控制平面消息的日志嵌入到比特币之类的公共区块链中来做到这一点。

BNS中的名称具有三个属性:

1、名称是全局唯一的。该协议不允许名称冲突,并且所有行为良好的节点都将给定名称解析为相同状态。即相同名称的key在所有节点上有同样的value。
2、名称是由人赋予、命名的。每个名称均由其创建者选择。
3、名称具有很强的所有权。只有名称的所有者可以更改其解析状态。具体来说,名称拥有一个或多个ECDSA私钥。

在内部,BNS节点实现一个复制而来数据库。每个BNS节点都会使其自己与世界上所有其他节点保持同步,因此,一个BNS节点上的查询在其他节点上将是相同的。 BNS节点允许名称所有者将最多40Kb的链下状态绑定到其名称,该名称将通过Atlas网络复制到所有BNS节点。

BNS节点从底层区块链中提取名称数据库日志(Blockstack Core当前使用比特币,并且过去曾使用Namecoin)。 BNS使用区块链为系统建立共享的“基础事实”:只要两个节点对区块链具有相同的视图,则它们将建立相同的数据库。

操作BNS对于开发人员而言,读取其名称状态既快速又代价小,而写入名称状态是很慢又代价昂贵。这是因为注册和修改名称需要将一次或多次交易发送到所在的区块链上,并且BNS节点直到得到充分确认后才会对其进行处理。用户和开发人员需要获取并花费必要的加密货币(例如比特币等虚拟货币)来发送每一次的BNS交易。

BNS的作用

我们在日常生活中依赖命名系统,它们在许多不同的应用程序中都扮演着至关重要的角色。例如,当您在社交媒体上查找朋友时,您正在使用平台的命名服务将他们的名字解析为他们的个人资料。当您查找网站时,您正在使用域名服务将主机名解析为其主机的IP地址。签出Git分支时,您正在使用Git客户端将分支名称解析为提交哈希。在密钥服务器上查找某人的PGP密钥时,您正在将其密钥ID解析为他们的公共密钥。

目前市场上常见的names系统,往往也具备这bns这样3中属性的系统体系,但是往往在使用时发现并不能保证1.名称在全球范围内是唯一的,2.名称具有人类意义,3.名称具有很强的所有权全部生效.你在查看那些用例时候,则会发现它们每个都仅保证其中两个属性。

而BNS名称具有所有三个属性,而这些都不是问题。这使其成为构建各种网络应用程序的强大工具。使用BNS,我们可以做以下事情和更多事情: 1、建立域名服务,主机名不能被劫持。
2、建立社交媒体平台,用户名不会被骗子窃取。
3、构建存储库分支不冲突的版本控制系统。
4、构建公钥基础设施,让用户很容易发现和记住彼此的密钥。

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地址是否迁移等等。