查看源代码 架构

网络视图

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

SIP 和 H.323 是用于呼叫控制的对等协议(仅对 H.323 中的某些协议有效),或者更一般地说是多媒体会话协议。它们都在与 Megaco 分解网络中不同的级别(呼叫控制)上运行,因此不知道底层是否正在使用 Megaco。

Network architecture

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

  • 整体网络成本和性能优化
  • 通过隔离呼叫控制层面的更改来保护投资
  • 自由地在地理上分布呼叫功能和网关功能
  • 适应传统设备

概述

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

我们引入了“用户”一词,作为 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 节点连接到物理网络接口,但是消息可以从其他节点发送,回复会自动转发回原始节点。

单节点配置

这里概述了一个系统配置,其中 MG 和 MGC 各自驻留在一个 Erlang 节点中

Single node config

分布式配置

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

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

Distributes node config

消息往返呼叫流程

消息的典型往返可以如下查看。首先,我们查看原始端的呼叫流程

Message Call Flow (originating side)

然后我们继续查看目标端的呼叫流程

Message Call Flow (destination side)