• <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>
    您當(dāng)前的位置是:  首頁 > 資訊 > 國內(nèi) >
     首頁 > 資訊 > 國內(nèi) >

    完整SIP/SDP媒體協(xié)商概論-關(guān)于ICE流程結(jié)束處理

    2020-04-28 10:46:35   作者:   來源:CTI論壇   評論:0  點(diǎn)擊:


      筆者在前面的兩篇文章中分別介紹了STUN客戶端處理流程和服務(wù)器端處理流程。在本文章中,我們將針對ICE的最后一部分的處理進(jìn)行總結(jié),這個章節(jié)包括ICE的流程結(jié)束的處理。ICE流程結(jié)束需要從兩種部署場景的agent來討論。一種是全場景部署agent的處理流程,另外一種是輕量級的部署場景agent處理流程。另外,ICE結(jié)束流程的最后還要進(jìn)行對封凍候選地址的處理。和前面的文章一樣,筆者這里仍然還是重點(diǎn)討論全場景部署agent的處理流程,然后針對輕量級場景中agent的部署進(jìn)行討論,最后對ICE結(jié)束對封凍候選地址進(jìn)行討論。
      1、全部署場景處理流程
      針對全場景部署agent的處理流程中,關(guān)于ICE結(jié)束的流程涉及了推薦配對和狀態(tài)機(jī)更新兩個部分的內(nèi)容。其中,推薦配對是由被控方agent產(chǎn)生。接下來,筆者會繼續(xù)討論推薦配對的處理流程。
      2、推薦配對
      剛才筆者已經(jīng)提到,推薦配對是由被控方產(chǎn)生的。ICE通過Regular Nomination(正常推薦方式)或Aggressive Nomination(主動推薦方式)來選擇推薦配對。選擇何種方式對推薦配對進(jìn)行算法處理,取決于對端pper的部署場景。如果對端peer支持的是一個輕量級部署場景,agent必須使用Regular Nomination算法來處理。如果對端peer使用了ice-options屬性(ICE options),agent不能理解此選項的話,agent必須使用Regular Nomination算法。如果對端peer支持全場景部署,并且沒有使用任何ICE選項或者使用了ICE選項(但是,agent可以理解),agent可以選擇使用Regular Nomination或者Aggressive Nomination算法。但是,因為Regular Nomination的穩(wěn)定性比Aggressive Nomination要好,所以,RFC5245規(guī)范推薦使用Regular Nomination算法。下面,筆者分別對這兩種算法進(jìn)行完整介紹。
      圖片來自于互聯(lián)網(wǎng)
      當(dāng)推薦配對使用Regular Nomination時,agent會讓一些檢查流程完成處理,在檢查的每個流程中會忽略掉USE-CANDIDATE屬性。針對一個媒體流構(gòu)件來說,一旦一個或多個檢查成功完成,成功檢查完成后會生成有效配對,有效配對然后添加到有效列表中。Agent會讓檢查繼續(xù)執(zhí)行,直到檢查遇到某些評判標(biāo)準(zhǔn),然后根據(jù)某些評判標(biāo)準(zhǔn)選擇有效配對。停止檢查的評判標(biāo)準(zhǔn)和評估有效配對標(biāo)準(zhǔn)完全取決于邏輯優(yōu)化本身自己。
      當(dāng)被控方agent選擇了一對有效配對時,它會重復(fù)這個生成有效配對的檢查,并且這次使用USE-CANDIDATE屬性。因為前面的檢查是成功的,所以,理論上講,這個檢查應(yīng)該也是一個成功的檢查。針對檢查的邏輯處理方式會對配對增加一個推薦標(biāo)識(nominated flag),并且僅支持這個配對。因此,針對每個媒體構(gòu)件來說,在有效列表中僅有一個單個支持了推薦標(biāo)識配對,并且,當(dāng)檢查列表的狀態(tài)切換到完成狀態(tài)后,ICE會選擇正確配對來針對媒體構(gòu)件發(fā)送和接收媒體流。根據(jù)以上介紹,讀者可以看出,因為agent可以控制檢查停止和檢查的評判標(biāo)準(zhǔn),因此,Regular Nomination具有更大的靈活性。這里只有一個要求,agent最后選擇一個配對或者只能選擇一個候選配對,然后針對此配對(支持USE-CANDIDATE屬性)生成一個檢查。通過增加拓展支持,Regular Nomination同時提高了ICE的適應(yīng)能力,可以支持多種部署場景的變化。Regular Nomination具有更高的穩(wěn)定性,它可以允許雙方agent通過單個配對實現(xiàn)媒體支持,無需其他臨時選項支持(Aggressive Nomination需要臨時選項支持)。但是,Regular Nomination也有其缺點(diǎn),因為Regular Nomination需要額外檢查完成,因此,Regular Nomination肯定會增加處理時延。通過以上內(nèi)容的介紹,筆者描述了Regular Nomination算法的處理方式,接下來,筆者介紹一下Aggressive Nomination算法的使用方式。
      當(dāng)使用Aggressive Nomination算法時,在agent發(fā)生的每個檢查中,被控方agent會包含一個USE-CANDIDATE屬性,針對一個媒體構(gòu)件的檢查中,一旦第一個檢查是成功的,這個配對就會被添加到有效列表中,然后設(shè)置一個推薦標(biāo)識。在有效列表中,所有構(gòu)件的配對都設(shè)置了推薦標(biāo)識后,媒體開始通過最高優(yōu)先級的推薦標(biāo)識配對進(jìn)行傳輸。但是,因為agent在所有的檢查中都包含了USE-CANDIDATE屬性,在所有的檢查中,有可能部分其他的檢查還沒有完成,這樣就會引起其他有效配對會產(chǎn)生自己的推薦標(biāo)識設(shè)置。因為,ICE總是從有效列表中選擇最高優(yōu)先級推薦標(biāo)識的候選配對來進(jìn)行媒體傳輸。因此,當(dāng)ICE檢查完成時,已選擇的配對可能實際上暫時發(fā)生了修改,這樣就會導(dǎo)致一系列的臨時選擇作為一個緩沖(三秒延遲規(guī)則,后面講到),直到ICE檢查穩(wěn)定后,這樣的狀態(tài)才能結(jié)束。因為這個問題,因此,相對于Regular Nomination算法來說,Aggressive Nomination缺乏一定的穩(wěn)定性。但是它不會增加檢查延時。
      3、更新ICE處理狀態(tài)
      無論是對于主控方agent還是被控方agent來說,ICE的處理狀態(tài)取決于在有效列表中標(biāo)識候選配對的當(dāng)前狀態(tài)和檢查列表的狀態(tài)。任何時間內(nèi),以下五種場景可能發(fā)生在這些處理狀態(tài)中。現(xiàn)在,我們具體介紹一下這五種可能發(fā)生的場景。
      對媒體流來說,如果在有效列表中沒有已設(shè)推薦標(biāo)識的配對,并且檢查列表狀態(tài)是正在運(yùn)行中,ICE處理將會繼續(xù)執(zhí)行。
      對媒體流來說,如果在有效列表中至少有一對已設(shè)推薦標(biāo)識的配對,并且檢查列表狀態(tài)是正在運(yùn)行中,則繼續(xù)進(jìn)行以下處理流程:
    • Agent必須移除在檢查列表中所有等待狀態(tài)和封凍狀態(tài)的配對,并且為同樣component(構(gòu)件)啟動一個triggered check queue,作為標(biāo)識配支持此媒體流。
    • 如果在檢查列表中的一個In-Progress配對作為標(biāo)識配對支持同樣構(gòu)件的話,如果配對的優(yōu)先級低于最低優(yōu)先級標(biāo)識配對,針對此構(gòu)件來說,agent應(yīng)該清除檢查的重傳處理流程。
    • 對于至少一個媒體流的每個構(gòu)件來說,在有效列表中一旦至少有一對標(biāo)識配對,并且檢查列表的狀態(tài)是正在運(yùn)行中的狀態(tài),需要進(jìn)一步執(zhí)行以下流程:
    • Agent必須為此媒體的檢查列表進(jìn)行狀態(tài)修改,修改其狀態(tài)為完成狀態(tài)。
    • Agent必須繼續(xù)對任何檢查做出響應(yīng),這些檢查可能仍然是agent用來接收媒體的響應(yīng),并且,如果STUN 服務(wù)器端流程要求的話,agent必須執(zhí)行triggered check。
    • Agent必須為檢查列表繼續(xù)重傳任何In-Progress 檢查。
    • Agent可以開始為媒體流傳輸媒體,為全場場景部署agent和輕量級場景部署agent發(fā)送媒體的處理流程將在后續(xù)文章中介紹。
      一旦每個檢查列表的狀態(tài)是完成狀態(tài),要求執(zhí)行以下流程:
      Agent設(shè)置所有的ICE處理狀態(tài)是完成狀態(tài)。
      如果agent是正在處于被控狀態(tài),此agent會為每個媒體流的每個構(gòu)件檢查最高優(yōu)先級已標(biāo)識的候選配對。如果它們中的任何候選配對不同于在最近offer/answer交互消息在的默認(rèn)候選配對,被控方agent必須生成一個更新的offer。具體的生成方式根據(jù)后續(xù)offer/answer交互模式的處理流程進(jìn)行。
      如果被控方agent正在使用Aggressive Nomination,當(dāng)配對選擇時,它可能導(dǎo)致多個更新offers。Agent可以延遲發(fā)送此更新的offer,通過一定的時間設(shè)置進(jìn)行控制(RFC5245規(guī)范建議設(shè)置為一秒鐘),這個時間可以保證其已選配對進(jìn)入穩(wěn)定狀態(tài)。
      如果檢查列表的狀態(tài)是失敗狀態(tài),ICE將不能為完成針對媒體流的處理。正確的處理方式依賴于對其他媒體流的檢查列表狀態(tài):
    • 如果所有的檢查列表的狀態(tài)是失敗狀態(tài),所有ICE處理的狀態(tài)將認(rèn)為是失敗狀態(tài),并且,agent應(yīng)該認(rèn)為此會話是一個失敗的會話,agent不應(yīng)該重新啟動ICE處理流程,被控方agent應(yīng)該結(jié)束整個會話。
    • 針對其他媒體流來說,如果在檢查列表中至少有一個檢查的狀態(tài)是完成狀態(tài),被控方agent應(yīng)該在其更新的offer中從此會話中移除此失敗的媒體流。
    • 針對其他媒體流來說,如果在檢查列表中沒有任何檢查是完成狀態(tài),但是,至少有一個檢查是正在運(yùn)行狀態(tài),agent應(yīng)該讓ICE進(jìn)行執(zhí)行。
    • 到此為止,關(guān)于ICE結(jié)束處理中全場景部署agent的處理流程就已經(jīng)結(jié)束。接下來,筆者將討論針對輕量級部署場景agent對ICE結(jié)束流程的處理。
      4、輕量級部署場景處理流程
      針對輕量級部署場景agent來說,ICE結(jié)束流程相對比較直接。這里有兩個情況需要注意:
    • 部署場景是輕量級的部署場景,對端peer是全場景部署場景
    • 部署場景是輕量級部署場景,對端peer也是輕量級部署場景
      ICE結(jié)束處理會給agent帶來一個后續(xù)影響,agent能夠清除任何已分配的候選地址(ICE沒有使用這些候選地址)。關(guān)于清除已分配候選地址的處理方式,筆者在本文章的后續(xù)部分介紹。
      如果對端peer是全部署場景的話,這種情況下,agent將會收到peer的連接檢查。當(dāng)agent已經(jīng)收到來一個連接檢查,這個檢查中包含了針對一個媒體流的每個構(gòu)件所支持的USE-CANDIDATE屬性,此媒體流的ICE處理狀態(tài)將要從正在運(yùn)行狀態(tài)遷移到完成狀態(tài)。當(dāng)針對所有媒體流的ICE處理狀態(tài)是完成狀態(tài)的話,所有ICE處理狀態(tài)都是完成狀態(tài)。輕量級部署從來不自己決定針對媒體流的ICE流程失敗處理,而是寧愿讓全場景部署的agent來決定。在后續(xù)的offer中,針對失敗的媒體流,全場景部署將做出決定,移除或重新啟動這些失敗的媒體流。
      如果對端peer是輕量級peer的話,ICE結(jié)束處理的流程相對比較復(fù)雜一些。一旦offer/answer交互模式完成后,雙方agent都會檢查它們的候選地址和它的peer的候選地址。針對每個媒體流,每個agent將會使用自己候選地址和對端peer的候選地址進(jìn)行配對處理。當(dāng)它們具有同樣的component,使用同樣的傳輸協(xié)議(RFC5245使用UDP傳輸協(xié)議),并且來自于同一IP地址類型(IPv4或IPV6),那么這兩個候選地址就會配對。在生成配對后,針對每個媒體流構(gòu)件中的配對數(shù)量有兩種處理方式:
      如果在每個媒體構(gòu)件中,有一個單個配對的話,此配對會添加到有效列表中。如果一個媒體的所有構(gòu)件只有一個配對的話,針對此媒體流的ICE處理狀態(tài)將會設(shè)置為完成狀態(tài)。如果所有媒體流的ICE處理狀態(tài)是完成狀態(tài)的話,所有ICE處理狀態(tài)將會設(shè)置為完成狀態(tài)。這種部署環(huán)境經(jīng)常會發(fā)生在IPv4的網(wǎng)絡(luò)環(huán)境中。
      如果在每個構(gòu)件中,有多于一個以上的配對的話,需要執(zhí)行以下幾個步驟:
    • Agent必須基于本地策略選擇一個配對。因為,這種情況僅發(fā)生在IPv6的環(huán)境中,RFC5245推薦agent需要根據(jù)RFC6724的處理流程選擇一個單個配對。
    • Agent會在有效列表中為每個構(gòu)件添加此已選配對。然后允許開始發(fā)送媒體。這里要注意,但是在實際環(huán)境中,可能雙方agent已選擇了不同的配對。
      為了保持雙方agent的配對的一致性,被控方agent必須發(fā)送一個更新的offer,在這個更新的offer中包含一個remote-candidates屬性設(shè)置。關(guān)于更新offer的發(fā)送處理流程,筆者在將來的討論中介紹。
      當(dāng)offer發(fā)送以后,agent一定不能更新ICE處理狀態(tài)。針對所有媒體流,如果此后續(xù)offer完成處理,主控方agent必須修改ICE處理流程狀態(tài)為完成狀態(tài),并且設(shè)置所有ICE處理狀態(tài)為完成狀態(tài)。主控方agent的狀態(tài)設(shè)置則基于輕量級部署場景的流程來進(jìn)行處理。
      5、封凍候選地址
      在ICE結(jié)束處理的流程中,包括兩種對后選地址的封凍處理。一種是全場景部署中封凍處理,另外一種是輕量級的部署場景封凍處理。接下來,筆者分別對其流程進(jìn)行說明。
      首先介紹全場景中關(guān)于封凍處理的流程。ICE結(jié)束處理的流程要求agent繼續(xù)監(jiān)聽STUN請求,一旦對其媒體流的處理完成后,繼續(xù)對媒體流生成triggered checks。RFC5245介紹了一種規(guī)則,規(guī)則描述了當(dāng)agent處于安全狀態(tài)時,它在一個候選地址(ICE沒有選擇此候選地址,然后釋放候選地址)終止發(fā)送或接收檢查。
      當(dāng)SIP網(wǎng)絡(luò)中使用了ICE,并且offer被經(jīng)過分叉處理發(fā)送到多個接收方時,ICE將會使用同樣的本地候選地址并行和每個自己的answer進(jìn)行處理。對所有使用那些候選地址來傳輸媒體流的peers來說,一旦ICE處理流程狀態(tài)達(dá)到完成狀態(tài),agent應(yīng)該等待另外三秒鐘,然后agent可以終止對檢查的響應(yīng),或在那個候選地址生成一個triggered checks。Agent可以在那個等待時間釋放候選地址。注意,服務(wù)器端反射候選地址的封凍處理從來不會被明確聲明,keepalive的缺失會啟動封凍處理流程發(fā)生。三秒延遲的規(guī)則策略可以處理如下場景,具體來說,ICE已經(jīng)完成后,agent使用了aggressive nomination算法,然后對已選配對進(jìn)行快速修改。
      輕量級部署場景中ICE結(jié)束處理相對比較簡單。對所有使用那些候選地址來傳輸媒體流的peers來說,一旦ICE處理流程狀態(tài)達(dá)到完成狀態(tài),輕量級部署場景可以釋放任何沒有被ICE選擇的候選地址。
      完成了關(guān)于ICE的討論以后,筆者將進(jìn)一步討論關(guān)于后續(xù)offer/answer交互中的offer生成,answer接收,更新offer等細(xì)節(jié)。
      參考資料:
      https://www.rfc-editor.org/rfc/rfc6724
      https://www.rfc-editor.org/rfc/rfc3484
      https://www.rfc-editor.org/rfc/rfc5245.html
      https://datatracker.ietf.org/meeting/93/materials/slides-93-mmusic-3
      https://bugzilla.mozilla.org/show_bug.cgi?id=1034964
     
      關(guān)注微信公眾號:asterisk-cn,獲得有價值的Asterisk行業(yè)分享
      Asterisk freepbx FreeSBC技術(shù)文檔: www.freepbx.org.cn
      融合通信/IPPBX商業(yè)解決方案:www.hiastar.com
      如何使用FreeSBC,qq技術(shù)分享群:334023047, www.freesbc.cn
     

    【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無關(guān)。CTI論壇對文中陳述、觀點(diǎn)判斷保持中立,不對所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔(dān)全部責(zé)任。

    相關(guān)閱讀:

    專題

    CTI論壇會員企業(yè)

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 桂平市| 永嘉县| 本溪市| 平罗县| 华亭县| 泰来县| 无为县| 永川市| 义马市| 莱西市| 台州市| 昌图县| 吴旗县| 喜德县| 庆云县| 鄂尔多斯市| 樟树市| 青阳县| 兰州市| 郓城县| 东丽区| 湖南省| 闽侯县| 余干县| 沂水县| 铜川市| 灵丘县| 彭山县| 喀喇沁旗| 阿坝县| 罗平县| 新竹市| 北宁市| 台东县| 嘉黎县| 石泉县| 宣威市| 兴化市| 定南县| 常熟市| 高邑县| http://444 http://444 http://444 http://444 http://444 http://444