国产熟女一区二区五月婷-又爽又黄又无遮挡网站-亚洲国产精品视频在线播放-国内偷拍国内精品网999

當(dāng)前位置:首頁 > 最新資訊 > 行業(yè)資訊

IPC流媒體傳輸協(xié)議——P2P

Labs 導(dǎo)讀

伴隨視頻物聯(lián)網(wǎng)的發(fā)展,IPC(IPCamera,網(wǎng)絡(luò)攝像頭)已經(jīng)在家庭安防場(chǎng)景廣泛應(yīng)用。中國移動(dòng)移動(dòng)看家業(yè)務(wù)提供了以視頻為基礎(chǔ)的場(chǎng)景化安防服務(wù),支持接入IPC、門鎖、貓眼等泛安防智能硬件,用戶通過使用和家親APP可以實(shí)現(xiàn)遠(yuǎn)程看護(hù)、設(shè)備對(duì)講、監(jiān)控視頻回放等功能。為了實(shí)現(xiàn)以上功能,IPC等設(shè)備需使用流媒體傳輸協(xié)議發(fā)送攝像頭采集到的音視頻媒體流,而APP則通過流媒體傳輸協(xié)議獲取媒體流。

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

什么是P2P?

簡(jiǎn)單來說P2P就是設(shè)備之間不通過中間服務(wù)器轉(zhuǎn)發(fā),直接進(jìn)行點(diǎn)對(duì)點(diǎn)的通信的方式。

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

圖1

從圖1中我們可以看到,小明通過微信給小紅發(fā)了一條消息,其消息的真實(shí)流經(jīng)路徑是:小明->服務(wù)器->小紅。

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

答:小明的手機(jī)在網(wǎng)絡(luò)上大概率是無法直接找到小紅的手機(jī)。

怎樣理解這句話?請(qǐng)看圖2

圖2

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

公網(wǎng)地址唯一,而內(nèi)網(wǎng)地址不唯一,所以如果只是知道一個(gè)設(shè)備的內(nèi)網(wǎng)IP地址是無法找到對(duì)應(yīng)設(shè)備的(除非是剛好處在同一個(gè)內(nèi)網(wǎng)環(huán)境中),這也就是為什么小明的手機(jī)在網(wǎng)絡(luò)上大概率是找不到小紅手機(jī)的原因。

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

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

為什么要使用P2P?

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

圖3

怎樣實(shí)現(xiàn)P2P?

從圖2的描述中我們知道,如果設(shè)備能知道自己本身的公網(wǎng)IP地址和端口,并告知對(duì)方,就能實(shí)現(xiàn)P2P通信。所以要實(shí)現(xiàn)P2P通信,就要解決以下兩個(gè)問題:

怎樣獲取自身的公網(wǎng)IP地址和端口

怎樣將獲取到的公網(wǎng)IP地址和端口告知對(duì)端

NAT原理

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

圖4

圖中路由器下面連接了4個(gè)設(shè)備:ABCD,假設(shè)這4個(gè)設(shè)備都通過瀏覽器訪問百度(假設(shè)都是使用內(nèi)部端口80),那在路由器上會(huì)生成一張NAT映射表,瀏覽器返回?cái)?shù)據(jù)在通過路由器的時(shí)候就通過這張映射表找到對(duì)應(yīng)的內(nèi)部設(shè)備。

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

故此,如果能將內(nèi)網(wǎng)設(shè)備通過NAT方式映射到公網(wǎng)上,并獲取映射后的公網(wǎng)IP地址及對(duì)應(yīng)的端口號(hào),那么也就實(shí)現(xiàn)了P2P通信的第一步。想要實(shí)現(xiàn)內(nèi)網(wǎng)設(shè)備對(duì)公網(wǎng)地址的映射,除了常見的主動(dòng)訪問某個(gè)知名網(wǎng)站之外,還可以通過STUN協(xié)議來實(shí)現(xiàn)。

STUN協(xié)議

圖5

STUN協(xié)議如圖5所示:設(shè)備通過給公網(wǎng)的STUN服務(wù)器發(fā)送請(qǐng)求獲得自己的公網(wǎng)地址信息。類似的,像這種通過某種協(xié)議或者方式讓路由器留下一個(gè)內(nèi)外網(wǎng)映射的“洞口”,通常稱為:“打洞”。而外網(wǎng)主機(jī)如果可以通過這個(gè)“洞口”與內(nèi)網(wǎng)主機(jī)通信,則說明“打洞成功”。

信令服務(wù)器

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

圖6

步驟1:IPC通過STUN協(xié)議獲取到了自己的公網(wǎng)地址信息:36.23.223.162 : 8081;

步驟2:IPC將自己的地址信息發(fā)給信令服務(wù)器,信令服務(wù)器則將地址信息轉(zhuǎn)發(fā)給“和家親APP”;

步驟3:“和家親APP”獲取到對(duì)端的地址信息后,發(fā)起連接;由于路由器已經(jīng)有IPC的地址映射,所以發(fā)起的連接會(huì)轉(zhuǎn)發(fā)給IPC設(shè)備,至此就實(shí)現(xiàn)了“和家親app”和IPC的P2P連接。

關(guān)于信令服務(wù)器,這邊需要需要說明一下。一般來說設(shè)備啟動(dòng)時(shí)就會(huì)主動(dòng)連接信令服務(wù)器,之后會(huì)保持與信令服務(wù)器的長連接;app也會(huì)保持與信令服務(wù)器的連接;通過信令服務(wù)器可以實(shí)現(xiàn)IPC與app的通信,如今信令服務(wù)器使用的協(xié)議是websocket。

擴(kuò)展

圖6的幾個(gè)步驟對(duì)于快速理解P2P的原理是有幫助的,但是也省略了很多內(nèi)部細(xì)節(jié),這個(gè)章節(jié)會(huì)將一些遺留的知識(shí)點(diǎn)補(bǔ)充回來。

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

NAT類型

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

完全錐型

IP 限制錐型

端口限制錐型

對(duì)稱型

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

完全錐型

完全錐型特點(diǎn):一旦打洞成功,所有知道該洞的主機(jī)都可以通過它和內(nèi)網(wǎng)主機(jī)通信。

IP 限制錐型

IP 限制錐型特點(diǎn):IP限制錐型要比完全錐型嚴(yán)格,打洞成功后,只有與之打洞成功的外網(wǎng)主機(jī)才能通過該洞與內(nèi)網(wǎng)主機(jī)通信,而其他外網(wǎng)主機(jī)哪怕知道這個(gè)洞口也不能通信。

端口限制錐型

端口限制錐型特點(diǎn):端口限制錐型則要比IP限制錐型更嚴(yán)格,打洞成功后,除了要檢測(cè)IP地址之外還要檢測(cè)端口號(hào)。二者中只要有一項(xiàng)不滿足,都無法通過該洞口進(jìn)行通信。

對(duì)稱型

完全錐型特點(diǎn):內(nèi)網(wǎng)主機(jī)每次訪問不同的外網(wǎng)主機(jī)時(shí),都會(huì)生成一個(gè)新的洞。而前面3種錐型使用的是同一個(gè)洞。

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

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

TURN協(xié)議

當(dāng)兩端路由器的NAT類型是:(端口限制錐型,對(duì)稱型)或者(對(duì)稱型,對(duì)稱型)時(shí),使用STUN協(xié)議就無法穿越,這個(gè)時(shí)候就需要使用TURN協(xié)議。TUAN協(xié)議簡(jiǎn)單來說就是進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),兩個(gè)內(nèi)網(wǎng)主機(jī)分別把內(nèi)容發(fā)給TURN服務(wù)器,TURN服務(wù)器再將內(nèi)容分別轉(zhuǎn)發(fā)給對(duì)端,以此來實(shí)現(xiàn)通信。這邊不再進(jìn)行贅述。

總結(jié)

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

處在內(nèi)網(wǎng)的設(shè)備通過STUN/TURN協(xié)議獲取到自身的內(nèi)外網(wǎng)地址信息;

將相關(guān)的地址信息通過信令服務(wù)器發(fā)送給對(duì)端,對(duì)端拿到對(duì)應(yīng)的地址信息后,嘗試連接。

在實(shí)際過程中,進(jìn)行P2P打洞的設(shè)備不僅獲取外網(wǎng)的地址信息,也會(huì)獲取內(nèi)網(wǎng)的地址信息,同時(shí)也獲取TRUN服務(wù)器分配的地址信息,生成候選地址對(duì),候選地址對(duì)也有連接的優(yōu)先級(jí)的概念,一般來說所有的候選地址對(duì),都會(huì)嘗試連接。

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

基于以上原因,如今中國移動(dòng)智慧家庭運(yùn)營中心的移動(dòng)看家設(shè)備,已經(jīng)升級(jí)至全新的流媒體傳輸協(xié)議——SRT。但是這并不妨礙我們了解P2P的實(shí)現(xiàn)原理。關(guān)于SRT協(xié)議的介紹,請(qǐng)期待之后的文章。

猜你喜歡