包含标签 p2p 的文章

Go-libp2p四 | 穿透NAT

本文目的

上文Go-libp2p三 | relay例子已经分析过relay例子,并解释了两个节点如果通过中继服务进行通信。本文改造relay例子 并让这个服务做如下两件事:

  1. 交换两个节点的在交换机上的信息,帮助两个节点进行P2P打洞。
  2. 在打洞不成功的情况下能提供中继服务,转发两节点发送的数据。

我是看到源码中有hole punching协议,我是看了测试用例后才明白的。 利用libp2p的hole punching协议,NAT穿透打洞。打洞成功后进行p2p传输

……

阅读全文

Go-libp2p三 | relay例子

我想做什么

chat和echo两个例子,说明了两个节点之间的通信需要两节点在同一个局域网内,或者有一个节点有公网。 如果我两个节点分别在两个NAT下面, 都在各自的局域网内,则需要有一个中继服务,这个服务做如下两件事:

……

阅读全文

Go-libp2p二 | echo例子

go-libp2p的echo例子分析

进入目录go-libp2p/examples/echo/, 编译 go build

先看README.md, 可以了解到使用echo的方式: 终端B

$ ./echo -l 3001
2021/10/28 11:25:33 I am /ip4/127.0.0.1/tcp/3001/p2p/QmTu8sxDi3fSjz9ZMvkAj3qA9YAoGskroEnyLz2ZvfTBhX
2021/10/28 11:25:33 listening for connections
2021/10/28 11:25:33 Now run "./echo -l 3002 -d /ip4/127.0.0.1/tcp/3001/p2p/QmTu8sxDi3fSjz9ZMvkAj3qA9YAoGskroEnyLz2ZvfTBhX" on a different terminal

2021/10/28 11:25:59 listener received new stream
2021/10/28 11:25:59 read: Hello, world!

在另外一个终端输A入:

……

阅读全文

Go-libp2p一 | chat例子

代码下载

git clone https://github.com/libp2p/go-libp2p.git

chat实例分析

进入目录go-libp2p/examples/chat/, 编译 go build 先看README.md, 可以了解到使用chat的方式

  1. 在节点 B
$ ./chat -sp 3001
2021/10/28 11:01:25 Run './chat -d /ip4/127.0.0.1/tcp/3001/p2p/QmXgEXt4CiqmVmDhPPQnyVkoj3Bsx3Nggq57PPsk5tLNTs' on another console.
2021/10/28 11:01:25 You can replace 127.0.0.1 with public IP as well.
2021/10/28 11:01:25 Waiting for incoming connection
2021/10/28 11:01:25 
2021/10/28 11:03:03 Got a new stream!
> hello
  1. 在节点 A, 如果B有公网IP,则把127.0.0.1替换成B的公网IP
$ ./chat -d /ip4/127.0.0.1/tcp/3001/p2p/QmXgEXt4CiqmVmDhPPQnyVkoj3Bsx3Nggq57PPsk5tLNTs
2021/10/28 11:03:03 This node's multiaddresses:
2021/10/28 11:03:03  - /ip4/172.16.3.205/tcp/53084
2021/10/28 11:03:03  - /ip4/127.0.0.1/tcp/53084
2021/10/28 11:03:03 
2021/10/28 11:03:03 Established connection to destination
> hello

作为被连接方B

先看代码:

……

阅读全文