IAX2协议文档(RFC 5456)中文翻译

简介

在工作中接触到了IAX2协议,找遍了网上只找到了一些中文的论文。没有协议文档的具体翻译,最后只能自己看英文文档:《RFC 5456》。后因需要整理IAX2文档,就开始整理一个简短的文档,但发现还有所不足,后就开始着手进行翻译,也是为之后需要中文文档的人提供一些帮助,完整的文档地址:IAX2协议文档(RFC 5456)中文翻译。建议英文水平好的看原英文文档。

正文

下面为大家简单介绍一下IAX2协议:

IAX 是 Inter-Asterisk eXchange 的缩写,也就是 Asterisk 内部交换协议。IAX最初用在Asterisk上。

IAX优点:

  1. 只用一个UDP端口:4569,来传输通信数据,包括控制信令和媒体数据等。
  2. 媒体数据并不需要额外的RTP流,所以可以轻易穿越NAT。
  3. 媒体数据会用一个迷你帧来发送,迷你帧帧头只有4字节,不携带控制或信令数据,有效载荷比较大。迷你帧是不可靠传输,但由于语音通话通常是实时发送的,因此丢失的帧太旧而无法重新集成到音频流中,以至于无法重新传输,所以几乎没有影响,而且每65.536秒需要重置时间标志。
  4. 用二进制编码。

IAX缺点:

  1. 因为只用一个端口,所以容易被攻击。
  2. 编解码器定义由内部定义的32位掩码控制,因此编解码器必须在协议中定义,同时编解码器的最大数量受到限制。
  3. 实施问题(如果资源较少没有非常完善的库算的话)。
  4. 用二进制编码。

协议里每个字段的具体含义及详细介绍请参见:

这里给大家推荐几个iax Java库:

  • njiax
    实现的比较简陋,但是层次相对清晰,需要增加信令、完善交互流程等,线程创建数量较多,需要用线程池替代。
  • djiax
    实现相对完善,也需要增加信令、完善交互流程编码等,线程复用,但是限制了电话的并发数,应该用线程池替代。
  • njiax-a
    本人fork了njiax库,在此基础上增加部分信令、完善交互流程、增加G711和G729等编码方式、增加DTFMFrame处理、添加了简单的注册拨打示例等,详细信息见github。

可以转载,但请标明出处