中文字幕在线视频第一页,黄色毛片在线看,日本爱爱网站,亚洲系列中文字幕一区二区

您當(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é),這個(gè)章節(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ī)更新兩個(gè)部分的內(nèi)容。其中,推薦配對是由被控方agent產(chǎn)生。接下來,筆者會繼續(xù)討論推薦配對的處理流程。
  2、推薦配對
  剛才筆者已經(jīng)提到,推薦配對是由被控方產(chǎn)生的。ICE通過Regular Nomination(正常推薦方式)或Aggressive Nomination(主動推薦方式)來選擇推薦配對。選擇何種方式對推薦配對進(jìn)行算法處理,取決于對端pper的部署場景。如果對端peer支持的是一個(gè)輕量級部署場景,agent必須使用Regular Nomination算法來處理。如果對端peer使用了ice-options屬性(ICE options),agent不能理解此選項(xiàng)的話,agent必須使用Regular Nomination算法。如果對端peer支持全場景部署,并且沒有使用任何ICE選項(xiàng)或者使用了ICE選項(xiàng)(但是,agent可以理解),agent可以選擇使用Regular Nomination或者Aggressive Nomination算法。但是,因?yàn)镽egular Nomination的穩(wěn)定性比Aggressive Nomination要好,所以,RFC5245規(guī)范推薦使用Regular Nomination算法。下面,筆者分別對這兩種算法進(jìn)行完整介紹。
  圖片來自于互聯(lián)網(wǎng)
  當(dāng)推薦配對使用Regular Nomination時(shí),agent會讓一些檢查流程完成處理,在檢查的每個(gè)流程中會忽略掉USE-CANDIDATE屬性。針對一個(gè)媒體流構(gòu)件來說,一旦一個(gè)或多個(gè)檢查成功完成,成功檢查完成后會生成有效配對,有效配對然后添加到有效列表中。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選擇了一對有效配對時(shí),它會重復(fù)這個(gè)生成有效配對的檢查,并且這次使用USE-CANDIDATE屬性。因?yàn)榍懊娴臋z查是成功的,所以,理論上講,這個(gè)檢查應(yīng)該也是一個(gè)成功的檢查。針對檢查的邏輯處理方式會對配對增加一個(gè)推薦標(biāo)識(nominated flag),并且僅支持這個(gè)配對。因此,針對每個(gè)媒體構(gòu)件來說,在有效列表中僅有一個(gè)單個(gè)支持了推薦標(biāo)識配對,并且,當(dāng)檢查列表的狀態(tài)切換到完成狀態(tài)后,ICE會選擇正確配對來針對媒體構(gòu)件發(fā)送和接收媒體流。根據(jù)以上介紹,讀者可以看出,因?yàn)閍gent可以控制檢查停止和檢查的評判標(biāo)準(zhǔn),因此,Regular Nomination具有更大的靈活性。這里只有一個(gè)要求,agent最后選擇一個(gè)配對或者只能選擇一個(gè)候選配對,然后針對此配對(支持USE-CANDIDATE屬性)生成一個(gè)檢查。通過增加拓展支持,Regular Nomination同時(shí)提高了ICE的適應(yīng)能力,可以支持多種部署場景的變化。Regular Nomination具有更高的穩(wěn)定性,它可以允許雙方agent通過單個(gè)配對實(shí)現(xiàn)媒體支持,無需其他臨時(shí)選項(xiàng)支持(Aggressive Nomination需要臨時(shí)選項(xiàng)支持)。但是,Regular Nomination也有其缺點(diǎn),因?yàn)镽egular Nomination需要額外檢查完成,因此,Regular Nomination肯定會增加處理時(shí)延。通過以上內(nèi)容的介紹,筆者描述了Regular Nomination算法的處理方式,接下來,筆者介紹一下Aggressive Nomination算法的使用方式。
  當(dāng)使用Aggressive Nomination算法時(shí),在agent發(fā)生的每個(gè)檢查中,被控方agent會包含一個(gè)USE-CANDIDATE屬性,針對一個(gè)媒體構(gòu)件的檢查中,一旦第一個(gè)檢查是成功的,這個(gè)配對就會被添加到有效列表中,然后設(shè)置一個(gè)推薦標(biāo)識。在有效列表中,所有構(gòu)件的配對都設(shè)置了推薦標(biāo)識后,媒體開始通過最高優(yōu)先級的推薦標(biāo)識配對進(jìn)行傳輸。但是,因?yàn)閍gent在所有的檢查中都包含了USE-CANDIDATE屬性,在所有的檢查中,有可能部分其他的檢查還沒有完成,這樣就會引起其他有效配對會產(chǎn)生自己的推薦標(biāo)識設(shè)置。因?yàn)椋琁CE總是從有效列表中選擇最高優(yōu)先級推薦標(biāo)識的候選配對來進(jìn)行媒體傳輸。因此,當(dāng)ICE檢查完成時(shí),已選擇的配對可能實(shí)際上暫時(shí)發(fā)生了修改,這樣就會導(dǎo)致一系列的臨時(shí)選擇作為一個(gè)緩沖(三秒延遲規(guī)則,后面講到),直到ICE檢查穩(wěn)定后,這樣的狀態(tài)才能結(jié)束。因?yàn)檫@個(gè)問題,因此,相對于Regular Nomination算法來說,Aggressive Nomination缺乏一定的穩(wěn)定性。但是它不會增加檢查延時(shí)。
  3、更新ICE處理狀態(tài)
  無論是對于主控方agent還是被控方agent來說,ICE的處理狀態(tài)取決于在有效列表中標(biāo)識候選配對的當(dāng)前狀態(tài)和檢查列表的狀態(tài)。任何時(shí)間內(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)件)啟動一個(gè)triggered check queue,作為標(biāo)識配支持此媒體流。
  • 如果在檢查列表中的一個(gè)In-Progress配對作為標(biāo)識配對支持同樣構(gòu)件的話,如果配對的優(yōu)先級低于最低優(yōu)先級標(biāo)識配對,針對此構(gòu)件來說,agent應(yīng)該清除檢查的重傳處理流程。
  • 對于至少一個(gè)媒體流的每個(gè)構(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ù)文章中介紹。
  一旦每個(gè)檢查列表的狀態(tài)是完成狀態(tài),要求執(zhí)行以下流程:
  Agent設(shè)置所有的ICE處理狀態(tài)是完成狀態(tài)。
  如果agent是正在處于被控狀態(tài),此agent會為每個(gè)媒體流的每個(gè)構(gòu)件檢查最高優(yōu)先級已標(biāo)識的候選配對。如果它們中的任何候選配對不同于在最近offer/answer交互消息在的默認(rèn)候選配對,被控方agent必須生成一個(gè)更新的offer。具體的生成方式根據(jù)后續(xù)offer/answer交互模式的處理流程進(jìn)行。
  如果被控方agent正在使用Aggressive Nomination,當(dāng)配對選擇時(shí),它可能導(dǎo)致多個(gè)更新offers。Agent可以延遲發(fā)送此更新的offer,通過一定的時(shí)間設(shè)置進(jìn)行控制(RFC5245規(guī)范建議設(shè)置為一秒鐘),這個(gè)時(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)為此會話是一個(gè)失敗的會話,agent不應(yīng)該重新啟動ICE處理流程,被控方agent應(yīng)該結(jié)束整個(gè)會話。
  • 針對其他媒體流來說,如果在檢查列表中至少有一個(gè)檢查的狀態(tài)是完成狀態(tài),被控方agent應(yīng)該在其更新的offer中從此會話中移除此失敗的媒體流。
  • 針對其他媒體流來說,如果在檢查列表中沒有任何檢查是完成狀態(tài),但是,至少有一個(gè)檢查是正在運(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é)束流程相對比較直接。這里有兩個(gè)情況需要注意:
  • 部署場景是輕量級的部署場景,對端peer是全場景部署場景
  • 部署場景是輕量級部署場景,對端peer也是輕量級部署場景
  ICE結(jié)束處理會給agent帶來一個(gè)后續(xù)影響,agent能夠清除任何已分配的候選地址(ICE沒有使用這些候選地址)。關(guān)于清除已分配候選地址的處理方式,筆者在本文章的后續(xù)部分介紹。
  如果對端peer是全部署場景的話,這種情況下,agent將會收到peer的連接檢查。當(dāng)agent已經(jīng)收到來一個(gè)連接檢查,這個(gè)檢查中包含了針對一個(gè)媒體流的每個(gè)構(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的候選地址。針對每個(gè)媒體流,每個(gè)agent將會使用自己候選地址和對端peer的候選地址進(jìn)行配對處理。當(dāng)它們具有同樣的component,使用同樣的傳輸協(xié)議(RFC5245使用UDP傳輸協(xié)議),并且來自于同一IP地址類型(IPv4或IPV6),那么這兩個(gè)候選地址就會配對。在生成配對后,針對每個(gè)媒體流構(gòu)件中的配對數(shù)量有兩種處理方式:
  如果在每個(gè)媒體構(gòu)件中,有一個(gè)單個(gè)配對的話,此配對會添加到有效列表中。如果一個(gè)媒體的所有構(gòu)件只有一個(gè)配對的話,針對此媒體流的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è)構(gòu)件中,有多于一個(gè)以上的配對的話,需要執(zhí)行以下幾個(gè)步驟:
  • Agent必須基于本地策略選擇一個(gè)配對。因?yàn)椋@種情況僅發(fā)生在IPv6的環(huán)境中,RFC5245推薦agent需要根據(jù)RFC6724的處理流程選擇一個(gè)單個(gè)配對。
  • Agent會在有效列表中為每個(gè)構(gòu)件添加此已選配對。然后允許開始發(fā)送媒體。這里要注意,但是在實(shí)際環(huán)境中,可能雙方agent已選擇了不同的配對。
  為了保持雙方agent的配對的一致性,被控方agent必須發(fā)送一個(gè)更新的offer,在這個(gè)更新的offer中包含一個(gè)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)時(shí),它在一個(gè)候選地址(ICE沒有選擇此候選地址,然后釋放候選地址)終止發(fā)送或接收檢查。
  當(dāng)SIP網(wǎng)絡(luò)中使用了ICE,并且offer被經(jīng)過分叉處理發(fā)送到多個(gè)接收方時(shí),ICE將會使用同樣的本地候選地址并行和每個(gè)自己的answer進(jìn)行處理。對所有使用那些候選地址來傳輸媒體流的peers來說,一旦ICE處理流程狀態(tài)達(dá)到完成狀態(tài),agent應(yīng)該等待另外三秒鐘,然后agent可以終止對檢查的響應(yīng),或在那個(gè)候選地址生成一個(gè)triggered checks。Agent可以在那個(gè)等待時(shí)間釋放候選地址。注意,服務(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,獲得有價(jià)值的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è)

安陆市| 双峰县| 平潭县| 项城市| 佳木斯市| 米林县| 黄山市| 绵竹市| 汝南县| 四川省| 扬州市| 汝州市| 昭觉县| 杨浦区| 南投县| 拜城县| 阿荣旗| 合阳县| 尼勒克县| 延长县| 白银市| 新晃| 包头市| 平湖市| 饶阳县| 尤溪县| 东乡县| 民乐县| 凉城县| 怀仁县| 榆树市| 南皮县| 新宾| 松潘县| 长宁县| 桂东县| 民勤县| 常宁市| 陆川县| 阿荣旗| 普兰店市|