日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

P2P原理以及如何实现(整理)

發(fā)布時(shí)間:2024/3/12 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P2P原理以及如何实现(整理) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言? ? ?

? ?這幾天看了p2p的原理以及實(shí)現(xiàn)的demo,整理一下。一共分為三部分,第一是概念原理,第二是demo實(shí)現(xiàn),第三是p2p協(xié)議相關(guān)以及分類。?

一、概念原理?

比較全面的理解:? https://zhuanlan.zhihu.com/p/30351943

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?http://www.cnblogs.com/pannengzhi/p/4800526.html(推薦

? ? ? ? ? ? ? ? ? ? ? ? ? ? ??http://www.52im.net/thread-50-1-1.html(推薦

? ? ? ? ? ? ? ? ? ? ? ? ? ? ??https://cloud.tencent.com/developer/article/1005974(推薦)

以下(通俗理解)轉(zhuǎn)載來自:https://my.oschina.net/gal/blog/141396???????????

? ? ? ? 最近對(duì)p2p(peer to peer)技術(shù)十分感興趣,以前用VB的時(shí)候曾嘗試過學(xué)習(xí)穿透NAT方面的知識(shí),很可惜那時(shí)候并沒有成功(由于我當(dāng)時(shí)的興趣并不大),現(xiàn)在大學(xué)開始教 C++,突然間對(duì)p2p技術(shù)產(chǎn)生興趣,這有很多方面的原因

? ? ? ??現(xiàn)在基本上很多網(wǎng)絡(luò)應(yīng)用的軟件都涉及p2p技術(shù)(QQ,PPS,對(duì)戰(zhàn)平臺(tái)...),p2p技術(shù)旨在于摒棄以前只能從服務(wù)器獲得資源的觀念,每臺(tái)電腦都是一個(gè)peer,都可以從其他peer上獲取自己想要的資源,而同時(shí)自己也在向他人共享自己的資源.這里有一個(gè)很大的優(yōu)勢(shì)就是可以極大程度節(jié)省服務(wù)器的帶寬.
? ? ? ??打個(gè)比喻,優(yōu)酷和pps,一個(gè)是基于服務(wù)器->客戶端的模式,一個(gè)是p2p技術(shù),優(yōu)酷要想為用戶提供高清視頻只能通過優(yōu)化視頻壓縮(例如最新的H.264)和增大自身服務(wù)器帶寬.而pps完全不用擔(dān)心帶寬問題,只要用戶數(shù)量多的話基本上可以滿速觀看視頻. 在這里在停停,pps采用的是rmvb壓縮封裝,體積比h264flv大上十倍,但是pps依然可以流暢觀看.這就是p2p技術(shù)的優(yōu)勢(shì).
? ? ? ??當(dāng)然,我感興趣的不是p2p在網(wǎng)絡(luò)視頻方面的應(yīng)用,而是他的穿透NAT的技術(shù),只需要提供一個(gè)服務(wù)器(當(dāng)然在p2p下服務(wù)端本身可以是客戶端)就能令兩臺(tái)或多臺(tái)處于不同局域網(wǎng)內(nèi)的電腦通信.另一方面這也算是我學(xué)習(xí)C++網(wǎng)絡(luò)編程的入門口.
? ? ? ??在中國(guó)大部分用戶都使用路由器或交換器之類的其他NAT設(shè)備來共享網(wǎng)絡(luò),這使得不同內(nèi)網(wǎng)的用戶之間的交流變得十分困難,p2p技術(shù)的出現(xiàn)確實(shí)另其變得可行和簡(jiǎn)便.

第二篇:

? ? ? ??首先,在寫這第二篇文章時(shí)我對(duì)現(xiàn)今的p2p技術(shù)的成熟度仍不完全了解,基于udp協(xié)議的p2p技術(shù)可以很確定的說已經(jīng)完全成熟了,但基于tcp協(xié)議的p2p技術(shù)是否成熟在我這幾天的搜索資料中仍然未能得知.雖然最近得到了一份通過p2p使用tcp協(xié)議傳輸文件的源碼,但其真實(shí)性仍然未檢測(cè),由于有許多可能會(huì)影響實(shí)驗(yàn)成敗的干擾因素(例如NAT設(shè)備類型的不同,其結(jié)果可能不同),我想我會(huì)在接下來的時(shí)間主要去驗(yàn)證tcp應(yīng)用于p2p的可行性.

? ? ? ??可能有很多人問,現(xiàn)在不是有很多軟件采用p2p技術(shù)傳輸文件么.這說明tcp用于p2p是可以的.但至少我搜索的資料中很少這方面的消息.我想現(xiàn)在用于文件可靠傳輸有兩個(gè)方法(就我知道而言,聽說還有raw等其他方法),一個(gè)或許就是tcp,這是傳輸協(xié)議上實(shí)現(xiàn)的,另一個(gè)就是利用udp模仿tcp的確保文件準(zhǔn)確完整傳輸?shù)墓δ?大概是什么滑動(dòng)窗口?).

? ? ? ??當(dāng)然這是我日后的工作,現(xiàn)在我要探討的是我目前的成果,就是基于udp協(xié)議的穿透nat的方法.?

? ? ? ??或許還有人不知道NAT是什么,NAT是英文Network Address Translators的縮寫,翻譯過來就是網(wǎng)絡(luò)地址轉(zhuǎn)化器,為什么會(huì)出現(xiàn)NAT呢?主要是因?yàn)閕pv4提供的全球唯一ip已經(jīng)日漸枯竭,也就是ipv4提供的(x.x.x.x)的地址已經(jīng)不足以讓全球每一臺(tái)電腦都擁有唯一的ip地址,所以就有NAT的出現(xiàn)(當(dāng)然,是先出現(xiàn)了NAT才開始慢慢枯竭,因?yàn)槿藗円呀?jīng)預(yù)料到ip遲早會(huì)用完),NAT可使多臺(tái)電腦使用同一個(gè)全球唯一ip,(當(dāng)然最近ipv6就要出了).

? ? ? ??而且,類似路由等NAT設(shè)備還可以防止內(nèi)網(wǎng)主機(jī)受到外網(wǎng)的攻擊,這也就是我們需要穿透NAT的原因,,因?yàn)槁酚芍辉试S內(nèi)網(wǎng)用戶主動(dòng)連接外網(wǎng)用戶,而不允許外網(wǎng)用戶主動(dòng)連接內(nèi)網(wǎng)用戶

? ? ? ??現(xiàn)在按順序講下內(nèi)網(wǎng)于外網(wǎng)連接的步驟(這是理解穿透NAT的阻礙因素的重要部分!!):

? ? ? ??1.內(nèi)網(wǎng)用戶(192.168.1.100)(端口:123)向外網(wǎng)用戶(123.123.123.123)(端口:321)發(fā)送數(shù)據(jù)包

? ? ? ??2.數(shù)據(jù)包經(jīng)過NAT,NAT將數(shù)據(jù)包的ip地址改為外網(wǎng)地址(55.55.55.55),并修改端口為另一個(gè)數(shù),例如:6000

? ? ? ??3,此時(shí)的數(shù)據(jù)包變成這樣: 55.55.55.55:?6000-> 123.123.123.123:321

? ? ? ??4.最后NAT會(huì)留下一條記錄,表明如下指向 123.123.123.123:123 -> 55.55.55.55:6000 ->192.168.1.100:321

? ? ? ??需注意的是只有留下記錄后外網(wǎng)特定方向的數(shù)據(jù)包(上面第四條的方向)才可以傳給內(nèi)網(wǎng)機(jī)器,而且這條記錄只能由內(nèi)網(wǎng)用戶先向外網(wǎng)發(fā)送第一個(gè)數(shù)據(jù)包才可以產(chǎn)生.最重要的是這條記錄只能用于123.123.123.123:123,其他地址發(fā)來的數(shù)據(jù)包NAT是會(huì)拋棄掉的!?

? ? ? ??還有一點(diǎn):就是這條記錄具有生命周期,過了一定時(shí)間會(huì)自動(dòng)刪除!

? ? ? ??了解到這點(diǎn)就可以知道外網(wǎng)和內(nèi)網(wǎng)的通訊的十分簡(jiǎn)單的,只要內(nèi)網(wǎng)用戶事先知道服務(wù)器的地址,而且先向服務(wù)器請(qǐng)求服務(wù)就可以建立連接了!

? ? ? ??但是內(nèi)網(wǎng)與內(nèi)網(wǎng)的用戶該如何實(shí)現(xiàn)通訊??? 試想一下,就算你事先知道對(duì)方的外網(wǎng)ip,但是你發(fā)過去的消息會(huì)被對(duì)方NAT拋棄掉,好吧,你說可以兩個(gè)人同時(shí)向?qū)Ψ桨l(fā)包,但你畫出圖來看看會(huì)發(fā)現(xiàn)也是實(shí)現(xiàn)不了的!

?? ? ? ??試想一下,如果clientA和clientB都同時(shí)向?qū)Ψ降?520端口發(fā)送數(shù)據(jù)包(當(dāng)然,兩邊的NAT都會(huì)拋棄掉他),雖然兩邊都會(huì)留下記錄,但是由于NAT修改了端口號(hào)為某個(gè)數(shù),這樣導(dǎo)致下面兩條記錄:

??????? clientA的NAT: 44.44.44.44:520 -> 55.55.55.55:62000 -> 192.168.1.47:520

??????? clientB的NAT: 55.55.55.55:520 -> 44.44.44.44:75000 -> 192.168.1.5:520

? ? ? ??這兩條記錄明顯不能使clientA和clientB建立起連接,因?yàn)殡p方的NAT都將只接收對(duì)方來自520端口的數(shù)據(jù)包,而對(duì)方發(fā)送數(shù)據(jù)包時(shí)NAT都會(huì)將原始的端口改為62000,75000(這兩個(gè)數(shù)是隨機(jī)的),這樣當(dāng)然不會(huì)建立起連接!

? ? ? ??再回過來想想,如果有一個(gè)處在外網(wǎng)的服務(wù)器可以同時(shí)記錄下雙方的端口號(hào)的話,這樣A與B的通訊不是可以建立了么!!!!


二、Demo實(shí)現(xiàn)

P2P之UDP穿透(C++)基于windows平臺(tái):https://blog.csdn.net/jlccwss/article/details/7180676

P2P之UDP穿透(C++)基于Linux平臺(tái):https://github.com/pannzh/P2P-Over-MiddleBoxes-Demo

三、現(xiàn)有p2p協(xié)議分類與簡(jiǎn)介

https://www.cnblogs.com/cgli/archive/2012/05/11/2496027.html

http://www.cnblogs.com/pannengzhi/tag/P2P/

四、應(yīng)用

BT和磁力鏈接下載原理

詳解什么是BT種子、迅雷下載鏈接、磁力鏈接、電騾等及使用教程

總結(jié)

以上是生活随笔為你收集整理的P2P原理以及如何实现(整理)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。