rfc5245概要翻譯-3

對此rfc的翻譯正確性不做任何保證。按照它而導致的任何問題後果自負。轉載請註明原地址。

4發送初始offer

爲了能在offer/answer交互中發初始offer,一個agent必須1收集候選地址2排序3刪除重複4選擇默認候選5制定併發送SDP。

4.1完整實現所需要的

4.1.1收集候選

一個agent在即將通信前做這件事。它可以由用戶接口觸發或者在會話初始中明確要求。所有候選是個傳輸層地址。候選還包括類型和BASE。類型有四種:主機地址,服務器自反地址,對端自反地址,中繼地址。服務器自反地址由STUN或TURN獲取,中繼地址由TURN獲取。對端自反地址在ICE連接性檢測的階段獲取。BASE是agent發送數據時必須用的候選地址(譯註?)。

4.1.1.1主機候選地址

主機地址由在IP上綁定端口獲得。

agent要爲每個媒體流組件獲得候選地址。每個IP上的主機候選地址總和組件相綁定(譯註:看例子)。每個組件有個組件ID,例如如RTP媒體流,RTP組件ID1,RCTP組件ID2。如果agent用RCTP,它必須爲RCTP收集候選地址。如果agent用RTP+RCTP,最終會有2*K個主機候選地址,其中K是agent的IP數量。每個主機候選地址的BASE是它自己。

4.1.1.2服務自反候選地址和中繼候選地址

agent應該能獲得服務器自反地址和中繼地址。這個具體取決於網絡。比如純內網環境下的多棧主機(多IP),只要獲取它的主機地址就足夠了,ICE只是用來選擇用什麼主機地址。

TURN的使用代價高昂,只有雙終端在對稱型NAT後才用。所以有些時候就不用TURN了。所以建議當agent不需要收集服務器自反地址和中繼地址時,可以關閉這功能,需要時再打開。

當收集服務器自反地址和中繼地址時用TURN服務器,只收集服務器自反地址時用STUN服務器。

agnet通過配置或DNS來確定TURN/STUN服務器的位置。建議用DNS。rfc5389描述DNS找STUN服務器,rfc5766描述DNS找TURN服務器。

上面只講了單STUN和單TURN。如果有多個STUN或TURNserver,從同一個Server來獲取候選地址。(多Server)的結果是有多個從Server傳來的主機地址。agent選擇一個,從上面向Server發送Binding or  Allocate。綁定是沒有驗證的,備用服務器發回的響應也需忽略。agent必須爲Binding請求實現rfc5389中的向後兼容模式。Allocate請求需要通過其他長期的驗證方式驗證。

Ta微秒後,agent能發起新的STUN/TURN事物。新事物可以是可恢復性故障的重試(如認證錯誤),或是爲新的主機候選地址--Server對發起。agent發送頻率不應該超過Ta,詳細見16章如何設置Ta和STUN重傳超時RTO

Agent會收到Binding or  Allocate響應。成功的Allocate響應使agent獲得了服務器自反地址(包含在映射地址中),和中繼地址(在XOR-RELAYED-ADDRESS屬性中)。如果服務器由於缺乏資源而拒絕了Allocate請求,agent應該發Binding請求,來獲得服務器自反地址。Binding響應會給agent提供唯一一個服務器自反地址(包含在映射地址中)。服務器自反地址的BASE是Binding or  Allocate發送的主機候選地址。中繼地址的BASE是它自己。如果中繼地址和主機候選地址相同,這個中繼被忽略。

4.1.1.3計算"基礎"

最後,agent給每個候選地址分配個"基礎(Foundations)",它在一個會話中有效。兩個候選地址在如下的情況下的“Foundations”必須一致:

1類型一致(主機、中繼、服務器自反、對端自反)

2BASE的IP相同(端口可以不一樣)

3獲取自反和中繼地址的STUN和TURN服務器IP必須一樣。

4傳輸層協議相同(TCP/UDP)

如果上述條件有一條不滿足,Foundations必須不同

4.1.1.4保持候選有效

中繼、服務器自反地址在ICE流程結束前必須保持有效(見8.3)。從Binding Request中獲得的服務器自反地址還需要通過向服務器發額外的Binding Request來保持有效。更新(Refresh)通過更新事物來完成(rfc5766),Refresh請求也會刷新服務器自反地址。

4.1.2候選優先級計算

(待續)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章