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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单易懂的P2P通信原理

發布時間:2024/3/12 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单易懂的P2P通信原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

P2P就是端到端

我發一條微信給你,這不是P2P。因為消息并不是直接從我手機發送到你的手機,而是從我手機先發送到微信的服務器,服務器再轉發到你的手機上(當然,轉發給你之前,還會把數據存到服務器),像下邊這樣:

P2P是這樣:

P2P技術要解決的問題

目前使用的終端設備(如手機),絕大部分都僅僅擁有特定網絡下的內網IP,而處在不同內網環境中的設備并不能夠使用內網IP直接進行通信。如何通過一定的手段讓這兩個處在不同內網環境的設備進行直接通信呢?

P2P的知識點

我們的終端設備(比如手機),一定是存在于某個內網環境下邊的,當設備與內網之外的其他設備進行通信時,需要將內網IP轉換為一個可以被全球任意設備訪問到的公網IP,這種技術叫做NAT,全稱是Network Address Translation,即網絡地址轉換。

根據轉換方式的不同,出現了不同的NAT,理論上有基本NAT,也有一對多NAT,但是現實中基本都是一對多NAT,根據內網設備與外網進行通信時不同的映射規則,又分為以下幾種類型:

類型闡述
錐型NAT(Full-cone NAT)內網ip1:port1會映射到公網ip2:port2,ip1:port1發往外網的包都將通過ip2:port2發出;外部任何ip3:port3都可以通過發送數據包給ip2:port2從而與ip1:port1進行通信。
(地址)限制型錐型NAT((Address)-restricted-cone NAT)內網ip1:port1會映射到ip2:port2,ip1:port1發往外網的包都將通過ip2:port2發出;外部只有收到過ip2:port2數據包的ip3才可以發送數據包給ip2:port2從而與ip1:port1進行通信。
端口限制型錐型NAT(Port-restricted cone NAT)內網ip1:port1會映射到ip2:port2,ip1:port1任何發往外網的包都將通過ip2:port2發出;外部只有收到過ip2:port2數據包的ip3:port3才可以發送數據包給ip2:port2從而與ip1:port1進行通信。
對稱性NAT(Symmetric NAT)內網ip1:port1任何一個發往外網ip3:port3的請求,都將使用獨有的公網ip2:port2;外部只有收到過ip1:port1數據包的服務才能返回數據。

總的來說,我們程序發出的包有源地址和源端口,經過NAT之后,映射出的公網地址和端口是否會隨著目的地址和目的端口的變化而變化,決定了它是錐型還是對稱型。這句話有點拗口,但我覺得說的很清楚。同時,只有錐型NAT才能進行P2P,原因是由P2P連接的建立過程決定的。

P2P連接建立過程

P2P連接的建立首先需要一個擁有公網IP的中間服務器S,兩個結點P1和P2。

1、結點P1和P2分別發送數據包給S,數據包在經過NAT時,ip和port進行轉換,ip轉換為公網ip,port是否轉換需要看NAT的具體實現。S拿到轉換后的P1和P2的地址。
2、S將P1的地址發給P2,將P2的地址發給P1。這里的地址都是NAT地址。
3、P1收到P2地址后,嘗試建立連接,首先發送消息包給P2(其實是P2的NAT),P2也同樣這樣做,在兩個結點都收到對方的消息包之后,就可以進行通信了。這個過程也叫做打洞。

之所以需要有打洞這個過程,是因為,NAT會丟棄自己不認識的地址包,讓NAT認識它的方法,就是發出一個到這個地址的數據包。比如讓A認識B,那就讓A發一個數據包給B,不然,B發給A的數據包就會被丟棄。所以打洞的過程不是為了收到對方的數據包,而是為了發送數據包給對方,從而認識對方。這樣,之后的通信就可以正常進行了。

剛才之所以說只有錐型NAT才可以進行P2P,原因在第三步可以看出來。結點進行打洞的地址,是通過服務器拿到的,而這個地址在對稱型NAT的情況下,并不是一定的,可能會隨時發生變化。也就是說,P1與服務器通信使用的NAT地址和P2與P1通信使用的NAT地址是不同的(一般情況都是端口不同)。甚至P1與服務器通信使用的NAT地址都在不斷的發生變化。這樣讓我們沒辦法拿到隱藏在NAT后邊內網設備的NAT入口,也就沒辦法進行P2P通信了。

P2P也用到了一個服務器,跟微信一樣。但是不同的是,P2P中的服務器只作為結點地址的中轉站,而微信的服務器是數據的聚寶盆。P2P讓我們的數據僅通過P2P連接發送,而不經過任何第三方的服務器。

總結

以上是生活随笔為你收集整理的简单易懂的P2P通信原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。