收到一封信的时候我们不知道什么

285 阅读3分钟

网络的状况可能会很复杂,在收到一份信息(packet)的时候,有很多东西是不确定的:

来自何方

信息在互联网中传播,通常要通过很多中转节点,经过各种路径。除非是点对点的IP直连(IPv6),否则无法确定信息是从哪里发出的,是否有中间人劫持。所以需要通过加密手段来保证信息的真实性,比如在微信聊天的时候,微信服务器会验证双方的身份,你收发的所有消息,都会被加密传输,这个过程是由微信的客户端和服务器来完成。信息被签名之后,我们才能确保发出人的身份。在访问网站的时候也是一样,域名和证书绑定,DNS服务商有可能劫持一个域名,但无法获得对应的证书,所以HTTPS可以有效地解决DNS劫持。

何时发出

信息内可以包含发出的时间,只要这个时间是可信的就行。但如果信息内没有时间戳,我们是无法确定这个信息在何时发出的,也无法确定收到信息的顺序。在传输层使用TCP协议可以确保在一个链接内,内部所有信息的顺序是确定的(packets有编号)。

可靠的信息传输

可靠的信息传输,是指我们至少要确定这个信息的发出者,所以一定要有加密和验证手段。

其次,要保证这个消息可以发出去,不会半路就丢失,需要有广播机制,全世界最先进的网络节点来广播这个消息(只要消息量足够大,这个成本就能够忽略不及,参考电信系统)。

在时间上需要使延迟控制在可接受的范围内,保证信息的时效性不会受损。

最后,信息的顺序要可以确定。

overlay 的点对点网络

overlay 的网络是指建立在现有的 TCP/IP 协议构成的 Internet 之上的网络,属于应用层。Bitcoin的网络即是一种overlay的网络,使用Bitcoin网络的商家,不需要介入第三方的中介服务,只需要自己搭建一个SPV节点,连接到其它的节点(SPV or FullNode),就可以快速地获取到最新的区块头。理论上,SPV节点可以第一时间接收到所有的交易,其只需要保留和自己的地址有关的交易即可,然后通过默克尔树来验证交易是否存在于区块中。当区块体积变得非常大(1G以上),验证整个区块的工作只能由矿工的高级节点来完成,商家只需要保证自己的SPV节点连接到了足够多的矿工节点,确保能够第一时间接收到区块即可,这样就能减少关注了错误的分叉的情况出现。同时,可以加速交易的广播,防止被双花。

当IPv6获得普及后,客户和商家可以点对点地传播信息(天涯海角的两个人就像面对面一样讨价还价),每条信息别人不用知道,但是每条信息都有发出者的签名以作为证据。兼顾了隐私和诚信(假名而非匿名)。

所以,商业友好型的SPV节点应该具有以下功能:

  • 能够同时连接大量的矿工节点(10~100个)
  • 能够应对大量的新交易(过滤和广播)
  • 能够ip点对点传播消息(加密和解密手段)
  • 接口方便扩展,快速改造成各种服务器。