IPFS向大家分享了IPFS 使用安装教程,其中包含IPFS,安装教程等知识点,遇到此问题的同学们可以参考下
1. 简介
IPFS(InterPlanetaryFile System)是一个点对点的分布式超媒体分发协议,它整合了过去几年最好的分布式系统思路,为所有人提供全球统一的可寻址空间,包括Git、自证明文件系统SFS、BitTorrent和DHT,同时也被认为是最有可能取代HTTP的新一代互联网协议。
IPFS用基于内容的寻址替代传统的基于域名的寻址,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到IPFS节点中,将会得到基于其内容计算出的唯一加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。
IPFS是通用目的的基础架构,基本没有存储上的限制。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链、8英寸软盘的备份,还有静态网站。
IPFS提供了一个友好的WEB访问接口,用户可以通过本机的 IPFS-HTTP 网关(http://localhost:5001/ipfs/) 或者公共的网关(http://ipfs.io/) 获取IPFS网络中的内容,也可以通过特定的浏览器或者插件通过ipfs:/or fs:/的方式直接获取内容。也许在不久的将来,IPFS协议将会彻底替代传统的HTTP协议。
2. 使用IPFS
2.1 安装
?$ go get -u -d github.com/ipfs/go-ipfs
?$ cd $GOPATH/src/github.com/ipfs/go-ipfs
?$ make install
2.2 初始化
?$ ipfs init
2.3 加入IPFS网络
?$ ipfs daemon
2.4 获取内容
?$ipfs cat/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/r eadme
?http://localhost:5001/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemTYgPpHdWEz79ojWnPbdG
2.5 发布内容
?$ ipfs add hello.jpg
? IPFS文件还可以抽象成特殊的IPFS目录,从而标注一个可读的文件名(透明的映射到IPFS哈希),在访问的时候会像HTTP一样获取一个目录索引。在IPFS上建立网站的流程和过去一样,而且把网站加入到IPFS节点的指令只需要一条指令:ipfs add -r yoursitedirectory。
2.6 缓存内容到本地
?$ ipfs pin add-r
QmcKi2ae3uGb1kBg1yBpsuwoVqfmcByNdMiZ2pukxyLWD8
?缓存到本地的内容不仅可以自己使用,还能为其他节点提供资源
2.7 IPNS域名访问
?IPFS哈希只能用来表示不可变数据,因为一旦数据改变,哈希值也会改变。从某种意义上来说,这是保持数据持续性的好的设计。但是我们也需要一种方法来标记最新更新网站的哈希,这个方法我们称作IPNS。
?IPNS的原理是从域名的TXT记录里获取IPFS哈希地址,然后根据这个哈希地址从IPFS网络中获取数据。比如http://ipfs.io/ipns/ipfs.git.sexy/
?接下来IPFS还打算支持Namecoin。Namecoin从理论上完全实现了分布式Web的去 中心化,整体的运行中不再需要中心化的授权。支持了Namecoin的IPFS不再需要ICAN N、中心服务器,不受政治干涉,也无需授权证书。
2.8 更多
?更多信息请浏览IPFS的API文档https://ipfs.io/docs/api/
?如果你想机遇IPFS做一些开发,这里有各种语言实现的API调用接口https://github.com/ipfs/ipfs#api-client-libraries
3. IPFS是如何工作的
3.1 身份验证
和比特币相似,每一个节点都会由NodeId(公钥的哈希值)来标识,节点存储着公钥和加密过的私钥。
首次连接时,节点间交换公钥,并检查 hash(other.PublicKey)是否等于other.NodeId。如果没有,则终止连接。
type NodeId Multihash
type Multihash []byte
//self-describingcryptographic hash digest
type PublicKey []byte
type PrivateKey []byte
// self-describing keys
type Node struct {
NodeId NodeID
PubKey PublicKey
PriKey PrivateKey
}
3.2 网络
每个节点与网络中的相连的其他数百个节点进行定期通信。
IPFS的网络传输具有如下特性:
? 传输: IPFS可以使用任何传输协议,如 WebRTC 和 uTP。
? 可靠性:如果底层网络不能保证可靠性,IPFS可以使用 uTP 或 SCTP 来保 证
? 连接:IPFS还使用 ICE NAT 穿越技术
? 完整性:使用哈希校验和检查消息的完整性。
? 真实性:可以使用发送者的公钥和HMAC来检查消息的真实性。
同时IPFS不仅仅是通过IP来连接节点,还支持很多其他协议。IPFS内部使用 不同的地址格式来选择不同的网络协议。
# an SCTP/IPv4 connection
/ip4/10.20.30.40/sctp/1234/
# an SCTP/IPv4 connectionproxied over TCP/IPv4
/ip4/5.6.7.8/tcp/5678/ip4/1.2.3.4/sctp/1234/
3.3 路由
IPFS通过通过基于 S/Kademlia 和 Coral 的 DSHT 来寻找匹配的节点和特定节点的地址信息,IPFS的对象和使用模式的大小类似于 Coral 和 Mainline,因此 IPFS DHT 根据其大小对存储的值进行区分。小值(等于或小于1KB)直接存储在DHT上。对于更大的值,DHT存储拥有这些块的节点NodeId。
DSHT的接口定义如下:
typeIPFSRouting interface {
FindPeer(node NodeId)
// 得到指定节点的地址
SetValue(key[]bytes, value []bytes)
// 小值可直接存储在DHT上
GetValue(key[]bytes)
// 从DHT中获取值
ProvideValue(key Multihash)
// 宣布此节点可以提供一个大值
FindValuePeers(keyMultihash, min int)
// 得到拥有特定大值的所以节点
}
3.4 块交换
在IPFS中,通过使用 BitSwap 协议与其他节点进行块(block)交换来实现数据分发。
IPFS(InterPlanetaryFile System)是一个点对点的分布式超媒体分发协议,它整合了过去几年最好的分布式系统思路,为所有人提供全球统一的可寻址空间,包括Git、自证明文件系统SFS、BitTorrent和DHT,同时也被认为是最有可能取代HTTP的新一代互联网协议。
IPFS用基于内容的寻址替代传统的基于域名的寻址,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到IPFS节点中,将会得到基于其内容计算出的唯一加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。
IPFS是通用目的的基础架构,基本没有存储上的限制。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链、8英寸软盘的备份,还有静态网站。
IPFS提供了一个友好的WEB访问接口,用户可以通过本机的 IPFS-HTTP 网关(http://localhost:5001/ipfs/) 或者公共的网关(http://ipfs.io/) 获取IPFS网络中的内容,也可以通过特定的浏览器或者插件通过ipfs:/or fs:/的方式直接获取内容。也许在不久的将来,IPFS协议将会彻底替代传统的HTTP协议。
2. 使用IPFS
2.1 安装
?$ go get -u -d github.com/ipfs/go-ipfs
?$ cd $GOPATH/src/github.com/ipfs/go-ipfs
?$ make install
2.2 初始化
?$ ipfs init
2.3 加入IPFS网络
?$ ipfs daemon
2.4 获取内容
?$ipfs cat/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/r eadme
?http://localhost:5001/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemTYgPpHdWEz79ojWnPbdG
2.5 发布内容
?$ ipfs add hello.jpg
? IPFS文件还可以抽象成特殊的IPFS目录,从而标注一个可读的文件名(透明的映射到IPFS哈希),在访问的时候会像HTTP一样获取一个目录索引。在IPFS上建立网站的流程和过去一样,而且把网站加入到IPFS节点的指令只需要一条指令:ipfs add -r yoursitedirectory。
2.6 缓存内容到本地
?$ ipfs pin add-r
QmcKi2ae3uGb1kBg1yBpsuwoVqfmcByNdMiZ2pukxyLWD8
?缓存到本地的内容不仅可以自己使用,还能为其他节点提供资源
2.7 IPNS域名访问
?IPFS哈希只能用来表示不可变数据,因为一旦数据改变,哈希值也会改变。从某种意义上来说,这是保持数据持续性的好的设计。但是我们也需要一种方法来标记最新更新网站的哈希,这个方法我们称作IPNS。
?IPNS的原理是从域名的TXT记录里获取IPFS哈希地址,然后根据这个哈希地址从IPFS网络中获取数据。比如http://ipfs.io/ipns/ipfs.git.sexy/
?接下来IPFS还打算支持Namecoin。Namecoin从理论上完全实现了分布式Web的去 中心化,整体的运行中不再需要中心化的授权。支持了Namecoin的IPFS不再需要ICAN N、中心服务器,不受政治干涉,也无需授权证书。
2.8 更多
?更多信息请浏览IPFS的API文档https://ipfs.io/docs/api/
?如果你想机遇IPFS做一些开发,这里有各种语言实现的API调用接口https://github.com/ipfs/ipfs#api-client-libraries
3. IPFS是如何工作的
3.1 身份验证
和比特币相似,每一个节点都会由NodeId(公钥的哈希值)来标识,节点存储着公钥和加密过的私钥。
首次连接时,节点间交换公钥,并检查 hash(other.PublicKey)是否等于other.NodeId。如果没有,则终止连接。
type NodeId Multihash
type Multihash []byte
//self-describingcryptographic hash digest
type PublicKey []byte
type PrivateKey []byte
// self-describing keys
type Node struct {
NodeId NodeID
PubKey PublicKey
PriKey PrivateKey
}
3.2 网络
每个节点与网络中的相连的其他数百个节点进行定期通信。
IPFS的网络传输具有如下特性:
? 传输: IPFS可以使用任何传输协议,如 WebRTC 和 uTP。
? 可靠性:如果底层网络不能保证可靠性,IPFS可以使用 uTP 或 SCTP 来保 证
? 连接:IPFS还使用 ICE NAT 穿越技术
? 完整性:使用哈希校验和检查消息的完整性。
? 真实性:可以使用发送者的公钥和HMAC来检查消息的真实性。
同时IPFS不仅仅是通过IP来连接节点,还支持很多其他协议。IPFS内部使用 不同的地址格式来选择不同的网络协议。
# an SCTP/IPv4 connection
/ip4/10.20.30.40/sctp/1234/
# an SCTP/IPv4 connectionproxied over TCP/IPv4
/ip4/5.6.7.8/tcp/5678/ip4/1.2.3.4/sctp/1234/
3.3 路由
IPFS通过通过基于 S/Kademlia 和 Coral 的 DSHT 来寻找匹配的节点和特定节点的地址信息,IPFS的对象和使用模式的大小类似于 Coral 和 Mainline,因此 IPFS DHT 根据其大小对存储的值进行区分。小值(等于或小于1KB)直接存储在DHT上。对于更大的值,DHT存储拥有这些块的节点NodeId。
DSHT的接口定义如下:
typeIPFSRouting interface {
FindPeer(node NodeId)
// 得到指定节点的地址
SetValue(key[]bytes, value []bytes)
// 小值可直接存储在DHT上
GetValue(key[]bytes)
// 从DHT中获取值
ProvideValue(key Multihash)
// 宣布此节点可以提供一个大值
FindValuePeers(keyMultihash, min int)
// 得到拥有特定大值的所以节点
}
3.4 块交换
在IPFS中,通过使用 BitSwap 协议与其他节点进行块(block)交换来实现数据分发。