我已经浏览了RFC 5389和RFC 5245以及更新的RFC 8445。我理解STUN在返回服务器自反地址或中继地址时的工作原理。请求被发送到STUN服务器。
我的基本问题是关于ICE连接性检查使用眩晕。RFC 8445在第10页上指出:
"...At the end of
this process, each ICE agent has a complete list of both its
candidates and its peer's candidates. It pairs them up, resulting in
candidate pairs. To see which pairs work, each agent schedules a
series of connectivity checks. Each check is a STUN request/response
transaction that the client will perform on a particular candidate
pair by sending a STUN request from the local candidate to the remote
candidate."
为了检查候选对的连接性检查,STUN消息必须至少提供目标IP地址、端口、Proto。这个眩晕消息结构是在哪里描述的?我在哪里可以获得有关STUN如何完成此连接检查的详细信息?
发布于 2019-10-02 06:40:19
我能理解在解释RFC描述过程中的困难。我正试图简化:-
假设我在我的结尾处获得了候选对:-
同样的,我的同伴也有他自己的一套
让我们快速走向未来,在那里我们拥有良好的媒体流量。显然,对于来自A->B的媒体方向,我们有两个传输地址。由于UDP用于发送媒体,所以套接字具有源地址和目标地址。让我们叫他们SrcIP_A,SrcPort_A和SrcIP_B,SrcPort_B。
必须清楚的是,SrcIP_A,SrcPort_A是A和SrcIP_B的候选对的一部分,SrcPort_B是B的候选对的一部分。
现在,到了现在,从A的角度来看,为了实现A->B的媒体流动,我们只需要锁定我们最终将从我们已经拥有的集合中使用的对。
这是眩晕出现在画面中的地方。记住,STUN请求需要发送到特定的IP端口。响应会告诉NATted服务器在请求中注意到的是哪个外部地址。
因此,A,创建9对,将其自己的候选对中的每个条目与它的对等项匹配。然后,它从它自己的候选集中的每一个从对的RFC 8445页基向每个远程候选对发送一个眩晕请求。现在,当远程B接收到候选对上的任何通信量时,它必须在它自己的端实现一个STUN服务器逻辑。因此,基本上,当接收到任何数据包时,套接字都需要能够区分媒体和眩晕数据包。在后一种情况下,它将发回一个眩晕响应,指示它从何处收到请求。
让我们假设,当迭代A是在以下组合。
希望我已经说清楚了。
发布于 2018-11-05 21:46:55
您将发现RFC-5389第6节. https://www.rfc-editor.org/rfc/rfc5389#page-10中描述的眩晕消息结构。
说明中值得注意的部分:
STUN消息使用面向网络的格式以二进制方式编码(最重要的字节或八进制优先,也通常称为大端字节)。传输顺序在RFC 791 RFC0791附录B中作了详细描述。除非另有说明,数字常量以小数(基数10)表示。所有眩晕消息都必须以20字节的标题开头,后面跟着0或更多的属性。STUN头包含一个眩晕消息类型、魔术cookie、事务ID和消息长度。每条眩晕信息中最重要的2位必须是零。当STUN与同一端口上的其他协议多路复用时,这可以用于区分STUN数据包和其他协议。消息类型定义了STUN消息的消息类(请求、成功响应、失败响应或指示)和消息方法(主要功能)。虽然有四个消息类,但是STUN中只有两种类型的事务:请求/响应事务(由请求消息和响应消息组成)和指示事务(由单个指示消息组成)。响应类分为错误响应和成功响应,以帮助快速处理眩晕消息。
https://stackoverflow.com/questions/53144115
复制相似问题