① [以太坊源碼分析][p2p網路07]:同步區塊和交易
同步,也就是區塊鏈的數據的同步。這里分為兩種同步方式,一是本地區塊鏈與遠程節點的區塊鏈進行同步,二是將交易均勻的同步給相鄰的節點。
01.同步區塊鏈
02.同步交易
03.總結
ProtocolManager 協議管理中的 go pm.syncer() 協程。
先啟動了 fetcher ,輔助同步區塊用的。然後等待不同的事件觸發不同的同步方式。
同步的過程調用 pm.synchronise 方法來進行。
ProtocolManager 協議管理中的 go pm.txsyncLoop() 協程。
同步交易循環 txsyncLoop 分為三個部分的內容:
發送交易的函數。
挑選函數。
三個監聽協程的 case 。
② 什麼是P2P
是用自己電腦里的資源作為BT傳播其他人下載的種子。
BitTorrent(簡稱BT,俗稱BT下載、變態下載)是一個多點下載的源碼公開的P2P軟體,使用非常方便,就像一個瀏覽器插件,很適合新發布的熱門下載。其特點簡單的說就是:下載的人越多,速度越快一般簡稱 BT(BitTorrent) 也就是大家所說的變態下載。
該軟體相當的特殊,一般我們下載檔案或軟體,大都由 HTTP 站點或FTP 站台下載,若同時間下載人數多時,基於該伺服器頻寬的因素,速度會減慢許多,而該軟體卻不同,恰巧相反,同時間下載的人數越多你下載的速度便越快,因為它採用了多點對多點的傳輸原理。
注意事項
1. 想知道自己是內網還是外網的看自己的 IP , 10.x.x.x ,172.16.x.x , 192.168.x.x 都是內網,看不見遠程的基本也是內網。
2. 外網用戶如果 BitComet0.06 下載效果不理想可以試用 BC 以前版本或者貪婪 abc 、比特精靈等。
3. 限制上傳的朋友下載完畢後,強烈要求取消全局上傳限製做種3 個小時以上。
4. 熱門種子下載時,盡量只下載一個文件,這樣才讓你享受到 BitComet 的飛速快感。
5. 上傳參數的選取,要依據自己的網路情況,仔細調整,如果我說的參數不適合您,請您自己多琢磨,仔細進行微調。
③ 什麼是p2p網貸平台源碼網貸源碼有哪些
網貸,又稱為p2p網路借貸。P2P是英文peer to peer的縮寫,意即「個人對個人」。網路信貸起源於英國,隨後發展到美國、德國和其他國家,其典型的模式為:網路信貸公司提供平台,由借貸雙方自由競價,撮合成交。資金借出人獲取利息收益,並承擔風險;資金借入人到期償還本金,網路信貸公司收取中介服務費。p2p網貸平台源碼基本上是不可能給公開下載的,網上有部分p2p網貸源碼泄露了,那源碼也是被修改過很多次的了,會隱藏也多bug的。下載安裝後期維護成本很高,還不利於二次開發!你可以去看看迪蒙的網貸系統,中國網貸系統第一品牌,安全可靠,功能也很齊全,完全能滿足企業定製開發需求。
④ 詳解P2P技術中的NAT穿透原理(轉載)
課程地址:零聲學院 WebRTC入門與提高 https://ke.qq.com/course/435382?tuin=137bb271
技術支持QQ群:782508536
最近介入測試P2P的相關邏輯,因此對NAT穿透原理做了一定程度的了解(當然也沒有很深入)。本篇文章也是綜合和參考了些網路上和文獻里的一些資料(文中沒有對引用處進行標記,請見諒)。寫本文的目的就是,用自己的語言描述了這個過程,同時也在描述過程中加入了一些自己的理解,形成一篇文章作為要點的記錄。對於這一塊的知識,自己也有很多盲點,還請各路大神多多指教。
NAT(Network Address Translation,網路地址轉換),也叫做網路掩蔽或者IP掩蔽。NAT是一種網路地址翻譯技術,主要是將內部的私有IP地址(private IP)轉換成可以在公網使用的公網IP(public IP)。
時光回到上個世紀80年代,當時的人們在設計網路地址的時候,覺得再怎麼樣也不會有超過32bits位長即2的32次冪台終端設備連入互聯網,再加上增加ip的長度(即使是從4位元組增到6位元組)對當時設備的計算、存儲、傳輸成本也是相當巨大的。後來逐漸發現IP地址不夠用了,然後就NAT就誕生了!(雖然ipv6也是解決辦法,但始終普及不開來,而且未來到底ipv6夠不夠用仍是未知)。
因此,NAT技術能夠興起的原因還是因為在我們國家公網IP地址太少了,不夠用,所以才會採取這種地址轉換的策略。可見,NAT的本質就是讓一群機器公用同一個IP,這樣就暫時解決了IP短缺的問題。
優勢其實上面已經剛剛討論過了,根據定義,比較容易看出,NAT可以同時讓多個計算機同時聯網,並隱藏其內網IP,因此也增加了內網的網路安全性;此外,NAT對來自外部的數據查看其NAT映射記錄,對沒有相應記錄的數據包進行拒絕,提高了網路安全性。
那麼,NAT與此同時也帶來一些弊端:首先是,NAT設備會對數據包進行編輯修改,這樣就降低了發送數據的效率;此外,各種協議的應用各有不同,有的協議是無法通過NAT的(不能通過NAT的協議還是蠻多的),這就需要通過穿透技術來解決。我們後面會重點討論穿透技術。
簡單的背景了解過後,下面介紹下NAT實現的主要方式,以及NAT都有哪些類型。
1)靜態NAT:也就是靜態地址轉換。是指一個公網IP對應一個私有IP,是一對一的轉換,同時注意,這里只進行了IP轉換,而沒有進行埠的轉換。舉個栗子:
2)NAPT:埠多路復用技術。與靜態NAT的差別是,NAPT不但要轉換IP地址,還要進行傳輸層的埠轉換。具體的表現形式就是,對外只有一個公網IP,通過埠來區別不同私有IP主機的數據。再舉個栗子。
通過上面NAT實現方式的介紹,我們其實不難看出,現實環境中NAPT的應用顯然是更廣泛的。因此下面就重點介紹下NAPT的主要類型有哪些。
對於NAPT我們主要分為兩大類:錐型NAT和對稱型NAT。其中錐型NAT又分:完全錐型,受限錐型和埠受限錐型。概括的說:對稱型NAT是一個請求對應一個埠;錐型NAT(非對稱NAT)是多個請求(外部發向內部)對應一個埠,只要源IP埠不變,無論發往的目的IP是否相同,在NAT上都映射為同一個埠,形象的看起來就像錐子一樣。下面分別介紹這四種類型及其差異。
1)完全錐型NAT(Full Cone NAT,後面簡稱FC)
特點:IP和埠都不受限。
表現形式:將來自內部同一個IP地址同一個埠號(IP_IN_A : PORT_IN_A)的主機監聽/請求,映射到公網IP某個埠(IP_OUT_B : PORT_OUT_B)的監聽。任意外部IP地址與埠對其自己公網的IP這個映射後的埠訪問(IP_OUT_B : PORT_OUT_B),都將重新定位到內部這個主機(IP_IN_A : PORT_IN_A)。該技術中,基於C/S架構的應用可以在任何一端發起連接。是不是很繞啊。再簡單一點的說,就是,只要客戶端,由內到外建立一個映射(NatIP:NatPort -> A:P1)之後,其他IP的主機B或埠A:P2都可以使用這個洞給客戶端發送數據。見下圖()。
2)受限錐型NAT(Restricted Cone NAT)
特點:IP受限,埠不受限。
表現形式:與完全錐形NAT不同的是,在公網映射埠後,並不允許所有IP進行對於該埠的訪問,要想通信必需內部主機對某個外部IP主機發起過連接,然後這個外部IP主機就可以與該內部主機通信了,但埠不做限制。舉個栗子。當客戶端由內到外建立映射(NatIP:NatPort –> A:P1),A機器可以使用他的其他埠(P2)主動連接客戶端,但B機器則不被允許。因為IP受限啦,但是埠隨便。見下圖(綠色是允許通信,紅色是禁止通信)。
3)埠受限型NAT(Port Restricted Cone NAT)
特點:IP和埠都受限。
表現形式:該技術與受限錐形NAT相比更為嚴格。除具有受限錐形NAT特性,對於回復主機的埠也有要求。也就是說:只有當內部主機曾經發送過報文給外部主機(假設其IP地址為A且埠為P1)之後,外部主機才能以公網IP:PORT中的信息作為目標地址和目標埠,向內部主機發送UDP報文,同時,其請求報文的IP必須是A,埠必須為P1(使用IP地址為A,埠為P2,或者IP地址為B,埠為P1都將通信失敗)。例子見下圖。這一要求進一步強化了對外部報文請求來源的限制,從而較Restrictd Cone更具安全性。
4)對稱型NAT(Symmetric NAT)
特點:對每個外部主機或埠的會話都會映射為不同的埠(洞)。
表現形式:只有來自同一內部IP:PORT、且針對同一目標IP:PORT的請求才被NAT轉換至同一個公網(外部)IP:PORT,否則的話,NAT將為之分配一個新的外部(公網)IP:PORT。並且,只有曾經收到過內部主機請求的外部主機才能向內部主機發送數據包。內部主機用同一IP與同一埠與外部多IP通信。客戶端想和伺服器A(IP_A:PORT_A)建立連接,是通過NAT映射為NatIP:NatPortA來進行的。而客戶端和伺服器B(IP_B:PORT_B)建立連接,是通過NAT映射為NatIP:NatPortB來進行的。即同一個客戶端和不同的目標IP:PORT通信,經過NAT映射後的公網IP:PORT是不同的。此時,如果B想要和客戶端通信,也只能通過NatIP:NatPortB(也就是紫色的洞洞)來進行,而不能通過NatIP:NatPortA(也就是黃色的洞洞)。
以上,就是NAPT的四種NAT類型。可以看出由類型1)至類型4),NAT的限制是越來越大的。
根據上面的介紹,我們可以了解到,在實際的網路情況中,各個設備所處的網路環境是不同的。那麼,如果這些設備想要進行通信,首先判斷出設備所處的網路類型就是非常重要的一步。舉個例子來說:對於視頻會議和VoIP軟體,對位於不同NAT內部的主機通信需要靠伺服器來轉發完成,這樣就會增加伺服器的負擔。為了解決這種問題,要盡量使位於不同NAT內部的主機建立直接通信,其中,最重要的一點就是要判斷出NAT的類型,然後才能根據NAT的類型,設計出直接通信方案。不然的話,兩個都在NAT的終端怎麼通信呢?我們不知道對方的內網IP,即使把消息發到對方的網關,然後呢?網關怎麼知道這條消息給誰,而且誰允許網關這么做了?
為了解決這個問題,也就是處於內網的主機之間能夠穿越它們之間的NAT建立直接通信,已經提出了許多方法,STUN(Session Traversal Utilities for NAT,NAT會話穿越應用程序)技術就是其中比較重要的一種解決方法,並得到了廣泛的應用。在這個部分,我們將重點介紹下STUN技術的原理。(PS:除此之外,還有UPNP技術,ALG應用層網關識別技術,SBC會話邊界控制,ICE互動式連接建立,TURN中繼NAT穿越技術等等,本文不一一做介紹。)
STUN是一種網路協議,它允許位於NAT(或多重NAT)後的客戶端找出自己的公網地址,查出自己位於哪種類型的NAT之後以及NAT為某一個本地埠所綁定的Internet端埠。這些信息被用來在兩個同時處於NAT路由器之後的主機之間建立UDP通信。該協議由RFC 5389定義。STUN由三部分組成:STUN客戶端、STUN伺服器端、NAT路由器。STUN服務端部署在一台有著兩個公網IP的伺服器上。大概的結構參考下圖。STUN客戶端通過向伺服器端發送不同的消息類型,根據伺服器端不同的響應來做出相應的判斷,一旦客戶端得知了Internet端的UDP埠,通信就可以開始了。
STUN協議定義了三類測試過程來檢測NAT類型。
Test1: STUN Client通過埠{IP-C1:Port-C1}向STUN Server{IP-S1:Port-S1}發送一個Binding Request(沒有設置任何屬性)。STUN Server收到該請求後,通過埠{IP-S1:Port-S1}把它所看到的STUN Client的IP和埠{IP-M1,Port-M1}作為Binding Response的內容回送給STUN Client。 Test1#2:STUN Client通過埠{IP-C1:Port-C1}向STUN Server{IP-S2:Port-S2}發送一個Binding Request(沒有設置任何屬性)。STUN Server收到該請求後,通過埠{IP-S2:Port-S2}把它所看到的STUN Client的IP和埠{IP-M1#2,Port-M1#2}作為Binding Response的內容回送給STUN Client。
Test2: STUN Client通過埠{IP-C1:Port-C1}向STUN Server{IP-S1:Port-S1}發送一個Binding Request(設置了Change IP和Change Port屬性)。STUN Server收到該請求後,通過埠{IP-S2:Port-S2}把它所看到的STUN Client的IP和埠{IP-M2,Port-M2}作為Binding Response的內容回送給STUN Client。
Test3: STUN Client通過埠{IP-C1:Port-C1}向STUN Server{IP-S1:Port-S1}發送一個Binding Request(設置了Change Port屬性)。STUN Server收到該請求後,通過埠{IP-S1:Port-S2}把它所看到的STUN Client的IP和埠{IP-M3,Port-M3}作為Binding Response的內容回送給STUN Client。
STUN協議的輸出是: 1)公網IP和Port 2)防火牆是否設置 3)客戶端是否在NAT之後,及所處的NAT的類型
因此我們進而整理出,通過STUN協議,我們可以檢測的類型一共有以下七種:
A:公開的互聯網IP。主機擁有公網IP,並且沒有防火牆,可自由與外部通信 B:完全錐形NAT。 C:受限制錐形NAT。 D:埠受限制形NAT。 E:對稱型UDP防火牆。主機出口處沒有NAT設備,但有防火牆,且防火牆規則如下:從主機UDP埠A發出的數據包保持源地址,但只有從之前該主機發出包的目的IP/PORT發出到該主機埠A的包才能通過防火牆。 F:對稱型NAT G:防火牆限制UDP通信。
輸入和輸出准備好後,附上一張維基網路的流程圖,就可以描述STUN協議的判斷過程了。
STEP1:檢測客戶端是否有能力進行UDP通信以及客戶端是否位於NAT後 -- Test1 客戶端建立UDP socket,然後用這個socket向伺服器的(IP-1,Port-1)發送數據包要求伺服器返回客戶端的IP和Port,客戶端發送請求後立即開始接受數據包。重復幾次。 a)如果每次都超時收不到伺服器的響應,則說明客戶端無法進行UDP通信,可能是:G防火牆阻止UDP通信 b)如果能收到回應,則把伺服器返回的客戶端的(IP:PORT)同(Local IP: Local Port)比較: 如果完全相同則客戶端不在NAT後,這樣的客戶端是:A具有公網IP可以直接監聽UDP埠接收數據進行通信或者E。 否則客戶端在NAT後要做進一步的NAT類型檢測(繼續)。
STEP2:檢測客戶端防火牆類型 -- Test2 STUN客戶端向STUN伺服器發送請求,要求伺服器從其他IP和PORT向客戶端回復包: a)收不到伺服器從其他IP地址的回復,認為包前被前置防火牆阻斷,網路類型為E b)收到則認為客戶端處在一個開放的網路上,網路類型為A
STEP3:檢測客戶端NAT是否是FULL CONE NAT -- Test2 客戶端建立UDP socket然後用這個socket向伺服器的(IP-1,Port-1)發送數據包要求伺服器用另一對(IP-2,Port-2)響應客戶端的請求往回發一個數據包,客戶端發送請求後立即開始接受數據包。 重復這個過程若干次。 a)如果每次都超時,無法接受到伺服器的回應,則說明客戶端的NAT不是一個Full Cone NAT,具體類型有待下一步檢測(繼續)。 b)如果能夠接受到伺服器從(IP-2,Port-2)返回的應答UDP包,則說明客戶端是一個Full Cone NAT,這樣的客戶端能夠進行UDP-P2P通信。
STEP4:檢測客戶端NAT是否是SYMMETRIC NAT -- Test1#2 客戶端建立UDP socket然後用這個socket向伺服器的(IP-1,Port-1)發送數據包要求伺服器返回客戶端的IP和Port, 客戶端發送請求後立即開始接受數據包。 重復這個過程直到收到回應(一定能夠收到,因為第一步保證了這個客戶端可以進行UDP通信)。 用同樣的方法用一個socket向伺服器的(IP-2,Port-2)發送數據包要求伺服器返回客戶端的IP和Port。 比較上面兩個過程從伺服器返回的客戶端(IP,Port),如果兩個過程返回的(IP,Port)有一對不同則說明客戶端為Symmetric NAT,這樣的客戶端無法進行UDP-P2P通信(檢測停止)因為對稱型NAT,每次連接埠都不一樣,所以無法知道對稱NAT的客戶端,下一次會用什麼埠。否則是Restricted Cone NAT,是否為Port Restricted Cone NAT有待檢測(繼續)。
STEP5:檢測客戶端NAT是Restricted Cone 還是 Port Restricted Cone -- Test3 客戶端建立UDP socket然後用這個socket向伺服器的(IP-1,Port-1)發送數據包要求伺服器用IP-1和一個不同於Port-1的埠發送一個UDP 數據包響應客戶端, 客戶端發送請求後立即開始接受數據包。重復這個過程若干次。如果每次都超時,無法接受到伺服器的回應,則說明客戶端是一個Port Restricted Cone NAT,如果能夠收到伺服器的響應則說明客戶端是一個Restricted Cone NAT。以上兩種NAT都可以進行UDP-P2P通信。
通過以上過程,至此,就可以分析和判斷出客戶端是否處於NAT之後,以及NAT的類型及其公網IP,以及判斷客戶端是否具備P2P通信的能力了。當然這是自己個人筆記的第一篇,後面,再作一篇筆記《NAT穿透原理淺析(二)》分析下不同NAT類型的穿透打洞策略。
⑤ IPFS(四) 源碼解讀之-p2p
package p2p
import (
"context"
"errors"
"time"
net "gx/ipfs//go-libp2p-net"
manet "gx/ipfs//go-multiaddr-net"
ma "gx/ipfs//go-multiaddr"
pro "gx/ipfs//go-libp2p-protocol"
pstore "gx/ipfs//go-libp2p-peerstore"
p2phost "gx/ipfs//go-libp2p-host"
peer "gx/ipfs//go-libp2p-peer"
)
//P2P結構保存當前正在運行的流/監聽器的信息
// P2P structure holds information on currently running streams/listeners
type P2P struct {
//監聽器
Listeners ListenerRegistry
//數據流
Streams StreamRegistry
//節點ID
identity peer.ID
//節點地址
peerHost p2phost.Host
//一個線程安全的對等節點存儲
peerstore pstore.Peerstore
}
//創建一個新的p2p結構
// NewP2P creates new P2P struct
//這個新的p2p結構不包含p2p結構中的監聽器和數據流
func NewP2P(identity peer.ID, peerHost p2phost.Host, peerstore pstore.Peerstore) *P2P {
return &P2P{
identity: identity,
peerHost: peerHost,
peerstore: peerstore,
}
}
//新建一個數據流 工具方法 構建一個有節點id,內容和協議的流
func (p2p P2P) newStreamTo(ctx2 context.Context, p peer.ID, protocol string) (net.Stream, error) {
//30s 後會自動timeout
ctx, cancel := context.WithTimeout(ctx2, time.Second 30) //TODO: configurable?
defer cancel()
err := p2p.peerHost.Connect(ctx, pstore.PeerInfo{ID: p})
if err != nil {
return nil, err
}
return p2p.peerHost.NewStream(ctx2, p, pro.ID(protocol))
}
//對話為遠程監聽器創建新的P2P流
//創建一個新的p2p流實現對對話的監聽
// Dial creates new P2P stream to a remote listener
//Multiaddr是一種跨協議、跨平台的表示格式的互聯網地址。它強調明確性和自我描述。
//對內接收
func (p2p P2P) Dial(ctx context.Context, addr ma.Multiaddr, peer peer.ID, proto string, bindAddr ma.Multiaddr) ( ListenerInfo, error) {
//獲取一些節點信息 network, host, nil
lnet, _, err := manet.DialArgs(bindAddr)
if err != nil {
return nil, err
}
//監聽信息
listenerInfo := ListenerInfo{
//節點身份
Identity: p2p.identity,
////應用程序協議標識符。
Protocol: proto,
}
//調用newStreamTo 通過ctx(內容) peer(節點id) proto(協議標識符) 參數獲取一個新的數據流
remote, err := p2p.newStreamTo(ctx, peer, proto)
if err != nil {
return nil, err
}
//network協議標識
switch lnet {
//network為"tcp", "tcp4", "tcp6"
case "tcp", "tcp4", "tcp6":
//從監聽器獲取新的信息 nla.Listener, nil
listener, err := manet.Listen(bindAddr)
if err != nil {
if err2 := remote.Reset(); err2 != nil {
return nil, err2
}
return nil, err
}
//將獲取的新信息保存到listenerInfo
listenerInfo.Address = listener.Multiaddr()
listenerInfo.Closer = listener
listenerInfo.Running = true
//開啟接受
go p2p.doAccept(&listenerInfo, remote, listener)
default:
return nil, errors.New("unsupported protocol: " + lnet)
}
return &listenerInfo, nil
}
//
func (p2p *P2P) doAccept(listenerInfo *ListenerInfo, remote net.Stream, listener manet.Listener) {
//關閉偵聽器並刪除流處理程序
defer listener.Close()
//Returns a Multiaddr friendly Conn
//一個有好的 Multiaddr 連接
local, err := listener.Accept()
if err != nil {
return
}
stream := StreamInfo{
//連接協議
Protocol: listenerInfo.Protocol,
//定位節點
LocalPeer: listenerInfo.Identity,
//定位節點地址
LocalAddr: listenerInfo.Address,
//遠程節點
RemotePeer: remote.Conn().RemotePeer(),
//遠程節點地址
RemoteAddr: remote.Conn().RemoteMultiaddr(),
//定位
Local: local,
//遠程
Remote: remote,
//注冊碼
Registry: &p2p.Streams,
}
//注冊連接信息
p2p.Streams.Register(&stream)
//開啟節點廣播
stream.startStreaming()
}
//偵聽器將流處理程序包裝到偵聽器中
// Listener wraps stream handler into a listener
type Listener interface {
Accept() (net.Stream, error)
Close() error
}
//P2PListener保存關於偵聽器的信息
// P2PListener holds information on a listener
type P2PListener struct {
peerHost p2phost.Host
conCh chan net.Stream
proto pro.ID
ctx context.Context
cancel func()
}
//等待偵聽器的連接
// Accept waits for a connection from the listener
func (il *P2PListener) Accept() (net.Stream, error) {
select {
case c := <-il.conCh:
return c, nil
case <-il.ctx.Done():
return nil, il.ctx.Err()
}
}
//關閉偵聽器並刪除流處理程序
// Close closes the listener and removes stream handler
func (il *P2PListener) Close() error {
il.cancel()
il.peerHost.RemoveStreamHandler(il.proto)
return nil
}
// Listen創建新的P2PListener
// Listen creates new P2PListener
func (p2p P2P) registerStreamHandler(ctx2 context.Context, protocol string) ( P2PListener, error) {
ctx, cancel := context.WithCancel(ctx2)
list := &P2PListener{
peerHost: p2p.peerHost,
proto: pro.ID(protocol),
conCh: make(chan net.Stream),
ctx: ctx,
cancel: cancel,
}
p2p.peerHost.SetStreamHandler(list.proto, func(s net.Stream) {
select {
case list.conCh <- s:
case <-ctx.Done():
s.Reset()
}
})
return list, nil
}
// NewListener創建新的p2p偵聽器
// NewListener creates new p2p listener
//對外廣播
func (p2p P2P) NewListener(ctx context.Context, proto string, addr ma.Multiaddr) ( ListenerInfo, error) {
//調用registerStreamHandler 構造一個新的listener
listener, err := p2p.registerStreamHandler(ctx, proto)
if err != nil {
return nil, err
}
//構造新的listenerInfo
listenerInfo := ListenerInfo{
Identity: p2p.identity,
Protocol: proto,
Address: addr,
Closer: listener,
Running: true,
Registry: &p2p.Listeners,
}
go p2p.acceptStreams(&listenerInfo, listener)
//注冊連接信息
p2p.Listeners.Register(&listenerInfo)
return &listenerInfo, nil
}
//接受流
func (p2p *P2P) acceptStreams(listenerInfo *ListenerInfo, listener Listener) {
for listenerInfo.Running {
//一個有好的 遠程 連接
remote, err := listener.Accept()
if err != nil {
listener.Close()
break
}
}
//取消注冊表中的p2p偵聽器
p2p.Listeners.Deregister(listenerInfo.Protocol)
}
// CheckProtoExists檢查是否注冊了協議處理程序
// mux處理程序
// CheckProtoExists checks whether a protocol handler is registered to
// mux handler
func (p2p *P2P) CheckProtoExists(proto string) bool {
protos := p2p.peerHost.Mux().Protocols()
for _, p := range protos {
if p != proto {
continue
}
return true
}
return false
}
⑥ p2p網貸系統源碼怎麼使用
杭州融都網貸系統,專注於高端定製的平台就比較安全,有專門人員定期維護,檢查漏洞,補丁跟新等,而且伺服器部署高安全。全體24小時都有人在時刻檢查 特別穩定
⑦ 投屏解析p2p版是什麼意思
peer to peer
就是點對點傳輸的意思
網路中p2p的技術意義是指:計算機網路,其中每個客戶計算機都可以作為其他計算機的伺服器,允許對文件和外圍設備的共享訪問,而不需要中央伺服器。也可簡單的理解為:一對一或點對點傳輸,平等共享資源的意思。具體在網路中的應用有視頻或音頻資料的p2p共享模式。這種模式屬於不計較版權的,可以由看客的計算機在收看收聽的同時,共享給其它就近的想看想聽的客戶,而不需要通過總部統一發布。
⑧ p2p的原理
P2P軟體是基於P2P技術工作的
1、什麼是p2p
P2P是一種技術,但更多的是一種思想,有著改變整個互聯網基礎的潛能的思想。
(1)p2p的概念
P2P是peer-to-peer的縮寫,peer在英語里有「(地位、能力等)同等者」、「同事」和「夥伴」等意義。這樣一來,P2P也就可以理解為「夥伴對夥伴」的意思,或稱為對等聯網。目前人們認為其在加強網路上人的交流、文件交換、分布計算等方面大有前途。
簡單的說,P2P直接將人們聯系起來,讓人們通過互聯網直接交互。P2P使得網路上的溝通變得容易、更直接共享和交互,真正地消除中間商。P2P就是人可以直接連接到其他用戶的計算機、交換文件,而不是像過去那樣連接到伺服器去瀏覽與下載。P2P另一個重要特點是改變互聯網現在的以大網站為中心的狀態、重返「非中心化」,並把權力交還給用戶。 P2P看起來似乎很新,但是正如B2C、B2B是將現實世界中很平常的東西移植到互聯網上一樣,P2P並不是什麼新東西。在現實生活中我們每天都按照P2P模式面對面地或者通過電話交流和溝通。
即使從網路看,P2P也不是新概念,P2P是互聯網整體架構的基礎。互聯網最基本的協議TCP/IP並沒有客戶機和伺服器的概念,所有的設備都是通訊的平等的一端。在十年之前,所有的互聯網上的系統都同時具有伺服器和客戶機的功能。當然,後來發展的那些架構在TCP/IP之上的軟體的確採用了客戶機/伺服器的結構:瀏覽器和Web伺服器,郵件客戶端和郵件伺服器。但是,對於伺服器來說,它們之間仍然是對等聯網的。以email為例,互聯網上並沒有一個巨大的、唯一的郵件伺服器來處理所有的email,而是對等聯網的郵件伺服器相互協作把email傳送到相應的伺服器上去。另外用戶之間email則一直對等的聯絡渠道。 當然但是過去的5年裡,互聯網的發展至少從表面上遠離了P2P,互聯網上絕大部分的節點也不能和其他節點直接地交流。Napster正是喚醒了深藏在互聯網背後的對等聯網。Napster的文件共享功能在區域網中共享目錄也是再平常不過的事情。但是Napster的成功促使人們認識到把這種「對等聯網」拓展到整個互聯網范圍的可能性。當然,在許多人的眼中,Napster並不是純粹的P2P,它仍然需要一個處於中心協調機制。
事實上,網路上現有的許多服務可以歸入P2P的行列。即時訊息系統譬如ICQ、AOL Instant Messenger、Yahoo Pager、微軟的MSN Messenger以及國內的OICQ是最流行的P2P應用。它們允許用戶互相溝通和交換信息、交換文件。用戶之間的信息交流不是直接的,需要有位於中心的伺服器來協調。但這些系統並沒有諸如搜索這種對於大量信息共享非常重要的功能,這個特徵的缺乏可能正 是為什麼即時訊息出現很久但是並沒有能夠產生如Napster這樣的影響的原因之一。
另外一個可以歸入P2P是拍賣網站譬如eBay,人們在總結eBay的模式的時候用了C2C,是不是和P2P有一點類似?eBay就是一個將人們聯系的和交易物品的社區,用戶可以方便的搜索其他用戶叫賣的商品。eBay提供了一些使得交易得以順利進行的服務,但是交易是直接在用戶之間進行的。如果將「交易」的概念推廣,C2C就是P2P的一個特例,這里人們互相交換的是商品。
但如果仔細深究的話,Napster和即時訊息在賦予用戶之間直接交流的能力、eBay使用戶可以直接交易的同時,卻破壞了伺服器端的那種自互聯網出現之初就存在的對等聯網思想,因為它們都需要有一個位於中心的伺服器來協調,而不是分布在世界上不同地方的、對等聯網的許多伺服器。這也正是諸如Gnutella和Freenet不斷的宣稱它們創造了「純粹」的P2P,完全沒有中心伺服器的P2P服務。
(2)p2p的思想溯源:回到互聯網的本質
如果回顧一下,我們會發現在WWW出現伊始P2P就是互聯網的本質特徵之一。人們各自建立網頁、互相做鏈接,人們上網是沿著鏈接沖浪。那時的web是真正的「網」(web)。但是當Yahoo!和Lycos建立了搜索引擎和門戶站點後,人們上網的方式被改變了,人們從此到一個地方去獲取所有的信息。記得_blank">新浪曾經有一段時間說它們是「目標站點」模式,但是如果多問一句,現在人們一條一條地閱讀_blank">新浪的新聞,在頭腦中還有一個「網」的概念嗎?最大的問題是,這些站點控制了信息的流動、充斥了過時的信息、阻礙了真正的交流,或者對於很多人來說,另外還有太多的廣告。 P2P就是把控制權重新還到用戶手中去。人們通過P2P可以共享硬碟上的文件、目錄甚至整個硬碟。這種能量是非常令人激動的,那些費心存儲在自己的硬碟上的東西肯定是我們認為最有價值,所有人都共享了他們認為最有價值的東西,這將使互聯網上信息的價值得到極大的提升。是不是有一種和WWW剛剛出現的時候同樣的激動呢?有一點。
因為每個Peer都代表了其後的人,基於自組織的網上社區也正在顯現。與門戶站點從上而下建立社區的方式不同,人們將以自發的方式形成社區。
當人們加入P2P網路的時候,所有人都擁有了平等的機會,所有人都擁有了極容易地在網路上創造「內容」的機會。當然,真正在網路上創造或提供內容的人還是少數的,據統計Gnutella的用戶中僅僅有2%向其他用戶提供了內容,即使在比較活躍的Usenet張貼文章的用戶也僅占所有用戶的7%。但是,P2P第一次使得所有上網的人都擁有了平等的機會。
下面試圖用三句話來揭示P2P的影響:
對等聯網:是只讀的網路的終結(Peer-to-peer is the end of the read-only Web)
對等聯網:使你重新參與互聯網(Peer-to-peer allows you to participate in the Internet again)
對等聯網:使網路遠離電視(Peer-to-peer steering the Internet away from TV)如上文所言,P2P不是一個新思想,從某些角度看它甚至是整個最初創建互聯網的最基本的思想。我們不妨花時間作一點回顧。
互聯網的發展於近現代的許多尖端科學技術的發展模式並無不同,即都是先在軍事工業形成,再轉到民用領域。互聯網發源於至今看來也十分新穎的戰略思想:為了避免敵人的毀滅性武器命中全國的軍事指揮控制中心,應該怎麼辦?傳統的方法是一方面想方設法盡可能地不讓敵人知道中心的確切位置,另一方面提高中心的抵禦打擊的能力。
但在當今的核武器年代,對方有著連一個星球都可以炸毀的核彈,再固若金湯的防禦措施一旦受到攻擊肯定馬上化為烏有。而只要有機密存在,總有打探出機密的方法,所以靠保密中心所在位置的方法也不是長遠之計。在這種情況下,美國的軍事人員充分發揮逆向思維,想到既然不可能長期、有效地保護中心免受攻擊,那麼還不如根本不設中心!
讓每一個基地乃至每一台電腦都能獨立運作,這么一來等於有了無數中心,敵人除非真的將這個星球炸了,否則其中一個基地或電腦受損,也不影響其他基地或電腦繼續發揮作用。正是這種「非中心化」的思想成為形成互聯網最基本的概念。
但是許多技術出現之後往往並不會完全按照原先的設計發展,伺服器/客戶機的架構逐漸變成了互聯網的主流,瀏覽變成了人們在互聯網上最主要的生存方式。互聯網的普通用戶似乎在慢慢的退化、和電視觀眾一樣被動地瀏覽著大網站們創造的內容。
人們在網路上的主要活動訪問了在這么門戶站點上,讀新聞、參與討論組、聊天。但是這使得設計的互聯網的一個特性消失了——如果Yahoo因故中斷服務如出現什麼情況?這種假設不太容易看到,但是年初的黑客攻擊各大網站造成的混亂似乎可以給我們一點聯想的線索。
上面提到像Napster和即時訊息還是需要位於中心的伺服器,那麼Gnutella網站上的一句話可能表達了它們所推廣的「純粹」的P2P所包含的「非中心化」的理念:設計Gnutella是為了在核戰中生存(Gnutella Is Designed to Survive Nuclear War)。
它的網站上這樣描述,紐約的用戶受到攻擊至多隻會影響那個地區的部分用戶,而其他地方的Gnutella用戶還能正常的使用,這不正是互聯網最初的理想嗎?
(3)Napster帶來的革命
Napster是去年當時由只有18歲的肖恩·范寧(Shawn Fanning)開發的,它提供服務允許音樂迷們交流MP3文件。它與先前也被推上被告席的提供免費音樂下載MP3.com的不同就是在Napster伺服器沒有一首歌曲,Napster提供了一個新的軟體供音樂迷在自己的硬碟上共享歌曲文件,搜索其他用戶共享的歌曲文件,並到其他也使用Napster服務的用戶硬碟上去下載歌曲。Napster在短時間里吸引了5000萬用戶,最終,它被五大唱片商以侵犯版權推上被告席而成為世界的焦點。
可能從來沒有一個行業象唱片業這樣,生存會因為一個小小的軟體而受到如此深重的威脅。對於Napster引起的版權問題有過很多的討論,但是多花一些時間討論還是值得的,因為這個案件決定了也決定了P2P文件共享這一分支的前途,也決定了未來如何處理互聯網上的版權問題。
10月31日原告之一BMG公司和Napster達成和解協議。輿論認為這表明唱片業意識到通過數字方式發布音樂將是不可阻擋的潮流,消滅Napster也無法阻止其他模仿Napster的服務商出現。因此還不如與之合作改變Napster,將之變成在線音樂銷售的渠道。現在的唱片工業面臨的可能不是如何「像壓碎一個雞蛋」那樣壓碎,而是與之合作,將Napster的5000萬用戶變成自己的客戶。也就是將Napster的模式變成「合法化的Napster」模式。唱片工業的困境是如何防止那些Napster的模仿者繼續免費提供歌曲。
2000年2月12日,美國舊金山第九巡迴上訴法院的三名法官就音樂網站Napster版權糾紛案作出裁決,認為它侵害了各大唱片公司的版權。但是三名法官並沒有應唱片公司的要求,決定立即關閉網站,而是把最初的判決送回給低一級的地方法院。法官們說,這項裁決內容過於復雜,需作進一步澄清。但錯綜復雜的法律過程和長達58頁的判決書反映了現在既缺乏與互聯網相關的版權法,也缺乏相應的司法實踐。
但是,不管Napster案的結果如何都不能改變Napster後面的技術和思想給互聯網帶來的影響。「魔鬼」已經鑽出了魔瓶,而魔瓶也已經被打破了。對於唱片界來說,至少它們銷售唱片的方式被徹底改變了。下一個可能是好萊塢的電影工業,壓縮技術和寬頻網路將使得人們會在網路上輕易地傳輸整部電影。
事實上合法化的網路上已經出現了許多試圖推出「合法化的Napster」模式的公司,譬如由Napster的創辦人之一創辦的lightshare.com和Flycode.com。P2P對於唱片商來說的確有吸引力,如果它們能夠從用戶身上收費的話。對於利用諸如一個集中的站點提供收費的mp3音樂下載,用戶每次從網站下載的時候,網站都必須向電信交流量費,而使用P2P則使得這部分費用不再存在了。因此唱片商獲得更多的利潤,用戶也應該可以得到更便宜的音樂。
從某種意義上軟體也好像預測到了大規模盜版和文件共享可能帶來的影響,這主要歸功於開放源碼軟體給軟體業帶來的「頭腦風暴」。在亞洲和東歐,軟體業已經在反對盜版上打了敗仗。這也正是微軟極力推廣一種「軟體注冊模式」,把軟體作為按月付費的服務出售,而不再是向過去那樣出售容易復制和盜版的硬拷貝。
當然,對所謂「合法化的Napster」模式還是有很多質疑。P2P的這種文件共享功能似乎沒有帶來什麼附加值,盡管這個過程可能是非常有趣的。從另一方面來說,這項技術可能被用來推動人們重新參與互聯網、創造他們自己的內容,這也許是價值所在。所有的社區網站都有一個「夢想」,讓用戶互動來產生內容,但是由於由上而下創建的社區的最根本上的問題,這種夢想從來沒有真正實現過。P2P或許可以改變這一點。
Napster創造的奇跡同時也是揭示了在互聯網時代普通人也具有改變整個世界的能力。當肖恩·范寧在波士頓的東北大學校園開發Napster的時候,他只不過是想和他在維吉尼亞的朋友共享mp3歌曲文件。現在這個小軟體改變了整個世界。
(4)p2p改變了什麼?內容轉移到「邊緣」
在回顧了Napster了問題和困境之後,下面將看看P2P的更多激動人心的東西和消除圍繞這個新詞的種種誤解,以及看看P2P的機會主要在哪兒。
P2P帶來的一個變化就是改變了「內容」所在的位置,內容正在從「中心」走向「邊緣」,也就是說內容將主要不是存在幾個主要的伺服器上,而是存在所有用戶的個人電腦上。
Napster的成功使我們不得不去質疑流傳已久的兩個斷言,「應用服務提供商(ASP)是未來趨勢」和「個人電腦死了」。ASP的一個基本假設就是對於大多數客戶來說購買和維護高性能的伺服器的成本太高了,但是P2P使得每個人辦公桌上的電腦都可以成為「伺服器」。用戶原來是用台式電腦准備好數據之後再把數據上載到伺服器上去,而使用P2P將不再需要這個過程。「個人電腦死了」這個斷言就是個人電腦將主要用來瀏覽互聯網、字處理等,因此最簡單的瘦客戶機就可以滿足需求。P2P使得個人電腦再一次成為「中心」。P2P使得個人電腦重新煥發活力、不再是被動的客戶端,而成為具有伺服器和客戶端的特徵的設備,個人電腦將重新成為互聯網的中心。
互聯網的存儲模式將由現在的「內容位於中心」模式轉變為「內容位於邊緣」模式。從這個角度看P2P帶來了幾個改變:
首先,客戶不再需要將文件上載到伺服器,而只需要使用P2P將共享信息提供出去;
其次運行P2P的個人電腦不需要固定IP地址和永久的互聯網連接,這使得那些撥號上網的用戶也可以享受P2P帶來的變革,這部分用戶在所有用戶中佔有極大的比重;
最後,P2P完全改變過去控制互聯網的客戶機/伺服器模式,消除客戶機和伺服器二者之間的差別。
上文對Napster所遭遇的法律問題有很多討論,但是換個角度來闡述,盜版問題往往也正顯示存在大量未能滿足的需求。Napster的驚人成功(這里指吸引大量用戶而不是獲得利潤)是一種難得的對P2P的概念上可行性的證明,揭示了P2P改變互聯網的潛力。直通桌面的寬頻網路逐漸成為現實、個人電腦越來越強大足以勝任「伺服器」功能也從另外的方面確保P2P發揮其能量。
個人電腦取代位於中心的伺服器成為內容的主要存儲地將對互聯網的幾個主要發展方向有著意義深遠的影響:這可能改變Windows和Linux幾年的「戰爭」的局面,當「桌面」和伺服器逐漸融合,微軟可能會極力推廣其基於Windows2000的Web服務和「內容處於邊緣」(內容處於桌面)模式,從而可能破壞Linux在伺服器市場上存在的基礎。
提供免費個人主頁服務的公司存在的一個理由就是目前互聯網使得普通用戶很難擁有自己的伺服器放置自己的內容。可以預言類似Napster的服務將會出現供人們在自己的個人電腦上發布主頁和內容。
WAP等移動服務協議目前還主要關注讓人們去使用處於中心的商業服務如新聞、股票信息等。但更多的時候人們最需要的信息是那些在他們的個人電腦上的信息,P2P使這成為可能。人們可以通過無線聯網P2P訪問他們的個人電腦,這也就是一些公司所宣傳的個人化P2P(Personal P2P)的「無線版本」。
當然,這也不是說使用P2P的個人電腦可以取代伺服器,那些安全的備份和需要專家來不斷更新的數據還將存在於位於中心的伺服器上。 可以這樣看待P2P帶來的轉變,「內容位於中心」模式較好的適應了互聯網初期的情況,個人電腦性能太差因而需要有專門的伺服器、帶寬太窄使得個人電腦不得不退化到被動瀏覽。寬頻互聯網、更穩定的更高性能的個人電腦使得我們有理由預言下一個5年將是由「內容位於邊緣」模式主導。
(5)重新解讀P2P
每個具有劃時代意義的創新出現的時候它往往可能被人們誤讀。P2P這次也不例外,Napster讓人們開始關注P2P,但也使得許多人認為P2P就是歌曲交換、文件交換,甚至認為P2P和盜版有著必然的聯系。可以說人們對P2P的理解是被誤導的和不完全的。
自由軟體(Free software)出現之初也面臨著誤讀的困境,人們開始的時候將Free理解為免費的,從而認為自由軟體是不可靠的、認為自由軟體運動是激進的「反文化的」。事實上Free更多的應該指自由地探索想法、在軟體中表達出來和共享軟體。這一點對自由軟體的鼓吹者們來說是自然而然的,但是需要有人去告訴商界、媒體和公眾自由軟體在經濟上和邏輯上是可行的。當時著名出版人O』reilly組織了一次自由軟體峰會重新定義自由軟體,將自由軟體改名為開放源碼軟體(open source software)。這一重新定義使得人們開始撥開誤解的烏雲,了解Free的本質。開放源碼將人們從有缺陷的軟體、鎖定效應和傳統的軟體分發渠道中解脫出來。自由表示合作將可以跨越公司的邊界、共享基礎性的開發,使人們可以把注意力集中到高附加值的服務上去。 今年8月,O』Reilly又組織另一次峰會來幫助人們認識P2P的潛力和消除Napster、Gnutella造成的P2P是盜版技術的負面影響。另外,他認為目前P2P的狀態類似於「盲人摸象」,P2P技術的領導者們每個人都看到了P2P這頭「巨象」的一些特徵。,如果他們能夠有機會交流思想,P2P將會更快地發展。這次P2P峰會主要有三個目的:定義P2P,我們要從中的到什麼以及為什麼;描述P2P的機會,P2P能解決什麼樣的問題;形成一個提供給大眾的關於P2P的信息,消除那些負面影響。
參與P2P峰會的有媒體不斷報道的那些提供文件交換服務如Napster、Gnutella、Freenet的開發者,也有那些試圖挖掘P2P分布計算能力的公司和組織如Popular Power、SETI@home、distributed.net等的開發者。後面的三家公司希望使用P2P技術集中那些聯接在網路上的電腦的空閑的CPU時間片斷、內存空間、硬碟空間來替代「超級計算機」。其它正在進行的P2P應用還有,IBM、微軟、Ariba也在合作開展一個名為UDDI的項目以將B2B電子商務標准化;Eazel正在建立下一代的Linux桌面;Jabber已經開發了一種基於XML、開放的即時訊息標准,Jabber被認為是建立了未來使用P2P數據交換的標准;由Lotus Notes的開發者創建的Groove試圖「幫助人們以全新的方式溝通」;英特爾也在推廣它的P2P技術以幫助更有效地使用晶元的計算能力。
列這樣一個名單有一點枯燥,尤其是對於那些對於具體細節沒有太多興趣的讀者,但這又是必要的。因為這些描述可以讓我們更全面的了解。
(6)尚未被了解的P2P
Napster是與設備相關的,用戶連接到到由它創建的P2P網路上是為了獲取Mp3歌曲文件。但是對於即時訊息這一類P2P應用來說是完全不同的,別人連接的目的是和另一個Peer交流,而不必管他使用的是電腦、手持電腦或者手機。P2P提供了在網路上與設備無關的實時交流的能力。
這種將把用戶實時的連接起來的能力是P2P最令人感到激動的特性。事實上我們可以從AOL的AIM、國內Oicq受歡迎的程度認識到這個事實。
能夠實時地尋找和聯絡需要的人是商業應用的基本要求,電話可以做到這一點,而在網路上最常用的E-mail並不能做到這一點。因此,即時訊息將不僅僅是一個有趣的服務,更多的它將是下一個最基本的互聯網商業工具。即時訊息現在看起來可能成為諸如客戶服務、供應鏈管理等商業應用的平台。開發了一個開放源碼的基於XML和Java即時訊息服務的Jabber似乎正是創建了一個這樣的平台。Jabber的開發者似乎刻意集中了互聯網現有的所有激動人心的東西:P2P、Java、XML和開放源碼。它是不是有這種潛力呢?我們最好拭目以待,但Jabber的模式至少要比Napster要清晰得多。
Negroponte在其《數字化生存》中曾經有一個著名的論述,「網路上的東西將比人要多」。P2P將使得這些「東西」之間的直接交流成為可能,網路上每個設備都是「活躍」的,而不是像過去那樣有部分是非常活躍,而有的則被動的,有時候直接交流的那些設備可能都是某一個用戶自己的,譬如說掌上電腦和台式電腦的數據同步是最好的例子。如果用戶的掌上電腦上有些數據和內容是台式電腦上沒有的,台式電腦也應該能夠向掌上電腦要求獲取那些信息,這應該跟我們通過Napster到其他用戶那兒去搜索和下載mp3歌曲一樣。
最重要的一點是,不是網路上的節點數目而是這些節點如何參與網路決定網路是否強大、是否有價值。怎樣使得網路上幾億的人和更多的設備都活躍地參與呢?P2P正是一系列架構、技術、策略的開端,它使得互聯網的這一理想開始變為現實。現在人們看到的和預言的都只是冰山露出的一個小角,更多的還在水下。
(7)P2P中的P是人(People)!
Dave Winner的論斷P2P中的P是人(people)!這可能是我讀到的關於P2P最深刻的解讀之一。
事實上,我們所處的真實生活是P2P的環境,人們可以和其他人直接地的交流。信息技術將我們帶到了網路空間,在網路空間我們仍然希望還能夠按照原來的P2P方式交流溝通。盡管互聯網本質上是支持對等交流模式,但是網路的發展給對等交流增加了許多障礙。
正如許多技術專家所指出的,動態IP地址、_blank">防火牆、代理伺服器從技術上使得對等連接變得很困難。更不用說目前的網路主導模式已經發展成為伺服器/客戶端模式,人們在網路上只能被動的接受那些大公司諸如Yahoo!、ABCnews.com等提供的信息,交流是非常困難的。(當然,在現實生活中諸如空間、社會等級等也束縛了人們的對等交流。但是如果網路能夠使我們看到對等交流的可能性,為什麼不去追求?)
可以這樣類比,互聯網的出現和電話的發明是具有同樣的意義的,但是互聯網最開始的主要特徵是非實時的,更類似於傳真,而沒有提供像電話那樣實時交流,現在P2P的即時訊息可能使得互聯網上的實時交流變得和Web頁面、E-mail那樣普遍和不可或缺。
對於所有的P2P應用來說,最先要做的就是恢復互聯網曾經失去的對等聯網能力。這也正是Napster從概念上最大的缺陷。(email是具有P2P交流的特徵的,但email缺乏實時交流的能力,它類似與傳真,但我們還需要「電話」的。)
從「人」的角度上將,P2P發展的要點並不是P2P網路架構是如何,而是P2P將人們在網路上連接起來了,人們可以在網路這個更迅疾的媒介上處理那些需要溝通的問題。這是最重要的。盡管到今天還有人在懷疑互聯網作為零售商業和B2B媒介的有效性,但是互聯網已經從根本上改變了我們的交流方式是不需要任何討論的。過分的談了「純粹的」的、完全消除控制的P2P是毫無意義的。中心化或者非中心化都只是工具,都是為了創造出使人們可以更有效地溝通的工具。
人類在現實生活中的經驗至今仍只有極少的部分被應用到網路上,如新聞、B2C、B2B。現在,人們最常使用的P2P被移植到了網路空間。P2P可能改變一些我們已經熟知的、習慣了的產品和服務,也會創造更多。
究竟會出現些什麼?預言未來的最好辦法是去創造。