個人網絡編程之旅——P2P相關話題

最先接觸P2P是大學時利用BitTorrent下載電影和遊戲,當時咱們只知道這個軟件叫bt,給女性同窗介紹此軟件爲何會有如此高效時,簡單講述了一下P2P網絡的特色後,還特地強加一句因此這個軟件叫變態(bt)軟件,如今想起來都可笑,徹底誤解了BitTorrent軟件名的由來。近兩年的工做中由於要涉及到點對點的視頻傳輸,用戶對用戶的視頻傳輸,對這塊也曾經作了較爲系統的學習和研究,今天拿出來和你們簡要分享一下個人理解。git


如下講述我會首先把P2P分爲(point-to-point)和(peer-to-peer)兩個概念來說述,分別針對我工做中所用到的點對點和用戶對用戶的視頻傳輸。
github

第一部分:point-to-point

由於工做中涉及到用戶要看一個安防攝像頭,這其中面臨最大的挑戰是用戶端要如何突破阻礙去直連這個攝像頭,這個阻礙就是NAT,採用的方案就是NAT穿透。有些童鞋要問了,爲何大家不直接採用相似流媒體的轉發呢?爲了減小轉發服務器的成本,咱們會優先讓用戶這一端去直連攝像頭,要知道對於咱們雷鋒式的傳輸免費,幾十萬甚至上百萬攝像頭都走轉發,俺們公司直接倒閉算了。算法

你們應該都瞭解NAT安全

  • 他的積極做用是:解決IP地址短缺;隱藏網絡,安全。服務器

  • 他的消極做用是:破壞了端到端的通訊,使網絡結構複雜。網絡

咱們常見的公司交換機,家用路由器都是NAT設備。less

NAT爲何須要穿透呢?最主要的緣由是nat阻礙了外部網絡主動向NAT設備以後的端發起的鏈接。更詳細的介紹請看維基百科的NAT介紹。 同時不一樣的NAT類型穿透的難度也不一樣,甚至沒法穿透。從編碼實現上看,最多見的NAT穿透技術是UDP打洞 。 給你們引用一幅圖進行一下舉例說明,稍微複雜些的穿透必需要使用到中繼服務器。ide

wKiom1RD1OSTogOgAAJZQ9rijPo515.jpg

請注意並非全部的NAT狀況都能穿透:分別部署在端口限制型——對稱型NAT以後的兩端採用編碼手段很難穿透,對稱型——對稱型NAT以後的兩端採用編碼手段根本沒法穿透。請參見我在知乎上的回答:性能

正好,咱們已經對UDP打洞問題研究了近一個月,對於兩方都是對稱nat的狀況,至少從能夠了解的途徑上(好比google,相關論壇)都沒找到解決方案,咱們本身也進行過測試,不行。學習

可是對於一端是對稱nat,一端是端口限制Cone nat的狀況是能夠打洞成功的,特別是咱們實驗的對稱nat的端口變化仍是有規律的(加1),咱們使用端口猜想的方法進行打洞成功率仍是很是高的。對於端口變化無規律的對稱nat,這個猜想仍是靠算法的設計,你能夠看看文章A New Method for Symmetric NAT Traversal in UDP and TCP

另外若是你是作應用的話建議不要始終把本身侷限於必定要打洞成功的思路上,對於一些路由器是能夠經過配置支持穿透的,好比upnp;對於實在打洞不成功的狀況你能夠經過設計一箇中轉服務器來完成本身的應用;

解決了point-to-point直連的這個技術點,就是其餘領域的技術了,在這就很少說了。

參考資料:我收集的部分NAT資料

第二部分:peer-to-peer

這部份內容聯繫到工做中的場景是不少人要看一個攝像頭,要知道不少安防設備的硬件資源是很吃緊的,大夥一股腦都連上去,設備直接就掛了;另外對安防設備這一端的帶寬要求太大,不合實際。因而咱們就想到了採用對等網絡中利用用戶的資源去服務用戶,好比數個用戶鏈接上了這個攝像頭,其餘更多的用戶就不用直接鏈接攝像頭了,從這幾個已經擁有攝像頭影像的用戶端獲取視頻流便可。

關於對等網絡的知識不少也着實很複雜,我之後有時間會專門寫一篇文章進行講解,今天咱們先簡單講講對等網絡對流媒體傳輸的影響。

對等網絡媒體直播的挑戰

  • 可擴展性:節點規模的增大不影響性能;

  • 帶寬利用率和吞吐率:如何有效的利用上行和下行帶寬;

  • 丟包和擁塞:如何保證服務質量(Quality of Service);

  • 延遲:對等網絡的高度動態性,沒法保證延遲;

  • 異構性:DSL, Wireless LAN, NAT

P2P直播技術幾種類型

單播樹,多播樹,網狀。

單播樹是一種最不穩定的傳輸結構,一旦位於頂端的傳輸節點失效,全部其餘節點均失效。而多播樹結構有較好的適應性。網狀結構的適應性最好,可是也最複雜,我給出一個網狀結構的示意圖

wKiom1RD1RmRkAxVAAEGWcZ0zCs683.jpg

你們看見因爲視頻源把內容傳輸給了多個終端節點,這些終端節點再利用對等網絡的相關技術造成複雜的網狀結構,在這個龐大的傳輸網內大多數節點既是客戶端又是服務端,負擔着本身的責任,貢獻着本身的能力。

這裏有個圖表對這幾種網絡結構的特色進行了比較,你們能夠參看一下

wKioL1RD1XPS4ApjAAHtCXm3ZGo772.jpg

參考資料:《對等網絡:結構、應用與設計》

多看這方面的優秀開源代碼和論文

相關文章
相關標籤/搜索