本站小編為你精心準備了移動互聯(lián)網(wǎng)多媒體傳輸技術研究參考范文,愿這些范文能點燃您思維的火花,激發(fā)您的寫作靈感。歡迎深入閱讀并收藏。
《數(shù)字技術與應用雜志》2014年第六期
1基于P2P網(wǎng)絡的UDP穿透
由圖1可以看出,網(wǎng)絡傳輸模塊在系統(tǒng)中占用重要地位。網(wǎng)絡傳輸模塊的穩(wěn)定性、實時性,直接影響著用戶體驗。因此,網(wǎng)絡模塊的設計與實現(xiàn),尤其是在移動互聯(lián)網(wǎng)環(huán)境下的穩(wěn)定性和實時性,是每個互聯(lián)網(wǎng)絡應用需要重點關注并解決的問題。由上述系統(tǒng)分析可知,網(wǎng)絡模塊主要包含兩部分:(1)信令傳輸模塊。信令傳輸模塊完成用戶注冊、登錄、邀請、P2P穿透信息的傳輸。這些協(xié)議與相應的業(yè)務流程有著密切關系,因此要求傳輸可靠性,但實時性可以適當放寬。因而這一模塊采用TCP協(xié)議完成。(2)媒體數(shù)據(jù)傳輸模塊。媒體數(shù)據(jù)傳輸模塊完成雙方音視頻數(shù)據(jù)交互。用戶建立通訊連接后,對媒體數(shù)據(jù)的實時性就有很高的期望,而穩(wěn)定性可以適當降低(即容忍一定丟包率)。而由于TCP協(xié)議本身特性限制并不能滿足實時性的要求,因此UDP傳輸則成為媒體數(shù)據(jù)的首先傳輸協(xié)議。而兩個客戶端在通訊前一般處于各自的內(nèi)網(wǎng)環(huán)境(NAT),通訊時需要經(jīng)過各自的路由器到達外網(wǎng),然后傳送到目的地。如果兩端的路由器通過某種方式可以直接連接并通訊,即為穿透。穿透的主要工作是客戶端在兩端的路由之間建立彼此的映射,傳輸時直接通過路由發(fā)往至另一端的路由。
1.1NAT[1]簡介隨著互聯(lián)網(wǎng)絡及各種聯(lián)網(wǎng)終端的迅速發(fā)展,絕大多數(shù)家庭及企事業(yè)單位的用戶都有上網(wǎng)需求,導致IP地址及路由急劇膨脹。但是,現(xiàn)行的IPV4協(xié)議使用公有的32bit的IP地址空間(雖然IPV6標準早已提出,但總體推進進度卻依然緩慢),使得公有IP地址遠遠不能滿足快速發(fā)展的網(wǎng)絡需求。NAT技術的合理使用能夠在在IPV4協(xié)議的基礎上,很好的解決這個問題。NAT的最初設計目的是用來增加似有組織可用地址控件和解決將現(xiàn)有的私有網(wǎng)絡(通俗的講就是大家熟知的局域網(wǎng)、內(nèi)網(wǎng))連接到互聯(lián)網(wǎng)上的問題。互聯(lián)網(wǎng)撥號機構(IANA)將地址劃分為公有IP地址和私有IP地址,公有IP地址是指在因特網(wǎng)上全球唯一的IP地址,而私有IP地址是指只能作為內(nèi)部網(wǎng)絡撥號使用,不能在互聯(lián)網(wǎng)絡上直接使用,因此可以不必向ISP或注冊中心申請。RFC1918為私有網(wǎng)絡預留除了三個IP地址段,如下[2]:A類:10.0.0.0~10.255.255.255;B類:172.16.0.0~172.31.255.255;C類:192.168.0.0~192.168.255.255
1.1.1NAT原理簡單的說,NAT(NetworkAddressTranslation,網(wǎng)絡地址轉(zhuǎn)換)是將IP數(shù)據(jù)包頭中的IP地址轉(zhuǎn)換為另一個IP地址的過程,它可以在路由器、防火墻或者單獨的NAT設備等多種網(wǎng)絡設備上進行配置,能夠有效解決IP地址不足的問題。如圖2.1所示,NAT的工作流程簡單大致有四個步驟[3]:第1步:網(wǎng)絡終端設備的網(wǎng)關設定為NAT主機,當其需要連上Internet的時候,網(wǎng)絡終端設備上的協(xié)議包就會被發(fā)送到NA主機,這個時候的協(xié)議包頭的源IP地址信息為10.0.0.172:80;第2步:透過NAT主機,將網(wǎng)絡終端設備的對外協(xié)議包的IP地址信息(10.0.0.172:80)修改成NAT設備所具有的公共IP地址信息,因為是公共IP,所以這個封包就可以連上Internet了,同NAT主機并且會記憶這個協(xié)議包是由哪一個(10.0.0.172:80)終端設備傳送來的;第3步:由Internet傳送回來的協(xié)議包,由NAT主機接收到了,這個時候,NAT主機會去查詢原本記錄的IP地址信息,并將目標IP信息由公共IP改回原來的10.0.0.172:80;第4步:最后則由NAT主機將協(xié)議包傳送給原先發(fā)送封包的網(wǎng)絡終端。
1.1.2NAT的分類根據(jù)NAT對內(nèi)轉(zhuǎn)發(fā)數(shù)據(jù)限制程度來看,可將NAT分為以下幾種類型:(1)完全錐形(FullCone):在一個完全錐形NAT中,所有從同一個內(nèi)部IP地址和端口過來的請求都被映射到同一個外部IP和端口,此外,任務外部主機可以通過映射在NAT上的外部地址發(fā)包給內(nèi)部主機。(2)受限錐形(RestrictedCone):在一個受限錐形NAT,同樣所有從同一個內(nèi)部IP和端口發(fā)出的請求都會被映射到同一個外部IP和端口,但有完全錐形NAT不同,只有內(nèi)部主機向其發(fā)送過包的外部主機才可以對這個內(nèi)部主機發(fā)包。(3)端口受限錐形(PortRe-strictedCone):與受限錐形NAT類似,但是增加了對端口的限制,如內(nèi)部主機向一個IP為X和端口為P的外部主機發(fā)送過包,那么只有從這個主機的IP為X端口為P發(fā)出的包才能被發(fā)送到內(nèi)部主機上去。(4)對稱(Symmetric):在一個對稱NAT上,從同一個內(nèi)部主機的IP和端口發(fā)送到某個目標IP和端口的所有請求會被映射到同一個外部IP和端口上,如果同一個內(nèi)部主機從同一個源IP和端口發(fā)送到不同的目標主機時,會被映射到不同的外部端口上去。另外,只有收到過包的外部主機才能發(fā)送包給內(nèi)部主機。
1.2基于UDP的P2P傳輸限制由3.1節(jié)分析可知,處于不同內(nèi)網(wǎng)間的用戶之前需要通訊,其地址必須通過各自NAT設備轉(zhuǎn)換成公有IP。然而,如圖2.2,NAT設備之間也并不知道目標設備的內(nèi)網(wǎng)IP地址對應的公有IP地址信息,因此還是無法直接將發(fā)給對方,因此,通常的設計還會有一個具有公有IP的中轉(zhuǎn)服務器,雙方的數(shù)據(jù)有NAT發(fā)送給中轉(zhuǎn)服務器,由中轉(zhuǎn)服務器分發(fā)給雙方。因此,由NAT的分類介紹及圖2.2分析可知,限制基于UDP的P2P傳輸?shù)脑驘o外乎兩個:(1)終端設備A和終端設備B之間在連接建立之前,并不知道對方的公有IP信息(NAT轉(zhuǎn)后的公有IP信息)。(2)NAT設備對內(nèi)轉(zhuǎn)發(fā)數(shù)據(jù)限制。
1.3UDP穿透方案實現(xiàn)要實現(xiàn)處于兩個不同內(nèi)網(wǎng)之間用戶之間的UDP直連,就必須突破3.2節(jié)中所提到的限制:獲取公有IP信息及規(guī)避NAT對內(nèi)轉(zhuǎn)發(fā)數(shù)據(jù)限制,這一過程通常被稱作UDP穿透或者UDP打洞技術,其系統(tǒng)流程如圖2.3。流程說明:(1)NAT端口映射:在NATA,NATB路由上建立客戶端音視頻的端口,以此端口進行P2P傳輸,共包括音頻和視頻兩組數(shù)據(jù)。(2)附帶的NAT映射信息包括:客戶端IP地址及音視頻端口。客戶端NAT的IP地址及在NAT上映射的音視頻端口。(3)連接測試:客戶端向?qū)Ψ桨l(fā)送測試信息,對方收到后立即返回給發(fā)送方。如果在一定時間內(nèi)收到自己的測試信息并且收到對方的測試信息,測試通過,否則失敗。
1.3.1UPnP及STUNUPnP是即插即用技術在網(wǎng)絡環(huán)境中的擴展,他通過用戶控制點向NAT設備發(fā)送控制信息添加端口映射的方式實現(xiàn)NAT穿透。UPnP不需要對現(xiàn)有設備進行改造,但要求集成NAT功能的網(wǎng)關或路由器支持UPnP功能。目前大多數(shù)網(wǎng)關都支持UPnP,因而我們可以首先嘗試UPnP方式進行穿透,但也不排除部分網(wǎng)絡環(huán)境下不支持UPnP,所以還需結合其他穿透技術才能達成目標[4]。miniupnpc[5]是基于UPnP開發(fā)的開源項目,其實現(xiàn)了搜索局域網(wǎng)中所有的UPNP設備、根據(jù)指定設備和外網(wǎng)端口獲得內(nèi)網(wǎng)信息、根據(jù)指定設備獲得外網(wǎng)IP地址、根據(jù)指定設備,獲取連接類型等功能,非常方便基于UPnP穿透應用。STUN(SimpleTraversalofUDPoverNATs)采用另外一種死了實現(xiàn)NAT穿透:內(nèi)網(wǎng)中的主機通過位于外網(wǎng)具有公有IP信息的穿透服務器預先獲取自己出口NAT上對應的外網(wǎng)IP信息,然后在與其他節(jié)點通訊時直接使用該外網(wǎng)IP信息自己的通訊地址[6]。RFC3489詳細介紹了STUN協(xié)議及處理流程,當然,人們也可以根據(jù)STUN思想自行實現(xiàn)穿透流程。
1.3.2UDP穿透測試由NAT分類可知,外部網(wǎng)絡終端需要訪問處于NAT內(nèi)的網(wǎng)終端,必須滿足一定的條件。因此,當內(nèi)網(wǎng)終端獲取到NAT出口公有IP信息后,必須相互發(fā)起UDP穿透測試,以滿足NAT向內(nèi)轉(zhuǎn)發(fā)數(shù)據(jù)的要求。NAT分類中的完全錐形、受限錐形和端口受限錐形都屬于靜態(tài)端口分配類型,即所有同一個內(nèi)網(wǎng)IP和端口的請求都會被映射到同一個外部IP和端口,不同的只是NAT在向內(nèi)轉(zhuǎn)發(fā)數(shù)據(jù)時是否需要由內(nèi)網(wǎng)終端首先主動發(fā)起連接。而對稱型NAT則是動態(tài)端口分配類型,即同一個內(nèi)網(wǎng)IP和端口發(fā)往不同的IP和端口時,會被映射到不同的外網(wǎng)IP和端口。UDP穿透測試流程如圖2.4。
1.3.3UDP穿透實現(xiàn)由于目前大部分NAT設備已經(jīng)支持UPnP,因此我們采取UPnP及STUN雙重方案,以提高UDP穿透成功率,具體實現(xiàn)流程如圖2.5。(1)UPnP檢測接口。1)首先調(diào)用upnpDiscover啟動搜索局域網(wǎng)中所有的UPNP設備;2)然后調(diào)用UPNP_GetValidIGD()在UPNP列表中查看有效IGD設備,其返回值含義為:=0沒有IGD設備;=1有一個連接;=2有設備但沒有連接;=3有UPNP但不是ICG設備;3)如果返回1,則調(diào)用UPNP_AddPortMapping將內(nèi)外IP,port在路由器上做一個映射;4)映射成功后,則UPnP檢測流程結束。(2)UDP穿透實現(xiàn)流程。1)用戶登錄控制服務器并向控制服務器發(fā)送UDP心跳包,服務器收到后將映射信息通過TCP轉(zhuǎn)發(fā)給對方;2)在收到對方映射信息前,必須保持向控制服務器發(fā)送UDP包,以維持映射信息;3)收到對方映射信息后,開始向?qū)Ψ絇ort及Port+1端口發(fā)送UDP測試數(shù)據(jù),并通知控制服務器已經(jīng)開始UDP測試,控制服務器將該信令轉(zhuǎn)發(fā)給對方;4)當對方也啟動UDP測試后,啟動超時定時器;5)在超時時間內(nèi),是否收到對方UDP響應,如收到,則測試成功,否則測試失敗;6)UDP穿透測試過程中,一般需要雙方同時向?qū)Ψ桨l(fā)送UDP測試包,為避免因映射信令通過TCP傳輸而造成的啟動UDP測試不同步,我們在收到雙方的啟動測試通知后,才啟動超時定時器,以避免一方已經(jīng)測試超時,而另一方則還沒有開始測試的問題。具體流程圖如圖2.6。
2UDP+CDN中轉(zhuǎn)
雖然UDP穿透技術能夠解決大部分NAT直連障礙,但是依然存在穿透失敗的可能,尤其對于這三種情況不能直接用P2P穿透,它們分別是通信兩端都是對稱路由,通信一方是對稱路由另一方是端口限制路由,或者通信兩端在同一個路由下,而路由不支持回環(huán)。因此,在UDP穿透失敗情況下需要服務器轉(zhuǎn)發(fā)。在中轉(zhuǎn)模式下,大部分延時時間發(fā)生在終端與服務器之間,尤其是在移動互聯(lián)網(wǎng)環(huán)境中,由于跨IDC運營商等問題,可能為中轉(zhuǎn)模式帶來更大的傳輸延時。因此,從客戶端到中轉(zhuǎn)服務器之間,我們?nèi)匀皇褂肬DP傳輸協(xié)議。而在跨IDC之間,則使用TCP轉(zhuǎn)發(fā)模式。跨IDC間的TCP轉(zhuǎn)發(fā),理論上可以在每個運營商機房建立一個中轉(zhuǎn)服務器,但是這樣所帶來的資源消耗非常巨大,因此我們目前較為成熟的CDN(ContentDeliveryNetwork,即內(nèi)容分發(fā)網(wǎng)絡)技術,以解決不同地區(qū)、不同IDC之間傳輸不穩(wěn)定的問題。CDN是一種新型網(wǎng)絡內(nèi)容服務體系,其基于IP網(wǎng)絡而構建,基于內(nèi)容訪問與應用的效率要求、質(zhì)量要求和內(nèi)容秩序而提供內(nèi)容的分發(fā)和服務。而從廣義的角度,CDN代表了一種基于網(wǎng)絡而構建的高質(zhì)量、高效率、具有鮮明網(wǎng)絡秩序的網(wǎng)絡應用服務模式。CDN系統(tǒng)能夠?qū)崟r地根據(jù)網(wǎng)絡流量和各節(jié)點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節(jié)點上。其目的是使用戶可就近取得所需內(nèi)容,解決Internet網(wǎng)絡擁擠的狀況,提高用戶訪問網(wǎng)站的響應速度。UDP+CDN中轉(zhuǎn)模式如圖3。
3結語
通過UDP穿透及UDP+CDN轉(zhuǎn)發(fā)模式,系統(tǒng)較好的解決了基于移動互聯(lián)網(wǎng)的多媒體交互實時性和穩(wěn)定性的矛盾。當然,由于系統(tǒng)中使用UDP傳輸協(xié)議以最大程度的到達實時性要求,而UDP協(xié)議本身是不可靠傳輸協(xié)議,存在一定丟包概率。在實際測試過程中,同一個內(nèi)網(wǎng)之間基本不會出現(xiàn)丟包現(xiàn)象,而同一個運營商之間丟包率在3%以內(nèi),不同運營商之間丟包率在5-7%之間,但這并不會影響用戶體驗。
作者:陳小平單位:深圳深訊和科技有限公司