【翻译】 Qtum 对等连接
原文:https://medium.com/@jb395official/qtum-peer-connections-may-21-2018-ba12bda71e4f
译者:中山大学数学学院(珠海)林学渊
大二时给量子做的翻译,转载注明出处,谢谢
Qtum 对等连接 — 2018年3月21日
这篇文章深入探讨了运行 Qtum 全节点时其中一个最有趣的问题:钱包/节点如何连接到其他 Qtum 对等方,它需要多少连接,以及无法连接时如何排除错误?
对大多数应用程序来说,家庭网络足够简单易用,但是当你使用 Qtum 节点遇到问题时,你打算怎么处理? 路由器 - 防火墙 - 杀毒软件体系具有许多内置保护功能,可以确保你网络的安全和正常运行,但运行加密货币钱包可能会与这些内置保护措施发生冲突。
我们使用社交媒体上的 “好友请求” 心智模型来探索节点连接。“好友请求” 就是你发送一个请求给你想聊天的人,比如在 Facebook,Telegram 等等。类似地,你的节点将 “好友请求” 发送出去,与其他节点连接,它们确认请求后就可以与你的节点聊天了。你的节点也能够从其他节点接收“好友请求”。
我们将会了解什么是 Qtum 全节点,Qtum 网络与对等连接如何运作,以及如何覆盖可以阻止这些通信的防火墙和路由器。 我们将花一些时间在端口和网络协议上,并会涉及与 “netstat” 网络状态相关的工具。 我希望在我们完成这些工作之后,你将了解你的 Qtum 节点如何能愉快地与世界各地的同行聊天。
我是一名独立的区块链研究员,偶尔写博客和主持社交媒体,十分中意 Qtum 团队的技术指导。 我希望在社交媒体上能够很快与大家聊天。 请在 Qtum 的电报,Reddit,Discord 和 Forum 社交频道上搜索 “Jackson” 或 “JB395”。
Qtum 主网性能
Qtum 主网持续稳定运行,最近通过了 150,000 个区块和7,000 个完全分散的 权益证明 节点。 我的计算结果显示,网络权重为 2080 万,因为在一周内稳定的总余额 185 万的大型钱包赢得了8.9%的区块奖励。这表示 Qtum 权益节点的年回报率为4.2%:
反杀毒软件
TL;DR 由于历史原因,许多杀毒程序在下载 Qtum 钱包安装文件时会误报病毒错误,并隔离或删除这些下载。 要解决此问题,请为杀毒程序添加白名单,如果有问题,请从 Qtum GitHub 站点 下载并使用验证文件校验。
译者注:TL;DR
是 “too long; don’t read” 的缩写,意思是太长别看。
在运行我们的钱包并让它发出“好友请求”之前,我们必须安装钱包,但是在下载钱包安装文件时可能会出现一些问题,因为有杀毒软件。
杀毒软件当然没有最完美的终端(台式机等)恶意软件保护技术,但它是我们大多数人使用的。 杀毒软件通过将文件签名与已知的恶意软件文件签名进行匹配来工作。 这可能是最令人沮丧的,因为你从开始下载钱包安装文件,下载完成,到最后它却消失了。 发生了什么?
回到比特币历史中,人们曾在比特币挖矿文件中发现了一些恶意代码,并且自从杀毒程序标记比特币挖矿文件以来,这些文件与 Qtum 节点文件十分相近。
这是来自 McAfee 杀毒软件的下载警告消息,它在这方面表现很好,提供了一个“接受风险”选项以允许下载安装文件。 其他杀毒软件对用户不太方便,因为它们会在不发出警告的情况下隔离或删除文件。 如果你下载的钱包文件消失了,请在杀毒程序中寻找添加白名单的方法(或者最坏的情况下,暂时关闭杀毒软件进行下载)。 也可能你能够下载并安装钱包,这是因为文件只有在杀毒软件下一次完整扫描你的计算机时才会消失。 这可以通过在杀毒程序中添加白名单来解决。
那么该怎么办? 请到 Qtum GitHub 站点获取最新版本(https://github.com/qtumproject/qtum/releases) 下载正确版本的钱包来安装,并验证 SHA256 校验和。
将相应的校验和复制到你最喜欢的校验和工具中以验证文件:
Qtum 对等连接
TL;DR Qtum 节点(核心钱包)将连接多达 125 个对等点。 前 8 个连接仅出站:节点伸出以连接到其他 8 个节点。 如果路由器和家庭网络的端口 3888 处于打开状态,则该节点将接受对等点 9 到 125 的入站连接。如果该节点也用作 Staking 钱包,则它将通过 8 或 125 个连接同样获得块奖励。 具有多于 8 个对等连接的节点支持连接到网络的新节点,并将下载块来同步这些新节点。 有 8 个出站连接的节点不能这样做。
现在我们已经绕过杀毒程序并安装了钱包,我们可以启动该节点并开始连接到其他节点。
全节点 - 8 vs. 125 个连接
在了解关于 Qtum 对等连接如何工作的细节之前,我们先看一下全节点的角色,Staking 钱包以及出站连接与入站连接的问题。
Qtum 全节点(qtumd 或 qtum-qt Core 钱包)连接到 Qtum 对等网络,将整个区块链同步到本地存储中,并实时验证和传送每个区块和交易。 Qtum 节点以此验证来保护网络,然后将块/交易转发给其他节点。 一个 Qtum 节点不需要持有任何 QTUM 或者为了当这个重要的安全角色而 Staking。 只有 Qtum 核心钱包( qtumd 和 qtum-qt)才能成为全节点,不过轻量级交易钱包提供商也可以运行全节点,可能基于 qtumd。
一个 Qtum 全节点可能另外持有 QTUM 并 Staking 以赢取块奖励。 这些放大的全节点有助于保护网络,并有机会赢得块奖励。
对 Qtum 来说,全节点始终是钱包,但钱包并不总是全节点,例如,Android 手机钱包和 Web 钱包不是全节点,也不能用于 Staking 。 在这篇文章中,我会写关于 “节点” 的内容,但请记住,这是真正的 Qtum 核心钱包,可能会或可能不会 Staking。
按照设计,节点建立的前 8 个连接只是出站连接。 这意味着你的节点将主动发送 “好友请求” 与其他节点连接。 最初,我发现这个“出站”的概念令人困惑; 节点始终与其对等点进行双向通信(输入和输出),但解释是对于前 8 个连接,你的节点通过主动连接其他节点来启动连接。
任何大于 8 个的对等连接都是入站连接(除非使用出站的 addnode 命令)。 这意味着你的节点将接受来自其他节点的连接,即远程节点发送“好友请求”。具有入站连接的节点在 Qtum 网络上具有特殊功能:它们将允许新节点连接到网络,并且将它们以前存的块下载到这些新节点。 对于有入站连接的节点,我们应该特别感谢,没有它们,网络无法通过添加新节点来增长。
我们将在下面看到,节点在主网上允许入站连接的能力取决于路由器到家庭网络的端口 3888 ,所以这些入站的好友请求可以实际到达节点。
请注意,为了获得区块奖励,Staking 钱包有8个连接还是多达125个连接没有区别,事实上,就算只有一个对等连接,钱包也可以进行交易,甚至可以赢得区块奖励(参考文献1)。
对于 qtumd(“无头”服务器钱包)用户,可以使用以下命令监听连接:
“getconnectionscount” 将给出当前对等连接数,如 8 或 124.
“getpeerinfo” 将提供有关当前对等连接的详细信息。
路由器和家庭网络
大多数家庭网络通过因特网服务提供商(ISP)提供的网络接入设备连接到因特网,该服务提供商可以是电缆调制解调器,DSL调制解调器或其他网络接口设备。 调制解调器通常有一个内置路由器,路由器的工作是提供从 ISP 提供的单个公共 Internet 地址到家庭网络上多个内部IP地址的地址转换。 这些内部IP地址通常由诸如 UPnP(universal plug and play)之类的协议自动分配,重要的是要知道,路由器将单个外部 IP 地址映射到家庭网络上连接的多个设备的内部IP地址。
让我们看一下在家庭网络上运行的 Qtum 节点的简化图:
这里有很多东西需要解释。 ISP 为这个宽带客户提供的公共 IP 地址是 123.24.67.89,因特网上的任何地方的计算机都可以发送消息到这个地址。 内部网络 IP 地址为运行 Qtum 节点的计算机 A 为 192.0.0.1,计算机 B 为 192.0.0.2,正在进行网络冲浪,以此类推计算机C.
基于来回的流量,路由器知道如何将网页请求发送回计算机B,并将 Qtum 节点的出站节点请求发送回计算机A. 但是,在 Qtum 节点与前 8 个节点用那些出站的对等请求连接之后会发生什么?问题在于,对于入站的对等请求,路由器可能不够智能,无法将这些好友请求自动路由到计算机 A 中的节点,因此入站的对等请求会丢失,并且该节点无法连接到 8 个节点之上。
要解决这个问题,并允许节点接收入站的对等请求,我们可以使用端口转发为计算机 A 打开端口 3888. 要打开端口 3888,我们配置路由器将端口 3888 的所有流量转发到 IP 地址 192.0.0.1,以到达计算机 A 节点。根据你的网络设置,还可以从钱包映射端口 3888,使用 UPnP 选择设置 - 选项 - 网络 - 映射端口。
网站 portforward.com 有程序和屏幕截图来设置数百个路由器上的端口转发(只需点击他们的广告),程序基本上是登录到你的路由器,找到设置端口转发的部分,并填写表格将 TCP 输入端口 3888 分配给你节点的本地IP地址。
老实说,端口映射应该可以允许入站连接,但我无法使其工作。 如果有人可以提供一些指点,我可以更新这个博客。
Netstat工具
在本节中,我们添加一些实用的网络程序和诊断技术。 通常,你的家庭网络允许 Qtum 节点自动同步,但如果没有,这些工具可能有助于排除错误。
为了监控你的家庭网络,netstat(网络状态)程序是一个很好的开始。 从命令提示符运行此工具。 它内置于 Mac 和 Windows,在Linux上你可能需要安装它(apt-get install net-tools)。netstat 选项列表在参考2中给出。
“netstat -n” 命令将以数字形式显示网络地址和端口,显示一个节点连接到端口 3888 上的远程节点:
Addnode 命令
如果你的新节点没有与对等方连接,则需要使用 “addnode” 命令提供帮助。 你可以告诉节点向特定 IP 发送“好友请求”。但是你应该使用哪些 IP?
addnode 命令的一个很好的对等 IP 地址来源是 coinexchange.io,它列出了来自其 Qtum 节点的 “getpeerinfo” 数据。要使用此站点中的IP地址,请将其输入为
1 | addnode 123.45.67.89:3888 add |
(这是一个合成的IP地址,你应该使用来自 coinexchange.io 的实际 IP 地址)
对 addnode 命令的正确响应是 “null”,然后你的节点将尝试一两分钟连接到该对等点 IP 地址。 你可以尝试手动添加 5 个或 10 个对等连接。
在启动时连接
在本节中,我们将了解节点如何在启动时建立连接,并使用 netstat 来监听网络并查看节点如何连接。 我们的 netstat 命令是 “netstat -an 30”,意思是每隔 30 秒以数字格式显示所有连接和监听端口。
启动节点时,有几种方法可以找到要连接的对等点。如果节点先前已经运行,它将保存 IP 地址和时间在 peers.dat 文件中。 如果节点是新的或者在 peers.dat 文件中找不到一些好的IP地址,它将向 DNS 服务器查询当前 IP 地址的列表。 最后,你可以手动输入 IP 地址来尝试使用 “addnode” 命令。
首先,我们安装时将节点设置为在全局启动,且不使用 peers.dat 文件中的历史记录(只需重命名 peers.dat 文件,使节点找不到它)。
下面是一个新节点寻找其他节点的消息序列。 这个节点没有使用留有以前“朋友”的 peers.dat 文件。 在半小时的过程中,它将尝试多个IP地址,找到两个要连接的对等点:
Qtum 核心钱包有一个文件,其中包含所有“好友请求”,即 peers.dat 文件。 同一个节点使用 peer.dat 文件启动(将先前的文件名改回 “peers.dat”)可使钱包在 12 分钟内与 10 个对等点连接。 下面的图表显示钱包另找新朋友(没有 peers.dat 文件 - 如上所示)与仅仅联系以前的朋友(使用peers.dat 文件)时的差异:
用于网络事件的 Debug.log 文件
Qtum 节点现在已经准备好了它的特写,我们将通过设置 debug.log 来捕获所有网络事件。 这是启动钱包时通过 debug=net 开关完成的:
1 | C:\Program Files\Qtum>qtum-qt.exe -debug=net |
根据你的操作系统调整此命令。
使用此命令后,节点将记录有关网络活动的所有详细信息。
有关显示连接如何建立简单的列表(下面的参考文献7中给出了更完整的序列),日志显示:
(1)启动后,我们的节点尝试根据 peers.dat 文件连接到多个 IP。 它在十天前看到节点 59.189.111.143,但现在不能连接。
(2)我们的节点连接到 DNS 种子服务器以获取最近的一些 IP 地址。
(3)我们的节点试图连接到地址 35.226.31.206,要尝试的是第6个节点。
(4)我们的节点在 35.226.31.206 处向节点发送版本消息(软件版本,块编号和时间参考)。 该版本消息是“好友请求”。远程节点将使用自己的版本消息进行响应。
(5)节点交换 verack 消息(版本确认)以确认连接。 现在它们是好友,可以开始聊天了。 我们的节点将向远程节点请求额外的IP地址,发送其他“好友请求”。
(6)我们的节点将其最新的块(它离线差了 4 块)发送到 35.226.31.206,并请求下载块以追上。
(7)我们的节点开始接收来自节点 6 的块。
请注意时间戳,节点启动后尝试连接节点 6(对等节点 1 到节点 5 未连接)需要45秒,然后等待一秒完成连接(verack 消息)并开始下载块。
我在莫斯科写完博客,部分原因是我收到了来自 Qtum Telegram Russia 频道的管理员 Lisa L 的一个好友请求,要翻译之前的 Qtum Russian Community 博客,因为俄罗斯目前有 17 个 Qtum 节点,并且国际足联世界杯将于 6 月份来到俄罗斯。还要更好的理由在克里姆林宫和红场进行摄影漫步嘛?这个地区是俄罗斯的文化中心,列宁坟墓的所在地,圣巴西尔大教堂(建于 1561 年),众多的博物馆以及 2 月份记者访问时的寒冷天气。
鸣谢
特别感谢 Liza L 的俄文翻译。
参考资料
- 我使用 Testnet 钱包来验证使用单个对等连接操作的节点,使用以下命令:
1 | qtum-qt.exe -testnet -noconnect -connect=35.197.132.10:13888 |
- netstat工具。
Qtum 对等通信基于比特币,下面是一些相关的比特币参考:
- BitcoinCore — 运行完整节点
- Reddit bitcoin post:我正在运行一个全节点,你也来吧
- 区块链研究的音乐。 柴可夫斯基 - 意大利随想曲 - Igor Manasherov,莫斯科爱乐乐团,柴可夫斯基音乐厅,2015年6月,莫斯科。
- 无人机在克里姆林宫上,在 YouTube 上看。
- 以下是连接到 35.226.31.206 的节点 6 的更完整的日志列表: