传输层

 

  当你用你自己的计算机连接到网络上另一台计算,你有会有很好的使用TCP/IP发送字节数据的机会,因为这个过程非常成功的融合了互联网协议和传输控制协议。互联网协议(IP)负责寻址和传输数据包,传输控制协议(TCP)是用于确保被发送的数据能够完全并且以正确的顺序被接收方接收。

  因为TCP/IP是无处不在的并且得到了很好的支持,因此它通常是网络应用程序的默认选择。在一些场景中,TCP增加了很多开销,因此一些应用程序可能使用 UDP协议,这是一个不保证顺序和可靠性的更简单的协议。

  虽然TCP和UDP(还有IP)是现今最常用的协议,但是这并不意味着他们是唯一的选择。在底层(发送原始以太网数据包或者蓝牙框架)和上层(例如QUIC,它是比UDP更上层的协议)都存在一些其他协议可以选择。

  在libp2p中,我们调用这些基本协议,使得数据在 transports层流转,libp2p的其中一个重要需求就是使传输层协议不可知。这就意味着决定使用什么样的传输层协议完全依赖开发者,事实上,一个应用程序可以同时支持许多不同的传输层协议。

监听和拨号

  传输层有两个核心操作,监听和拨号。

  不论传输层实现提供的是什么样的设施,监听意味着你都可以接收来自其它对等节点的链接。例如,Unix操作系统平台上的TCP协议是用 bind 和 listen系统调用来实现向应用程序的TCP端口发送系统流量数据的。

  Dialing是向外发送连接请求到监听节点的过程。与监听一样,实现决定了它的特定过程,但是在libp2p实现中,每个传输协议都会共享使用相同的编程接口。

寻址

  在你可以拨号一个对等节点和建立链接之前,你需要先知道如何才能联系到它们。因为每种传输协议很可能都有它自己的地址框架,libp2p使用一个惯例上称作多地址或者multiaddr的方法来编码编码许多不同的寻址框架。

  文档addressing doc 讲述了更详细的信息, 但是整体上了解多地址是如何工作的对理解拨号和监听接口是非常有帮助的。

  这里有一个关于TCP/IP传输协议的多地址的例子:

 

  这个和我们熟悉的 7.7.7.7:6542格式是等价的,但是它还有其他好处,比如它显示的描述了这个协议,从它的多地址格式上,我们可以了解到它的地址 7.7.7.7是属于IPv4协议,而且6543是输入TCP协议。

  想要了解更为复杂的示例,可以看Addressing

  拨号和监听都可以处理多地址形式。当监听时,你给传输协议指定你要监听的地址,当拨号时,你提供要被拨号的地址。

  当要拨号远程对等节点时,这个多地址应该包含你将要试图建立连接的节点的 PeerId。这可以让libp2p建立一个安全的信道,并阻止假冒。

  一个包含PeerId的多地址例子:

 

  /p2p/QmcEPrat8ShnCph8WjkREzt5CPXF2RwhYxYBALDcLC1iV6唯一的标识了一个远程对等节点, 它是有该节点的公钥哈希得来的。想要了解更多,请看 Peer Identity

小贴士:

  当节点路由可以使用时,你可以直接使用它们的PeerId进行拨号,而不需要提前知道它们的传输层地址。

支持多种传输协议

  Libp2p应用程序通常需要同时支持多种传输协议。例如,你可能需要你的服务即对使用TCP协议的长期运行的应用可用,也可以接收来自运行在网络浏览器上的节点发送的链接。

  Libp2p中用于管理传输协议的组件叫做switch,它也会与protocol negotiationstream multiplexingestablishing secure communication 等一些链接升级的其他形式的协议进行协作。

  Switch为拨号和监听提供单一实体点,并且使你的应用程序代码不用担心特定的传输协议或者其他被底层使用到的连接技术栈。

posted on 2020-12-24 16:47  冷月_孤星  阅读(200)  评论(0编辑  收藏  举报