非常教程

Erlang 20参考手册

megaco

2.结构 | 2. Architecture

2.1网络视图

Megaco是用于控制分组网络边缘的网关功能的(主/从)协议。这方面的例子是IP-PSTN中继网关和模拟线路网关。Megaco的主要功能是允许网关分解为呼叫代理(呼叫控制)部分(称为媒体网关控制器,MGC) - 主控和网关接口部分(称为媒体网关,MG) - 从属。MG没有呼叫控制知识,只能处理连接和简单的配置。

SIP和H.323是用于呼叫控制的对等协议(仅适用于H.323中的某些协议)或更一般的多媒体会话协议。他们都在一个分解的网络中与Megaco处于不同的级别(呼叫控制),因此不知道Megaco是否在下面被使用。

图2.1:网络架构

Megaco协议和对等协议在本质上是互补的,在同一系统中完全兼容。在系统级别,Megaco允许

  • 总体网络成本与性能优化
  • 通过隔离呼叫控制层的变化来保护投资
  • 地理上可自由分配呼叫功能和网关功能
  • 旧设备的适应性

2.2总则

这个Erlang / OTP应用程序为构建需要使用Megaco / H.248协议的应用程序提供了一个框架。

我们引入术语“user”作为MG或MGC的通用术语,因为我们支持的大多数功能对于MG和MGC都很常见。(本地)用户可以以各种方式进行配置,并且可以建立与其对应方,远程用户的任何数量的连接。一旦建立了连接,连接就会受到监督,并可用于发送消息。根据标准,MG最多连接到一个MGC,而MGC可以连接到任意数量的MG。

为了管理“虚拟MG”,一个Erlang节点可以托管任意数量的MG。事实上,它可能是MG和MGC的混合体。你可以说一个Erlang节点可以承载任意数量的“用户”。

协议引擎使用回调模块来处理各种事情:

  • 编码回调模块 - 处理消息的编码和解码。包含了几个用于处理不同编码的模块,例如ASN.1 BER,相当好的缩进文本,紧凑文本和其他一些模块。其他的可能是你写的。
  • 传输回调模块-处理消息的发送和接收。包含TCP/IP和UDP/IP的传输模块,其他模块可能由您编写。
  • 用户回调模块 - MG或MGC的实际实施。大部分功能用于处理解码事务(请求,回复,确认),但还有其他处理连接,断开连接和错误事件的功能。

每个连接可以有自己的回调模块配置,重新发送定时器,事务ID范围等,并且可以在运行中重新配置它们。

在Megaco的API中,用户可以明确地发送动作请求,但是生成事务标识符,消息到远程用户的编码和实际传输由协议引擎根据实际的连接配置自动处理。Megaco消息不在API中公开。

在接收端,传输模块接收消息并将其转发给协议引擎,协议引擎将其解码并为每个事务调用用户回调函数。当用户处理了它的动作请求时,它只是返回一个动作应答列表(或一个消息错误),协议引擎使用编码模块和传输模块来编写消息并将其转发给始发用户。

协议栈也处理诸如自动发送确认、挂起的事务、消息的重新发送、连接的监督等。

为了为MG和MGC的可扩展实现提供解决方案,用户可以分布在几个Erlang节点上。其中一个Erlang节点连接到物理网络接口,但消息可能从其他节点发送,并且回复会自动转发回始发节点。

2.3单节点配置

在这里,概述了一个系统配置,每个配置都位于一个Erlang节点上,其中包含一个MG和MGC:

图2.2:单节点配置

2.4分布式配置

在一个分布在多个Erlang节点上的用户(本例中为MGC)的较大系统中,它看起来有点不同。这里的编码是在原始的Erlang节点(1)上执行的,二进制文件通过物理网络接口转发到节点(2)。当在节点(2)上的接口上接收到潜在的消息应答时,它在那里被解码,然后对消息中的每个事务采取不同的动作。事务回复将以其解码形式转发到始发节点(1),而其他类型的事务将在节点(2)本地处理。

定时器和消息的重发将在一个节点(即节点%281%29)上进行本地处理,以避免在Erlang节点之间不必要地传输数据。

图2.3:分发节点配置

2.5消息往返呼叫流程

消息的典型往返可以看作如下。首先我们查看发端的呼叫流程:

图2.4:消息呼叫流程(始发端)

然后我们继续在目的地侧的呼叫流程:

图2.5:消息呼叫流程(目标端)

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1