国产午夜精品一区二区,色综合久久精品亚洲国产,国产精品亚洲lv粉色,少妇伦子伦精品无码STYLES

當前位置:首頁 > 最新資訊 > 行業資訊

IPC流媒體傳輸協議——P2P

Labs 導讀

伴隨視頻物聯網的發展,IPC(IPCamera,網絡攝像頭)已經在家庭安防場景廣泛應用。中國移動移動看家業務提供了以視頻為基礎的場景化安防服務,支持接入IPC、門鎖、貓眼等泛安防智能硬件,用戶通過使用和家親APP可以實現遠程看護、設備對講、監控視頻回放等功能。為了實現以上功能,IPC等設備需使用流媒體傳輸協議發送攝像頭采集到的音視頻媒體流,而APP則通過流媒體傳輸協議獲取媒體流。

如今市面上常見的流媒體傳輸協議有:RTMP、WebRTC、QUIC、P2P、SRT等。移動看家使用的流媒體傳輸協議主要有P2P和SRT。今天,本文先介紹P2P協議。

什么是P2P?

簡單來說P2P就是設備之間不通過中間服務器轉發,直接進行點對點的通信的方式。

那么非P2P是怎樣通信的呢?我們以微信通信為例,簡單介紹一下:

圖1

從圖1中我們可以看到,小明通過微信給小紅發了一條消息,其消息的真實流經路徑是:小明->服務器->小紅。

那么問題就來了,為什么消息要先經過服務器,而不能是直接:小明->小紅?

答:小明的手機在網絡上大概率是無法直接找到小紅的手機。

怎樣理解這句話?請看圖2

圖2

我們都知道,在網絡世界中,是通過IP地址來唯一確定某一臺設備的,但是由于IPv4地址數量的有限性,招致很多設備其實是無法獲取到唯一的IP地址(公網地址),而是使用NAT(網絡地址轉換)技術獲取一個內網地址,多個內網地址共用一個公網地址實現上網。家庭中常見的內網地址有:192.168.X.X 。

公網地址唯一,而內網地址不唯一,所以如果只是知道一個設備的內網IP地址是無法找到對應設備的(除非是剛好處在同一個內網環境中),這也就是為什么小明的手機在網絡上大概率是找不到小紅手機的原因。

而服務器由于有自己的公網地址,故此小明和小紅都可以通過這個公網地址都可以找到服務器,然后通過服務器這個中介,小明和小紅就可以通信了。

從圖2中我們也可以發現,小明的手機連接的路由器A的WAN口的IP地址(公網地址)是:36.23.223.162;小紅的手機連接路由器B的WAN口的IP地址(公網地址)是:183.129.184.211。要是小明能知道自己的公網IP地址,并告知小紅(反過來也是一樣),也就能跳過服務器直接與對方相連。這其實也就是P2P的技術原理。

為什么要使用P2P?

使用P2P的好處有很多,從不同的角度出發可以得到不同的答案。如果站在設備廠商的角度來看,如果他們的設備之間能實現P2P,那就可以減少中轉服務器的流量費用,特別是當數據量大的時候,P2P省流量的優勢就更加明顯,從而降低運營成本。從技術方面來看,P2P 直接跳過服務器中轉,故此只要能連接成功,其傳輸速度從理論上來說會更快。

圖3

怎樣實現P2P?

從圖2的描述中我們知道,如果設備能知道自己本身的公網IP地址和端口,并告知對方,就能實現P2P通信。所以要實現P2P通信,就要解決以下兩個問題:

怎樣獲取自身的公網IP地址和端口

怎樣將獲取到的公網IP地址和端口告知對端

NAT原理

關于怎樣獲取自身的IP公網地址和端口,我們可以參考瀏覽器訪問百度搜索引擎的流程,如下圖:

圖4

圖中路由器下面連接了4個設備:ABCD,假設這4個設備都通過瀏覽器訪問百度(假設都是使用內部端口80),那在路由器上會生成一張NAT映射表,瀏覽器返回數據在通過路由器的時候就通過這張映射表找到對應的內部設備。

從表中我們可以看到,這些設備映射后的外網IP地址是相同的(即路由器的外網IP地址),但是端口不同。故此瀏覽器在返回數據的時候,通過IP+端口,就可以確定唯一的一臺設備(其實這也是NAT技術能實現多個設備只使用一個公網地址就能獨立上網的基本原理)。同理,如果這時候小明想和設備A通信,那小明只需要向設備A映射的公網地址信息:36.23.223.162:8081發起連接就可以了。

故此,如果能將內網設備通過NAT方式映射到公網上,并獲取映射后的公網IP地址及對應的端口號,那么也就實現了P2P通信的第一步。想要實現內網設備對公網地址的映射,除了常見的主動訪問某個知名網站之外,還可以通過STUN協議來實現。

STUN協議

圖5

STUN協議如圖5所示:設備通過給公網的STUN服務器發送請求獲得自己的公網地址信息。類似的,像這種通過某種協議或者方式讓路由器留下一個內外網映射的“洞口”,通常稱為:“打洞”。而外網主機如果可以通過這個“洞口”與內網主機通信,則說明“打洞成功”。

信令服務器

通過STUN協議可以獲取到設備本身的外網IP地址和端口,只是完成了P2P通信的第一步。第二步則是怎樣將自己的外網IP地址和端口告知對端。通常我們需要借助信令服務器來實現。通用的方案如圖6所示:

圖6

步驟1:IPC通過STUN協議獲取到了自己的公網地址信息:36.23.223.162 : 8081;

步驟2:IPC將自己的地址信息發給信令服務器,信令服務器則將地址信息轉發給“和家親APP”;

步驟3:“和家親APP”獲取到對端的地址信息后,發起連接;由于路由器已經有IPC的地址映射,所以發起的連接會轉發給IPC設備,至此就實現了“和家親app”和IPC的P2P連接。

關于信令服務器,這邊需要需要說明一下。一般來說設備啟動時就會主動連接信令服務器,之后會保持與信令服務器的長連接;app也會保持與信令服務器的連接;通過信令服務器可以實現IPC與app的通信,如今信令服務器使用的協議是websocket。

擴展

圖6的幾個步驟對于快速理解P2P的原理是有幫助的,但是也省略了很多內部細節,這個章節會將一些遺留的知識點補充回來。

思考一個問題:通過STUN協議獲取到的公網IP地址和端口,對端就一定能連接成功嗎?很顯然答案是否定的。否則也就不會有“打洞成功率”的概念了。為了理解這點,首先需要了解NAT類型。

NAT類型

如今常見的NAT可以分成4種類型:

完全錐型

IP 限制錐型

端口限制錐型

對稱型

這4種類型中,越往后的NAT類型穿越難度越大。

完全錐型

完全錐型特點:一旦打洞成功,所有知道該洞的主機都可以通過它和內網主機通信。

IP 限制錐型

IP 限制錐型特點:IP限制錐型要比完全錐型嚴格,打洞成功后,只有與之打洞成功的外網主機才能通過該洞與內網主機通信,而其他外網主機哪怕知道這個洞口也不能通信。

端口限制錐型

端口限制錐型特點:端口限制錐型則要比IP限制錐型更嚴格,打洞成功后,除了要檢測IP地址之外還要檢測端口號。二者中只要有一項不滿足,都無法通過該洞口進行通信。

對稱型

完全錐型特點:內網主機每次訪問不同的外網主機時,都會生成一個新的洞。而前面3種錐型使用的是同一個洞。

不同NAT類型的路由器其穿越表如下所示:

所以,前面例子中我們其實是將路由器的NAT類型默認假設成完全錐型。但是現實中,除了完全錐型外,我們還需要處理其他類型的路由器。

TURN協議

當兩端路由器的NAT類型是:(端口限制錐型,對稱型)或者(對稱型,對稱型)時,使用STUN協議就無法穿越,這個時候就需要使用TURN協議。TUAN協議簡單來說就是進行數據轉發,兩個內網主機分別把內容發給TURN服務器,TURN服務器再將內容分別轉發給對端,以此來實現通信。這邊不再進行贅述。

總結

P2P打洞的大致流程主要就是以下兩個步驟:

處在內網的設備通過STUN/TURN協議獲取到自身的內外網地址信息;

將相關的地址信息通過信令服務器發送給對端,對端拿到對應的地址信息后,嘗試連接。

在實際過程中,進行P2P打洞的設備不僅獲取外網的地址信息,也會獲取內網的地址信息,同時也獲取TRUN服務器分配的地址信息,生成候選地址對,候選地址對也有連接的優先級的概念,一般來說所有的候選地址對,都會嘗試連接。

由于P2P協議涉及內容比較多,既需要了解底層的網絡原理,也需要了解類似STUN和TUAN協議的內容。而且P2P協議打洞成功的關鍵很多時候與設備所處的網絡環境有關,假如設備和app都處在對稱型路由器之下,那打洞成功概率就會很低,并且由于P2P流程比較長,故此對于不了解其原理的開發人員來說定位起來會比較困難。

基于以上原因,如今中國移動智慧家庭運營中心的移動看家設備,已經升級至全新的流媒體傳輸協議——SRT。但是這并不妨礙我們了解P2P的實現原理。關于SRT協議的介紹,請期待之后的文章。

猜你喜歡