TON:电报开放网络。 第 1 部分:简介、网络层、ADNL、DHT、覆盖网络

TON:电报开放网络。 第 1 部分:简介、网络层、ADNL、DHT、覆盖网络

两周以来,Runet 一直在对 Telegram 和 Roskomnadzor 无情且无情的封锁的情况进行喧嚣。 弹跳冒犯了很多人,但所有这些都是 Geektimes 上帖子的主题。 我对其他事情感到惊讶 - 我仍然没有看到关于计划在 Telegram - Telegram Open Network 基础上发布的 TON 网络 Habré 的任何分析。 我想弥补这个缺陷,因为那里有一些值得研究的东西——尽管缺乏官方声明。

让我提醒您,有传言称 Telegram 已经发起了一次非常大规模的封闭式 ICO,已经筹集到了令人难以置信的巨额资金。 预计 Gram 自己的加密货币将于今年推出 - 每个 Telegram 用户将自动拥有一个钱包,这本身就比其他加密货币创造了显着优势。

不幸的是,由于没有官方声明,我只能进一步从 来源不明的文件,我立即警告你。 当然,这可能是一个非常巧妙的伪造,但也有可能这是未来系统的真实白皮书,由尼古拉·杜罗夫(Nikolai Durov)撰写(可能是由其中一位投资者泄露的)。 但就算是假的,也不会有人禁止我们研究和讨论吧?

这份文件说了什么? 我将尝试用我自己的话重述它,接近文本,但用俄语并且更人性化一些(尼古拉原谅我倾向于进入形式数学)。 请记住,即使这是真实的,这也只是系统的草稿描述,很可能会在公开发布时发生变化。

我们了解到,除了加密货币之外,还有更多值得期待的东西。 让我们按顺序来吧。

  • TON Blockchain。 这是整个系统的基础。 如果你不知道它是什么 блокчейн — 我建议找出来,因为这里会有很多区块链。 区块链彼此嵌套,实际上是碎片化的,甚至是“垂直”的区块链在其他区块链的区块内。 还有一些听起来很酷的术语,比如 即时超立方体路由 и 无限分片范式,但稍后会详细介绍。 当然,还有权益证明和智能合约。
  • TON P2P 网络。 系统将在此基础上构建对等网络。 故事的这一部分将首先讨论她。
  • 吨存储。 文件存储,无论区块链如何,都将构建在上述点对点网络上。 可以与 torrent 进行比较。
  • TON代理。 这项服务的目的是增加网络参与者的匿名性。 任何数据包都不能直接发送,而是通过带有额外加密的中间隧道(如 I2P 或 TOR)发送。
  • 吨双氢睾酮。 用于存储任意值的分布式哈希表。 它也是建立在上面的 TON网络 (但同时它被他使用)并帮助 吨存储 找到“分布”节点,以及 TON代理 — 中间中继器。 但应该注意的是,与区块链不同,这个哈希表不是一个安全存储——你不能在其中存储重要信息。
  • TON服务。 定制服务平台。 本质上,这是一个建立在上述一切之上的新互联网。 数据交换 - 通过 TON网络/TON代理,逻辑就在智能合约中 TON Blockchain。 以及带有相当熟悉的 URL 的界面。
  • 吨 DNS。 由于我们谈论的是熟悉的 URL,因此我们还需要一个将它们转换为 256 位地址(帐户、合约、服务和节点)的转换器。
  • TON付款。 这就是金钱问题发挥作用的地方。 而且它不仅会是 ——与以太币一样,任何“代币”都是可能的; 克将只是这里的“默认”货币。

这是描述 TON 的“接地”层的第一部分——它的网络部分,构建在传统协议之上。 在下一部分中,我们将讨论“软”——区块链,它将由下面描述的系统支持。 因此,我的复述顺序与上述文档中使用的顺序有些不同(立即从抽象层次开始)。

基本概念

TL (键入语言)。 它是任意数据结构的抽象二进制格式。 它用于 Telegram 协议中,并将在 TON 中积极使用。 如果你想详细了解一下—— 这是他的描述.

哈希 (哈希)。 将任意数据结构不可逆地转换为固定长度的单个数字的函数。 在整个文档中,我们讨论该功能 SHA-256.

网络节点 (节点)。 节点是确保系统运行的软件。 特别是,假设每个 Telegram 客户端应用程序都将包含一个 TON 节点。 在低层,节点拥有 IPv4/IPv6 地址并使用 UDP 协议进行通信;在高层,它们拥有 摘要地址 并实现 ADNL 协议(关于抽象地址和 ADNL - 见下文)。 当谈到系统的某些部分执行某些操作或存储某些数据时,可以理解这是由网络节点完成的。

摘要地址 (或简单地说 地址, 地址)。 节点的地址由其公钥确定。 更严格地说,它是包含公钥的数据结构的256位哈希(SHA256)(未指定具体的加密算法 - 给出了椭圆曲线和RSA-2048作为示例)。 为了使一个节点与另一个节点通信,它不仅需要知道该节点的地址,还需要知道该数据结构。 理论上,一个物理节点可以创建任意数量的地址(对应不同的密钥)。

此外,经常使用这样的链接:TL 结构形式的“原型”(几乎包含任何数据),以及来自它的 256 位散列,用于寻址。

Blokcheyn (blockchain)。 区块链是一种数据结构、元素(),它们被排序成一条“链”,链中的每个后续块都包含前一个块的哈希值。 通过这种方式,实现了完整性——只能通过添加新块来进行更改。

服务 (服务)。 TON 内的服务可以有多种类型,具体取决于它们是否使用区块链。 例如,一个(或多个)网络节点可以使用下面描述的 ADNL 协议处理某些 RPC 请求,而无需在区块链中创建任何记录 - 就像传统的 Web 服务器一样。 包括通过 ADNL 实现 HTTP 的可能性,以及信使本身向该协议的过渡。 与 TOR 或 I2P 类比,这将使其更能抵抗各种阻塞。

同时,许多服务涉及与区块链的交互以及处理区块链外部的请求。 例如,对于 TON Storage(文件存储)来说,将文件本身存储在区块链上并不是很合理。 它将仅包含文件哈希(以及有关它们的一些元信息),专门的网络节点将充当“文件服务器”,准备通过 ADNL 将它们发送到其他节点。

雾服务 (雾服务)。 我们正在谈论一些意味着去中心化和开放参与的服务。 例如,任何想要将其节点提供为在其他节点之间转发数据包的中介(代理)的参与者都可以支持 TON 代理服务。 如果需要,他可以为此收取自己设定的费用 - 使用 TON 支付系统进行小额支付(这也是一项雾服务)。

ADNL:抽象数据报网络层

在最低级别,节点之间的通信将使用 UDP 协议进行(尽管其他选项也是可以接受的)。

如上所述,为了让一个节点向另一个节点发送数据包,它必须知道其公钥之一(以及它定义的地址)。 它使用此密钥对数据包进行加密,并将 256 位目标地址添加到数据包的开头 - 由于一个节点可以拥有其中多个地址,这将允许它确定使用哪个密钥进行解密。

TON:电报开放网络。 第 1 部分:简介、网络层、ADNL、DHT、覆盖网络

此外,数据包的开头可能包含所谓的地址,而不是接收者的地址。 标识符 通道。 在这种情况下,数据包的处理已经取决于节点之间的特定协议 - 例如,发送到某个通道的数据可能是发送给另一个节点的,并且必须转发给它(这是服务) TON代理)。 另一种特殊情况可能是节点之间直接交互,但使用该通道的单独密钥对进行加密(使用 Diffie-Hellman 协议预先生成)。

最后,一个特殊情况是“空”通道 - 如果节点尚不知道其“邻居”的公钥,它可以向它们发送根本不加密的数据包。 这仅用于初始化 - 一旦节点发送有关其密钥的信息,它们就应该用于进一步的通信。

上述协议(256位通道标识符+数据包内容)称为ADNL。 该文档提到了在其之上实现 TCP 类似物或其自己的附加组件 - RLDP(可靠大数据报协议)的可能性,但没有详细介绍其实现。

TON DHT:分布式哈希表

与其他分布式系统一样,TON 涉及 DHT 的实现 - 分布式哈希表。 更具体地说,该表是 类似 Kademlia。 如果你不熟悉这种类型的哈希表,不用担心,下面我将大致描述它们是如何工作的。

TON:电报开放网络。 第 1 部分:简介、网络层、ADNL、DHT、覆盖网络

从抽象意义上讲,DHT 将 256 位密钥映射为任意长度的二进制值。 在这种情况下,表中的键是来自某个 TL 结构的哈希值(该结构本身也与 DHT 存储在一起)。 这与节点地址的形成非常相似 - 它们确实可以存在于 DHT 中(例如,使用这样的密钥对应于给定节点的 IP 地址) 摘要地址,如果他不隐藏的话)。 但在一般情况下,“密钥原型”(它们的 说明, 关键描述)是元数据,指示哈希表中条目的“所有者”(即某个节点的公钥)、存储值的类型以及随后可以更改该条目的规则。 例如,规则可能只允许所有者更改该值,或禁止向下更改该值(以防止重放攻击)。

除了256位密钥之外,还引入了DHT地址的概念。 与常规主机地址的区别在于 DHT 地址必须与 IP 地址绑定。 如果节点不隐藏其 IP,则可以使用常规地址进行 DHT。 但更常见的是,会为 DHT 需求创建一个单独的“半永久”地址。
TON:电报开放网络。 第 1 部分:简介、网络层、ADNL、DHT、覆盖网络
在密钥和 DHT 地址上方引入了距离的概念 - 一切都与表格一致 卡德里亚 — 键之间的距离等于它们的 XOR(按位异或)。 与 Kademlia 表一样,某个键对应的值必须存储在 s 到该键的距离最短的节点(s 这是一个相对较小的数字)。

为了让 DHT 节点与其他此类节点进行通信,它会保存在内存中 DHT路由表 — 之前与之交互的节点的 DHT 和 IP 地址,按与它们的距离分组。 有 256 个这样的组(它们对应于距离值中设置的最高有效位 - 即,距离从 0 到 255 的节点将落入一组,从 256 到 65535 - 落入下一个组,等等)。 在每个组中,存储有限数量的“最佳”节点(就对它们的 ping 而言)。

TON:电报开放网络。 第 1 部分:简介、网络层、ADNL、DHT、覆盖网络

每个节点必须支持多种操作: 存储键的值, 节点搜索 и 寻找价值。 搜索节点涉及根据给定的密钥从路由表中发布距离它最近的节点; 查找值是相同的,除非节点知道键的值(然后它只返回它)。 因此,如果节点想要通过 DHT 中的键查找值,它会向其路由表中最接近该键的少数节点发送请求。 如果所需的值不在它们的响应中,但存在其他节点地址,则向它们重复请求。

TON DHT 可用于各种目的,例如,实现类似 torrent 的文件存储(请参阅. 吨存储); 确定实现某些服务的节点的地址; 在区块链中存储有关帐户所有者的信息。 但最重要的应用是通过抽象地址发现节点。 为此,地址被用作需要找到其值的键。 作为请求的结果,要么会找到节点本身(如果搜索到的地址是其半永久 DHT 地址),要么该值将是用于连接的 IP 地址和端口 - 或应用作连接的另一个地址。中间隧道。

TON 中的覆盖网络

上述 ADNL 协议意味着任何节点都能够相互交换信息 - 尽管不一定以最佳方式进行。 我们可以说,由于 ADNL,所有节点都形成了一个全局 TON 图(理想连接)。 但还可以创建覆盖网络 - 该图中的子图。
TON:电报开放网络。 第 1 部分:简介、网络层、ADNL、DHT、覆盖网络

在这样的网络中,交互仅直接进行——通过参与网络的节点之间预先形成的连接(通过上述 ADNL 通道)。 邻居之间这种连接的形成,即搜索邻居本身,是一个自动过程,旨在维持覆盖网络的连接性并最大限度地减少其中数据交换的延迟。

此外,还有一种方法可以在网络内快速分发大型广播更新 - 它们被分成多个片段,并补充有纠错代码,并且所有这些片段都从一​​个参与者发送到另一个参与者。 因此,参与者在沿着网络进一步发送它们之前不必完全获取所有部分。

覆盖网络可以是公共的或私有的。 成为公共网络的成员并不困难——你需要找到一个描述它的 TL 结构(它可以是公共的,也可以通过 DHT 中的某个密钥访问)。 在专用网络的情况下,节点必须提前知道该结构。

待续

我决定将 TON 评论分成几篇文章。 这部分到此结束,并且 下一个 我接着考虑 TON 将包含的区块链(更准确地说,区块链)的结构。

来源: habr.com

添加评论