• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當前的位置是:  首頁(yè) > 新聞 > 國內 >
     首頁(yè) > 新聞 > 國內 >

    SIP系列講座-NAT解決方法探討-STUN-TURN-ICE

    2017-11-17 09:13:37   作者: james.zhu   來(lái)源:Asterisk微信公眾號   評論:0  點(diǎn)擊:


      前面的講座中我們討論了關(guān)于NAT的基本概念,NAT的類(lèi)型和NAT在語(yǔ)音解決方案中的問(wèn)題。今天,我們探討一下幾個(gè)NAT的解決方案和各自的問(wèn)題,包括:NAT 方案的選擇,STUN, TUNE, ICE。在接下來(lái)的章節中繼續介紹 ALG, PNnP, MediaProxy,Symmetric RTP和SBC。
      NAT解決方案的選擇
      目前,根據對NAT支持的不同,處理機制的不同,業(yè)內把解決NAT的方法一般有分為以下幾種:
      這些方案都有其各自的特點(diǎn)。根據國外有關(guān)市場(chǎng)研究人員的報告指出,不同企業(yè)類(lèi)型的要求不同,部署成本,安全因素,維護成本等因素的影響,所以它們對解決方案的要求也可能有所不同,以下是調查結果發(fā)布狀態(tài):
    • 一般家庭用戶(hù)選擇簡(jiǎn)單的NAT解決方案,例如UPnp,STUN,TURN, ICE
    • 小型企業(yè)用戶(hù)大部分用戶(hù)可能選擇STUN,TURN, ICE 或者SBC,也可能選擇UPnP的方案。
    • 一般中型企業(yè)則選擇SBC,STUN, TURN和企業(yè)級的SBC加防火墻的方案。
    • 比較大的企業(yè)則會(huì )選擇防火墻,SBC的解決方案。
      當然,選擇是有成本的。對于VOIP的解決方案,安全是一個(gè)公司的非常重要的考慮因素,用戶(hù)也要根據不同的安全要求對解決方案進(jìn)行比較全面的分析,以下圖例數據表示各種解決方案對安全的考慮和其可控性的考慮。
      從以上數據我們可以看到,如果用戶(hù)需要更加安全的部署方式,需要對其訪(fǎng)問(wèn)有非常大的靈活性和可靠性,最好的方式還是選擇SBC。
      關(guān)于STUN和TURN的討論
      在實(shí)際生產(chǎn)環(huán)境中,我們客戶(hù)通常使用的設備所支持的STUN和TURN都可能有所不同,所以這樣就會(huì )導致一個(gè)解決方案兼容性的問(wèn)題。例如,可能有的物理話(huà)機支持STUN和TURN,但是不支持ICE,有的軟電話(huà)可能支持的舊版本的STUN,不支持新標準的STUN。
      下面,我們介紹一下關(guān)于STUN的流程機制。這里我們要注意,一般我們舉例時(shí)使用的是RFC5389來(lái)解釋的,相對比較舊的STUN版本是RFC3489(classic STUN)。在RFC5389的規定中,STUN定義為輕量級的工具,它不是一個(gè)完整的NAT穿透解決方案(RFC3489定義為完整的解決方案),它僅是一個(gè)解決穿透能力的工具。另外,RFC3489的規定有幾個(gè)方面的不足,很難滿(mǎn)足真正的NAT解決方案。根據RFC5389的解釋?zhuān)琑FC3489的不足主要表現在:
      在實(shí)際部署環(huán)境中,IP和端口有時(shí)可以作為Peer來(lái)進(jìn)行通信,有時(shí)則不能。Classic STUN沒(méi)有提供準確的方法來(lái)處理這些問(wèn)題。
      Classic STUN的算法對多層NAT可能發(fā)生錯誤。
      Classic STUN存在安全漏洞,可能有時(shí)駭客會(huì )利用某些端口重新映射時(shí)進(jìn)行地址或者端口串改。
      目前,根據RFC5389對STUN所執行的功能包括:
    • 用于ICE連接支持(MMUSIC-ICE)
    • 用于客戶(hù)端的初始化連接(SIP-OUTBOUND)
    • NAT行為發(fā)現(BEHAVE-TURN)。
      STUN 簡(jiǎn)單來(lái)說(shuō),內網(wǎng)SIP終端通過(guò)STUN對STUN發(fā)出請求,STUN回復一個(gè)響應,STUN服務(wù)器告訴使用指定的外網(wǎng)端口和IP地址。STUN使用UDP,默認端口是3478。它在響應的消息中包含了MAPPED-ADDRESS,RESPONSE-ORIGIN,OTHER-ADDRESS和XOR-MAPPED-ADDRESS這四個(gè)參數。通常來(lái)說(shuō),為了支持NAT的映射和過(guò)濾行為機制,STUN服務(wù)器必須支持兩個(gè)公網(wǎng)IP地址和兩個(gè)不同的端口,分別稱(chēng)之為主信息地址和可選消息地址。讓我們看看具體的實(shí)現方式。
      具體的流程包括:第一步客戶(hù)端A 通過(guò)設置的STUN地址查詢(xún)STUN外網(wǎng)地址和端口。第二步,客戶(hù)端A對客戶(hù)端B發(fā)生信令消息,通知客戶(hù)端B的外網(wǎng)地址和端口,可以對其發(fā)送媒體。客戶(hù)端B然后對NAT路由器發(fā)送媒體,NAT路由器然后轉發(fā)到客戶(hù)端 A。
      以下圖例是一個(gè)簡(jiǎn)單的STUN流程圖(缺少對Symmetric 的支持,需要TURN支持):
      在上面的流程中,NAT是如何被檢測的?RFC 5780 規定了三個(gè)階段的NAT檢測方式:
      NAT檢測的具體步驟:
      研究人員Baruch 更加詳細地描述了這個(gè)test的流程,用戶(hù)可以查閱此研究人員的文檔做進(jìn)一步了解。具體Test的邏輯順序請讀者參考 RFC5780的4.5 部分。如果讀者需要了解更多的相關(guān)定義,請參RFC 5780 相關(guān)協(xié)議:
      現在讓我們看看在SIP中NAT請求和響應的示例。
      STUN 返回的IP和port number, SIP然后在SIP header 使用這個(gè)新的地址。
      大家需要注意以下SIP頭中的rport 1024, 當在NAT后的終端收到消息時(shí),這個(gè)rport 端口會(huì )覆蓋原來(lái)的端口49300端口。這里,實(shí)際上,rport是做路由使用的。關(guān)于rport 端口的修改問(wèn)題,讀者查閱RFC3581 的Server Behavior中rport的修改規則。用戶(hù)必須注意,在有一些網(wǎng)絡(luò )環(huán)境中,系統管理機制可能對收到的消息和返回的消息地址端口非常敏感,如果是這樣的話(huà),RFC3581 標準建議開(kāi)啟TLS服務(wù)。另外,用戶(hù)也應該注意到,如果修改rport了,這里可能涉及到了一個(gè)安全的問(wèn)題,攻擊者在路由路徑中插入了一個(gè)中轉服務(wù)器的話(huà),可能導致安全問(wèn)題。
      盡管STUN可以解決很多類(lèi)型的NAT問(wèn)題,但是仍然有很多局限性:
    • STUN不支持Symmetric NAT類(lèi)型,因為每一個(gè)新創(chuàng )建的IP:port 的會(huì )話(huà)映射可能地址以前STUN檢測到的數據失效。
    • 如果防火墻設置了對UDP丟棄數據包的參數,也會(huì )導致STUN失敗。
    • 因為UDP不是一個(gè)長(cháng)連接的方式,防火墻可能關(guān)閉一些存活動(dòng)端口,這樣可能導致會(huì )話(huà)失敗。
    • 終端客戶(hù)的網(wǎng)絡(luò )環(huán)境可能導致STUN失敗,因為有的終端可以抵達服務(wù)商的服務(wù)器地址,有的SIP終端可能可能不會(huì )抵達STUN服務(wù)器地址(例如,很多國內用戶(hù)使用國外的STUN地址),這樣的話(huà),SIP之間可能存在多層的NAT問(wèn)題。整個(gè)網(wǎng)絡(luò )環(huán)境會(huì )變得更加復雜。
      關(guān)于TURN的討論
      既然STUN存在那么多的問(wèn)題,但是如何解決這些問(wèn)題是技術(shù)研究人員必須面對的困難。俗話(huà)說(shuō),辦法總比問(wèn)題多。TURN是一個(gè)補充STUN不足的好辦法。TURN的英文全稱(chēng)如下:
    • Traversal Using Relays around NAT (TURN)
    • Relay Extensions to Session Traversal Utilities for NAT (STUN)
      從英文全稱(chēng)就可以看出,它僅是STUN的一種拓展,使用了中繼穿透NAT的方式。根據RFC5766的描述,TURN的設計目的是ICE的一部分,但是可以獨立使用。
      在很多應用場(chǎng)景中,位于NAT后面的終端可能不能與外網(wǎng)的終端進(jìn)行點(diǎn)對點(diǎn)的通信,如果需要雙方通信的話(huà),只能借助于一個(gè)外網(wǎng)的中轉服務(wù)點(diǎn)來(lái)實(shí)現互通。TURN的作用就是幫助雙方繞過(guò)阻擋的網(wǎng)絡(luò )點(diǎn),使用中繼的方式,支持終端控制中繼操作從而實(shí)現雙方的數據交換,也可以支持終端對多點(diǎn)終端互通。
      TURN和STUN相比,因為T(mén)URN的它本身的拓展,所以它也支持更多的功能,以下是對于TURN的一個(gè)總結:
      除了本身工作方式類(lèi)似以為,TURN可以支持SIP消息和媒體的轉發(fā),工作角色可以是一個(gè)代理的形式。
      TURN可以支持UDP和TCP,TCP可以支持長(cháng)連接,從而保證防火墻對會(huì )話(huà)的連接不會(huì )斷開(kāi)。但是,這里要注意,根據RFC5766的規定,如果是TRUN server 到Peer則都使用UDP。大概20%以上的會(huì )話(huà)需要使用TURN。
      TURN可以支持Symmetric NAT, 但是STUN則不能支持。我們前面已經(jīng)提及。
      TURN必須支持公網(wǎng)IP地址。
      TURN的本身要求服務(wù)提供商的TURN服務(wù)器部署成本相對比較高。因為,TURN需要考慮大量會(huì )話(huà),大量轉發(fā)數據,同時(shí)還要獲取Relays 路徑中的交換數據。
      以上我們討論的是關(guān)于整個(gè)TURN的使用場(chǎng)景的各種因素,但是還有很多細節性的問(wèn)題可能在實(shí)際應用中也可能出現,例如,以下圖例是一個(gè)開(kāi)發(fā)人員在測試WebRTC中關(guān)于使用P2P和SFU時(shí)的數據,使用P2P或SFU測試的結果是完全不同的。以下是其中一個(gè)數據。
      TURN服務(wù)器的表現因為地理原因,配置原因或者其他的原因造成的對語(yǔ)音時(shí)延也完全不同,以下示例來(lái)自于 Dag-Inge Aas, 在開(kāi)發(fā)WebRTC時(shí)對于TURN服務(wù)器時(shí)延的實(shí)驗數據,各個(gè)服務(wù)器的帶寬不同,處理能力不同導致的各種不同的結果。
      如果用戶(hù)選擇TURN的話(huà),可以參考Twillio的標準來(lái)做出決定:是否全球部署,是否靠近用戶(hù),是否支持拓展,是否優(yōu)化時(shí)延。
      關(guān)于ICE討論
      前面我們詳細討論了STUN和TURN的使用場(chǎng)景和各種影響。讀者可能會(huì )看到,以上兩種方式仍然存在一些問(wèn)題。ICE的出現改善了兩種NAT解決方法的很多問(wèn)題。ICE英文全名是Interactive Connectivity Establishment。RFC5245(更新的RFC6336)對ICE做了規定。一般簡(jiǎn)單的定義是:ICE=STUN+TURN+協(xié)商機制+協(xié)商路徑。以下圖例中表示了ICE的架構。
      以下是一個(gè)Candidate的消息架構體,關(guān)于結構體中每個(gè)參數的含義,請參閱RFC3245的第三部分(Terminology)。
      ICE執行的幾個(gè)步驟:
    1. 發(fā)現收集申請終端信息。收集到終端可通信的地址,終端申請者的類(lèi)型(host, Reflexive和Relay candidate)。
    2. 根據優(yōu)先級對candidate 進(jìn)行處理,大部分情況下,首先使用Relay candidate。
    3. 解析candidate信息,發(fā)送到對端candidate。
    4. 對candidate進(jìn)行配對處理,保證雙方匹配。
    5. 檢查配對的candidated的連接性。
    6. 計算ICE是否可以連接成功,如果成功,則發(fā)送確認消息。
    7. 然后進(jìn)行語(yǔ)音流的通信。
      以下幾個(gè)步驟比較詳細地介紹了關(guān)于SIP ICE的協(xié)商過(guò)程:



      通過(guò)priority oder,結合兩個(gè)pair check the ICE開(kāi)始測試。如果雙方測試成功,則進(jìn)行下一步的信令交互,例如SIP 2 發(fā)送180消息,發(fā)送200 OK消息。如果開(kāi)始發(fā)送到消息和收到的消息不一致,則需要SIP Phone 1 重新發(fā)送Re-INVITE消息,然后進(jìn)行測試驗證,最后收到200 OK消息。
      ICE 測試成功以后,則雙方開(kāi)始發(fā)送RTP語(yǔ)音。
      關(guān)于ICE的支持問(wèn)題,在我們很多常見(jiàn)的環(huán)境中,有的終端可以支持ICE,但是有一些終端可能不支持。用戶(hù)可以檢查各種軟電話(huà)的ICE配置功能。以下SIP消息中表示終端支持ICE:sip.ice。
      如果對端終端不支持ICE的話(huà),終端只能有兩種選擇:1)繼續連接,但是不使用ICE,ICE支持一個(gè)自動(dòng)檢測返回的機制,通知對端不支持ICE。2)或者繼續執行一個(gè)可選授權支持的方式使用ICE,根據RFC5768對Mandating Support的規定, SIP終端可以在INVITE請求的Require中添加一個(gè)ice option。
      另外,用戶(hù)可能有時(shí)看到這樣的例子,在終端的SIP INVITE頭中沒(méi)有sip.ice, 但是在SDP中確實(shí)有ICE candidate的信息,這也是互相不兼容導致的結果,但是最終這是一種不支持ICE的標識。
      因為SIP技術(shù)本身的快速發(fā)展,其實(shí)ICE的版本也在不斷更新。這里,我們簡(jiǎn)單介紹兩個(gè)ICE的“升級”版本。這里,我稱(chēng)之為升級版本僅是對ICE的一種優(yōu)化,它們并不是在ICE本身的升級或者更新:
      ICE-lite主要功能是簡(jiǎn)化了ICE的復雜性,例如,我們看到的SBC。
      Trickle ICE主要目的是縮短了ICE的協(xié)商處理時(shí)間,避免重新分配已被轉發(fā)的candidate,如果需要則開(kāi)啟。不像ICE的標準處理流程,標準的ICE需要收集candidate的信息狀態(tài)信息,它則一開(kāi)始就和host candidate檢查連接狀態(tài),同時(shí)并行處理其他的交換機制。所以,Trickle ICE相對較低了處理流程花費的時(shí)間。
      關(guān)于Near-NAT和Far-NAT討論
      很多時(shí)候,大家可能會(huì )看到關(guān)于Near End NAT 和Far End NAT的解釋說(shuō)明。從字面意思也可以基本理解這兩個(gè)概念的基本區別。
      Near End NAT是在本地NAT處理機制中通過(guò)本地ALG或者本地SBC修改了SIP 頭消息,出局時(shí)SIP頭消息變成了公網(wǎng)的IP地址,然后運營(yíng)商SBC增加一個(gè)Via到SIP 頭,最后呼叫到對端終端。下面圖例中的五個(gè)處理流程解釋了Near End NAT的完整過(guò)程。
      Far End NAT是本地網(wǎng)絡(luò )對SIP頭消息不做任何處理,運營(yíng)商側SBC修改SIP頭消息,添加Via,然后呼叫遠端終端。同時(shí),運營(yíng)商SBC會(huì )對內網(wǎng)SIP終端發(fā)送一個(gè)SIP OPTION 或者NOTIFY消息,保證終端SIP防火墻的端口不被關(guān)閉,通信端口一直處于存活狀態(tài)。
      從以上介紹中,我們可以看到,兩者之間的區別就在于在說(shuō)明地方修改的SIP頭的IP地址,而且Far End NAT的處理方式會(huì )引起路由器需要不斷地接收從運營(yíng)商SBC發(fā)送到大量的NOTIFY消息,這樣可能會(huì )導致公司內網(wǎng)的不穩定。關(guān)于A(yíng)LG和SBC的解決方案介紹我們會(huì )在下一個(gè)講座中專(zhuān)門(mén)介紹這些內容。
      總結,在本章節中,我們首先討論了關(guān)于STUN,TURN和ICE的原理和使用場(chǎng)景,同時(shí),我們也介紹了它們之間的不同和各種在實(shí)際場(chǎng)景中所支持的功能和其局限性。另外,我們重點(diǎn)介紹了ICE的幾個(gè)協(xié)商流程,最后多兩個(gè)通常使用的NAT概念做了描述和介紹。ICE本身集合了STUN,TURN的各自的優(yōu)勢,在解決NAT方面可能是目前一種最佳的利器,但是因為網(wǎng)絡(luò )環(huán)境不斷變化,終端客戶(hù)的設備類(lèi)型也不斷升級,所以ICE的技術(shù)應用仍然在不斷升級來(lái)支持更多的要求。用戶(hù)需要根據自身特點(diǎn),網(wǎng)絡(luò )資源,本身成本等不同方式來(lái)解決NAT問(wèn)題。
      參考資料:
      http://manoftoday.wdfiles.com/local--files/nat/SIPNATtraversal.pdf
      https://medium.com/the-making-of-appear-in/webrtc-and-turn-latency-around-the-world-4d172dd59e8e
      https://bloggeek.me/turn-public-ip-address/
      關(guān)注我們的公眾微信號:asterisk-cn 獲得更多有價(jià)值的開(kāi)源通信行業(yè)分享,訪(fǎng)問(wèn)技術(shù)論壇獲得關(guān)于開(kāi)源IPPBX的幫助和下載:www.issabel.cn/forum
    【免責聲明】本文僅代表作者本人觀(guān)點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對文中陳述、觀(guān)點(diǎn)判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔全部責任。

    相關(guān)熱詞搜索: SIP NAT

    上一篇:如何破解消費金融聯(lián)絡(luò )效率瓶頸?

    下一篇:最后一頁(yè)

    專(zhuān)題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 景德镇市| 宜川县| 三亚市| 江山市| 凤庆县| 鸡泽县| 益阳市| 应城市| 长寿区| 耒阳市| 东至县| 喀什市| 东辽县| 霸州市| 陇南市| 霞浦县| 连南| 柘荣县| 宿迁市| 六枝特区| 西平县| 凉城县| 彭阳县| 鸡西市| 平度市| 南雄市| 巴楚县| 长武县| 新疆| 射阳县| 阳朔县| 策勒县| 洛南县| 彰化县| 伊吾县| 四会市| 舒兰市| 米泉市| 东平县| 吉安市| 达日县| http://444 http://444 http://444 http://444 http://444 http://444