rfc5245--概要翻译1

前言:

rfc5245介绍了 NAT下p2p的解决框架ICE(Interactive Connectivity Establishment)

此文档取代了过时的rfc4091, rfc4092 

rfc6336上有rfc5245的更新

很多次关键的不翻译了

对此rfc的翻译正确性不做任何保证。按照它而导致的任何问题后果自负。转载请注明原地址。


1-介绍

rfc3264介绍通过SDP传输媒体会话信息,它的机制(offer/answer)由sip提供

offer/answer在NAT环境下实现困难。原因offer/answer是为了建立媒体流的直接传输(译注:p2p),而NAT下p2p是有困难的。

有很多其他机制解决这样的问题(如ALGS,Middlebox Control Protocol,STUN等),但这些方案对网络拓扑适应性差。我们要个一揽子解决方案。

ICE解决了UDP下的媒体流跨NATp2p问题(ICE可以扩展以用于TCP)。ICE是个扩展的offer/answer,在SDP的offer/answer中增加多个用于p2p连接检查的IP:port对(就像STUN)。ICE还用到了TURN。ICE可用于多宿主双栈主机

2--概要

下面是大体拓扑图


ICE的思路:每个Agent有很多候选的传输层地址(即UDP的IP:port对)(下面称候选地址),它可以用来和别的agent通信。这些地址包括:

直接相连的地址(A transport address on a directly attached network interface)

NAT外网的转义地址(服务自反地址)(A translated transport address on the public side of a NAT (a  "server reflexive" address))

TURN分配的地址(中继地址)(A transport address allocated from a TURN server (a "relayed  address"))

上图的L候选地址理论上都可以用来和R的候选地址通信,但事实不行。ICE通过系统的判断判断什么候选地址可以用。

2.1收集候选地址

为了运行ICE,必须找出agent的候选地址。其中一个候选地址就是直连地址。

如果agent是多宿主主机,它的候选包括多个地址。根据对端的地址,本机可以通过一或多个候选地址和对端通信。例:一个agent在私有网络I1上有个候选地址,在公有网络I2上有个候选地址。agent可以通过I1上的候选地址和I1上的对端通信,I2上的候选地址可以和公网上的对端通信。(ICE)不猜哪个地址优先,而是提供两个候选地址。

接下去,agent通过stun或turn获得额外的候选地址。这包含2类:NAT外网的转义地址,TURN分配的地址。这2类地址都由TURN服务器发现,而不是分别从STUN/TURN获取(当只有STUN运行时,只能从STUN获得NAT外网的转义地址)。两类地址的关系见下图。


当agent从主机候选地址X:x向TURN发Allocate 请求,NAT会创造服务自反地址X1:x1,发向X1:x1的包会转成主机候选地址X:x发给agent。我们称和服务自反地址相关的主机候选地址BASE。

如果agent和TURN中有多个NAT,只有最外层的服务自反地址能被agent发现。如果没有NAT,服务自反地址会和主机候选地址相同(最后因为冗余而从候选地址中删除)

当Allocate请求到达TURN,TURN服务器在自己的IP Y上分配个端口y,然后发回Allocate响应,通知agent这个中继地址。同时TURN服务器也通过把Allocate 请求的传输层地址复制到Allocate响应中来告知agent 服务自反地址X1:x1。TURN(在NAT中)的原理实际是扮演个中继,R为了发给L消息,R先发到Y:y,TURN把它转发到X1:x1,然后NAT映射到X:x后发给L。

如果只存在STUN(rfc5389),agent只发送STUN Binding请求道STUN服务器,STUN服务器靠把Binding请求的传输层地址复制到Binding响应中来告知agent 服务自反地址。


2.2连通性测试

当L获得了它全部的候选地址,把它们按优先级从高到低排序后通过信令通道(SDP offer)发送给R。R收到后做同样的事,然后通过响应发给L。最后,每个agent都拥有了自己和对方的候选地址。它们共同组成CANDIDATE  PAIRS(候选地址对)。client通过CANDIDATE  PAIRS发送给对端STUN request来检查它们。

原则如下:

根据优先级对候选地址对排序

根据优先级向对候选地址发送request

确认对端的响应

由于双方都进行检查,所以结果就是四次握手:


重要的是STUN request从未来媒体流(如RTP RCTP)将使用的地址发送接收。所以要从这里解复用(译注:就是个双工器)STUN和媒体流,这很容易。

如果在连通性测试中stun响应中的服务自反地址和已知的候选地址不同,这个候选地址叫PEER REFLEXIVE CANDIDATE(对端反身候选地址),它也会像其他候选地址一样被ICE测试。

一旦R收到L的测试(request),R马上发起对L的测试。这个可以提高测试速度。它叫做TRIGGERED CHECK(触发测试)

测试结束后L和R都知道双方p2p的收发地址。

2.3候选排序

(未完待续)





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