Протокол MGCP (Media Gateway Control Protocol) предложен комитетом IETF, рабочей группой MEGACO. Первая спецификация протокола MGCP приведена в документе RFC 2705 (1999 г.). Рабочая группа MEGACO при разработке этого протокола опиралась на принцип декомпозиции, согласно которому шлюз разбивается на отдельные функциональные блоки: транспортный шлюз, контроллер шлюзов, шлюз сигнализации.
Таким образом, весь интеллект сосредоточен в контроллере шлюзов, функции которого могут быть распределены между несколькими компьютерными платформами. Шлюз сигнализации выполняет функции транзитного пункта сигнализации. Транспортный шлюз выполняет функции трансляции RTP-трафика (возможно преобразование речевой информации).
Перенос сообщений протокола MGCP обеспечивает протокол не гарантированной доставки – UDP, который применяется из-за более быстрой работы, чем ТСР.
Протокол MGCP является внутренним протоколом, поддерживающим обмен информацией между функциональными блоками распределенного шлюза. Протокол MGCP использует принцип master/slave (ведущий/ведомый), причем устройство управления шлюзами является ведущим, а транспортный шлюз – ведомым устройством, выполняющим команды, поступающие от устройства управления.
Такое решение обеспечивает масштабируемость сети и простоту эксплуатационного управления ею через устройство управления шлюзами.
Для описания процесса обслуживания вызова с использованием протокола MGCP разработана модель организации соединения. Базой этой модели являются два компонента: порт (Endpoints) и подключение (Connections).
Endpoints – это порты оборудования, являющегося источниками и приемниками информации. Идентификатор порта определяет тот порт, которому надлежит выполнить команду, за исключением команды Notify и ReStartInProgress, в которых идентификатор определяет порт, передавший команду.
Существуют физические и виртуальные порты. Физические порты – это аналоговые интерфейсы, поддерживающий каждый одно телефонное соединение, или цифровые каналы, также поддерживающие одно телефонное соединение и мультиплексированные по принципу временного разделения каналов в тракте Е1. Виртуальный порт – это источник речевой информации в интерактивном речевом сервере, т.е. некое программное средство.
Connections– подключение порта к одному из двух концов соединения, которое создается между ним и другим портом. Такое соединение будет установлено после подключения другого порта к его второму концу. Соединение может связывать порты разных шлюзов через сеть с маршрутизацией портов IP или порты внутри одного шлюза.
Подключение создается устройством управления для каждого порта, участвующего в соединении.
При установлении, поддержании и разрушении соединения устройство управления и шлюз обмениваются командами и ответами, которые представляют собой набор текстовых строк. Текстовая строка команды или ответа использует набор символов ASCII.
В протоколе MGCP используются команды управления соединением и команды управления портами оборудования.
Структура команды:
Команда Идентификатор транзакции Идентификатор порта Версия протокола
Параметры (обязательные и не обязательные)
Команда – имеет четырехзначное буквенное значение;
Идентификатор транзакции – служит для коррекции команд и ответов. Значение идентификатора транзакций выбирается из диапазона 1-999999999. Значение идентификатора текущей транзакции на единицу больше идентификатора предыдущей транзакции;
Идентификатор порта – определяет тот порт, которому надлежит выполнить команду, за исключением команд ReStartInProgress и Notify, в которых идентификатор определяет порт, передавший команду. Кодируется в соответствии с RFC 821;
Версия протокола – MGCP 0.1.
В протоколе MGCP определена следующие девять команд:
* Создать соединение - CreateConnection (CRCX)
* Модифицировать соединение - ModifyConnection (MDCX)
* Завершить соединение - DeledeConnection (DLCX)
* Уведомить - Notify (NTFY)
* Запрос уведомления - NotificationRequest (RQNT)
* Конфигурация портов - EndpointConfiguration (EPCF)
* Проверить порт - AuditEndpoint (AUEP)
* Проверить соединение - AuditConnection (AUCX)
* Рестарт - ReStartInPrgress (RSIP)
Структура ответа на команду:
Код ответа Идентификатор транзакции Необязательный комментарий
Параметры (обязательные и не обязательные)
Код ответа представляет собой три цифры, которые делятся на категории: от 000 до 099 – ответ с подтверждением;
*
от 100 до 199 – предварительные ответы (окончательный ответ поступает позже);
*
от 200 до 299 – команда успешно выполнена;
*
от 400 до 499 – отказ из-за случайной ошибки;
*
от 500 до 599 – отказ из-за постоянной ошибки;
*
от 800 до 899 – ответ с пакетной спецификой.
Код ответа приходит на определенную команду, поэтому идентификатор транзакции в команде должен соответствовать идентификатору в ответе.
Параметры, следующие за заголовком ответа, так же как и в команде имеют определенную комбинацию, которая специфицирована в рекомендации.
Определены следующие основные параметры:
*CallId (С) – идентификатор сеанса связи
*ConnectionId (I) – идентификатор подключения
*Mode (M) – режим соединения
*RequestedInfo (F) – запрашиваемая информация
*ResponseAck (K) – подтверждение транзакции
*BearerInformation (B) – закон кодирования
*RequestIdentifier (X) – идентификатор запроса
*LocalConnectionOptions (L) – параметры порта
*RequestedEvents ® – запрашиваемые события
*SignalRequests (S) – требование передать сигнал
*NotifiedEntity (N) – уведомляемый объект
*DigitMap (D) – план нумерации
*QuarantineHandling (Q) – карантинная обработка
*DetectEvents (T) – выявляемые события
*ConnectionParameters (P) – параметры соединения
*RestartMethod (RM) – метод рестарта
*ReasonCode (E) – код причины
*RestartDelay (RD) – задержка рестарта
*ObservedEvents (O) – обнаруженные события
*LocalConnectionDescriptor (LCD) – локальные параметры соединения на передающей стороне
*RemoteConnectionDescriptor (RCD) – удаленные параметры соединения на приемной стороне
Приведем пример команды CRCX:
CRCX 1200 portca@rtp1.net MGCP 0.1
C: ABC123
M: recvonly
ответ на команду CRCX может выглядеть следующим образом:
200 1200 OK
I: CDE4321
v=0
c=IN IP4 128.96.46.5
m=audio 3456 RTP/AVP 0
Приведем пример команды DLCX:
DLCX 3205 portca@rtp1.net MGCP 0.1
C: ABC123
I: CDE4321
ответ на команду DLCX может выглядеть следующим образом:
250 3205 OK
P: ps=1245, os=62345, pr=780, or=45123, pl=10, ji=26, la=4
Приведем пример команды RSIP:
RSIP5120 portca@rtp1.net MGCP 0.1
RM: restart
RD: 30
ответ на команду DLCX может выглядеть следующим образом:
200 5120
При необходимости можно рассмотреть и более сложные команды. По вопросам обращайтесь на адрес ftc@list.ru