STUN消息是如何形成的

STUN代理创建一个STUN消息。STUN消息类必须是“Request”或“Indication”,方法必须是“binding”或一些其他方法。对于没有auth的binding方法,不需要任何属性。

turn-server

STUN代理发送请求或指示。STUN消息可以通过

  1. UDP
  2. TCP
  3. 基于TCP的TLS

STUN消息的发送方式

通过UDP协议发送请求

当通过UDP发送数据包时,数据包可能会被丢弃,因为UDP无法保证到达目的地没有故障通知,STUN请求的可靠性必须通过客户端自身重新传输请求消息来实现。

客户端可以从RTO(重传超时)间隔开始重传请求消息,并在每次重传后加倍。重传可以继续,直到接收到响应或者直到由于默认Rc请求是7而已经显示了总Rc请求。

通过TCP或TLS over IP协议发送请求

为了通过TCP传输STUN消息,客户端打开到服务器的TCP连接。

在一些使用情况下,STUN是作为TCP连接上的唯一协议发送的,在这些情况下,可以使用任何附加的成帧或复用来发送STUN。在其他使用情况下,发送STUN,STUN通过TCP连接与其他数据多路复用。

当STUN通过TCP连接与其他数据复用时,需要某种成帧协议,并且STUN在该成帧协议之上运行。该成帧协议允许接收STUN消息。

如果通过TCP运行STUN消息,则必须至少实现RCA密码,但也可以使用其他密码套件。正在接收的STUN消息的可靠性由TCP本身处理,不需要在STUN协议级别进行重传。

对于请求/响应事务,如果客户端无法通过TCP建立连接,或者如果TCP连接重置为失败,则认为请求/响应交易已失败。

客户端可以通过TCP发送多个请求,甚至在接收到响应之前也可以发送多个要求。客户端应保持连接打开,直到所有STUN请求都已通过连接发送。

没有计划使用通过STUN请求或中继地址(TURN)获得的任何其他资源,服务器应保持通信打开,并让客户端终止通信,除非通信超时。

收到STUN消息时如何处理这些消息

当STUN服务器接收到消息时,它会检查以下条件

  1. 前2位是0吗
  2. Magic cookie字段的值正确吗
  3. 消息长度合理吗
  4. 特定方法是否允许使用消息类
  5. 消息值是支持的方法吗
  6. 如果是成功响应或错误响应,则检查transactionID是否与正在处理的当前事务的transactionID相同
  7. 如果检测到错误,消息将被静默丢弃
  8. 如果使用了fingerprint 属性,则代理会检查fingerprint 属性是否存在以及是否正确
  9. 如果存在任何身份验证机制,STUN将检查身份验证

检查完之后开始处理请求

  1. 检查一个或多个未知的理解所需属性,如果存在,则发送带有代码403的错误响应,并在列出未知属性的响应中包括unknown-ATTRIBUTE响应。
  2. 进行该方法所需的任何额外检查,并制定成功响应。

制定成功或错误响应

发送成功或错误响应的方法与接收请求的方法相同。

成功响应将数据与成功代码200一起发送。

对于ERROR响应,服务器会在响应中添加一个错误代码属性。还向错误响应中添加了描述错误类型的短语。

0

本文为原创文章,转载请注明出处,欢迎访问作者网站(和而不同)

发表评论

error: Content is protected !!