RFC5245 ICE 中文注解


2023年12月15日发(作者:新加坡新增)

RFC5245 ICE 各种概念中文注解

1)三种地址: Host candidate(本机地址); Server Reflexive candidate(公网IP); Relayed

candidate(在TURN Server上的地址)

2)BASE: 指与反射地址对应的本机地址。 本机地址的BASE就是本机地址。Relayed

Candidate的Base就是Candidate 自己,如果Relayed Candidate和Host Candidate相同,这个地址应该被丢弃。

3)只有STUN Server时,用STUN Binding 请求;对Turn Server ,是 Allocate 请求。

4)L收集了所有它的candidate后,优先级排序,通过Signal 通道Offer 发送给R。R收到Offer后,开始自己的收集过程,收集完成后发送自己的candidate Answer 给L。两端开始组织成candidate pairs,然后开始检查各个pair的连通性。

5)如果在连通性检查返回的反射IP不同于任何已知的,这个会被标记为PEER

REFLEXIVE CANDIDATE。

6)每个Agent给它的Candidate一个数字的优先级;最终的优先级是两端的优先级相加的值,这样两边都有同样的优先级。

7)每个Candidate有一个属性叫FOUNDATION。如果两个Candidate是用 同样的类型,从同一个Host Candidate和Stun Server用同样的协议得到;这样两个Candidate就有相同的FOUNDATION。一个Candidate Pair的FOUNDATION 就是两个Candidate的FOUNDATION的连接。开始的时候只有不同的FOUNDATION的Pair才会被检查;其他的Pair处于Frozen状态。当一个Pair的检查成功结束后,相同FOUNDATION的Pair 才处于Unfrozen状态。避免对相同的网络状况的Pair重复检查。

8)每个连通性检查的Request 都是被通过Signal交互Key的 Message Authentication

Code (MAC)保护的。

9)有Controlling Agent 和Controlled Agent 之分。Controlling Agent 决定选择那个Pair。

10)两种方式: Regular or Aggressive Nomination

11)Regular Nomination: 当得到至少一个合法的Pair 后,Controlling Agent选择一个Pair,在上面再发送一个带Flag 的请求,告诉对端这个就是被选择的Pair.

12)Aggressive Nomination:Controlling Agent 在所有的发送的请求里都带上Flag标志(Controlled Agent不用带);最先成功的那个被选择为媒体传输通道。(所有成功的Pair里优先级最高的那个。)

13)当所有的媒体流都完成后,Controlling Agent发送一个Updated Offer,如果在m和clines里的默认值与被选择的值不相同时。

14)Lite实现: Ice 的Lite 实现是给那些有公网IP的设备,这样这些设备比较容易的可以支持ICE。ICE的Lite实现不需要实现Candidate的收集过程;只需要提供Host

Candidate 。不需要实现连通性检查或者状态机。只需要实现连通性检查的Response 。Full Agent 是Controlling Agent 。两个Lite实现之间如果要互联,不需要发送Check。

15)为了发送Offer,执行5个步骤:收集Candidates;优先级排序;去除冗余;选择默认Candidate ;格式化发送SDP Offer。

16)收集Host Candidate:绑定Port 到本机的每一个Interface里;对每一个媒体流,Agent

都需要为每一个Component得到一个Candidate;每个Candidate都有一个它对应的Component。每个Component都有个Id 想对应;RTP是1, RTCP是2。如果一个Agent 用到了RTP和RTCP,它有K个IP地址,它要收集2*K个主机Candidate 。

17)计算Foundation :相同类型(Host, Relayed, Server reflexive, or peer reflexive);Base 有相同IP地址(port 可以不同);对Relayed or reflexive Candidate,得到他们的STUN or

TURN Server 是相同的IP地址;用相同的协议得到(TCP or UDP, etc。)

18)在ICE过程完整之前,Reflexive 和 Relayed 地址必需用 Binding Request 或

Refresh Transaction 保证是一直存在的。

19)Priority 计算公式:Priority = (2^24)*(Type Preference) + ( 2^8) * (Local Pre) + ( 2 ^0)

*( 256 - Component ID)

实际上就是 Type Pre 最高位8 bits,Local Pre 中间16bits,(256-Com ID) 最后8

bits

Type Pre 从0 到 126; 126最高优先级;相同类型的Candidate优先级相同;Peer

Reflexive 优先级大于Server Reflexive;

Local Pre 从0 到65535;如果只有一个IP 地址,优先级就是65535;

建议值:126 For Host; 100 for Server Reflexive; 110 for Peer Reflexive; and 0 for

Relayed; Local Host Pre from a VPN should be 0;

对IPv6 IPv4双协议栈主机,V6优先级高于 6to4地址 高于 V4地址;

20)如果一个candidate的地址和Base都与另外一个Candidate 相同,认为是冗余的;消除低优先级的那个。

21)选择默认地址的目的是为了与Non-ICE对端通信。当与 ICE对端通信时,如果开始的时候没有选择默认地址,那么就需要在完成ICE流程后来一个updated Offer /Answer从而能更新SDP。 Agent 必需对所有在使用的媒体流选择一个默认地址;在使用的媒体流是指端口为0 的流。即使一个流被 a=inactive 或者带宽被设置为0,这个流也是在使用的(in-use)。 建议按如下顺序设置默认值:Relayed > Server Reflexive > Host。

如果是non-ICE aware; 对于RTP来说,默认目标地址就是SDP里的c line; port 在

m line; 对于RTCP, 如果有RTCP的属性就是在RTCP属性里,否则就是在c line和 m line里的port + 1; 默认Candidate 就是地址和默认目标地址相同的那个Candidate 。

22)如果想不支持RTCP就要声明: b=RS:0 and b=RR:0 RFC3556

23)Agent收到SDP Offer 后,首先验证Offer是否支持ICE,验证规则:对于每个媒体流的每个Component 的默认目标地址,必须出现在Candidate 属性里。例如在RTP流里,c line里的IP 地址和m line里的port,相应的出现在某个candidate里。RTCP属性里的值出现在另外一个candidate里。

(For each media stream in the SDP it received, the default destination for each component

of that media stream appears in a candidate attribute.)

24)Candidate Pair Priority = 2 ^ 32 * Min(G, D) + 2 * MAX(G, D) + ( G>D?1:0); G: Controlling

Agent Priority; D: Controlled Agent Priority;

25)连通性检查/Connectivity Checks:

a) Agent发送Binding 请求;必须使用STUN short-term credential mechanism;FINGERPRINT 机制必须使用。

b)Agent 必须在Binding请求中包含PRIORITY 属性。值应该是与本地Candidate的Priority相同(除非这个Pair的属性是Peer Reflexive Type)。

c)Controlling Agent有可能包含 USE-CANDIDATE属性;Controlled Agent一定不能包括改属性;这个属性表明Controlling Agent希望能使用该Pair 来为这个媒体流传输数据(如果Check 能成功的话)。

d)Controlling Agent必须包含 ICE-CONTROLLING属性;Controlled Agent必须包含ICE-CONTROLLED属性;

e)STUN short-term credential: User Name形式如下 "Remote UserName:Local

UserName"; Password用对端传送过来的。L -> R: username RFRAG:LFRAG; Password

RPASS; R->L: username LFRAG:RFRAG; Password LPASS;


本文发布于:2024-09-21 13:25:46,感谢您对本站的认可!

本文链接:https://www.17tex.com/fanyi/1861.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:地址   属性   选择   默认
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议