06-06-2023
MGCP или Media Gateway Control Protocol дословно — Протокол контроля медиашлюзов. Является протоколом связи в распределённых VoIP системах передачи голоса по протоколу IP.
MGCP описан в RFC 3435, который заменил устаревший к настоящему времени RFC 2705, заменивший, в свою очередь, Simple Gateway Control Protocol (SGCP).
Сходный протокол для тех же целей Megaco, совместная продукция IETF (RFC 3525) и ITU (рекомендации H.248-1). Оба протокола описаны единым аппаратно-программным интерфейсом (API) Архитектура и требования MGCP в RFC 2805.
Содержание |
Распределённые системы состоят из агента вызовов — Call Agent (или контроллера медиашлюза), по крайней мере одного медиашлюза (MG) и по крайней мере одного сигнального шлюза (SG), подключенных к Телефонной сети общего пользования (ТФОП). С точки зрения сети ОКС-7 такой симбиоз устройств рассматривается как один узел с одним общим пойнт-кодом.
Шлюз сигнализации - обеспечивает доставку сигнальной информации, поступающей со стороны ТфОП, к контроллеру шлюзов и перенос сигнальной информации в обратном направлении.
На практике сигнальный шлюз (SG) и медиашлюз (MG) подключены в один физический коммутатор, но это совсем не обязательно. Call Агент не использует MGCP для контроля сигнального шлюза (SG), для этих целей — обратной связи между сигнальным шлюзом (SG) и Агентом используются протоколы SIGTRAN.
Медиашлюз выполняет функции преобразования речевой информации, поступающей со стороны ТфОП в голосовых каналах с постоянной скоростью передачи, в вид, пригодный для передачи по сетям с маршрутизацией пакетов IP (кодирование и упаковку речевой информации в пакеты RTP, и далее в UDP и IP) а также обратное преобразование).
Медиашлюз использует протокол MGCP для сигнализации событий, таких как информация что трубка положена/снята или набираемые цифры вызываемого номера (донабор).
Call Агент - контроллер шлюзов, выполняет функции управления шлюзами, который использует протокол MGCP чтобы сообщать медиашлюзу:
MGCP позволяет также следить Call Агенту за состоянием оконечных устройств на медиашлюзе (MG).
Как правило, медиашлюз конфигурирован со списком Call Агентов, от которых может принимать инструкции-запросы.
В принципе, уведомления можно посылать разным Агентам от каждого оконечного устройства (как предусмотрено Call Агентами, для этого используется параметр NotifiedEntity). Практически однако, желательно, чтобы в данный момент всеми оконечными устройствами управлял один и тот контролер шлюзов; другие Call Агенты доступны при резервирования ресурсов в случае обеспечения избыточности, если первичный Агент отказывает, или теряет контакт с медиашлюзом. В случае такого отказа управление шлюзом автоматически переходит к резервному контролеру шлюзов. Всё о чём необходимо позаботиться для такого сценария, это обмен информацией о состоянии между двумя Агентами, однако, это не гарантирует, что оба не будут пытаться управлять одним и тем же шлюзом. Для разрешения конфликтов используется способность опрашивать шлюз, чтобы определить, который из Агентов является управляющим в данный момент.
Пакеты MGCP отличаются от многих других протоколов. Он резервирует обычно порт UDP 2427, датаграммы MGCP могут содержать и пустые значения, совсем не так как обычно строятся пакеты в протоколах TCP. Пакет MGCP является командой (запросом) или ответом. Команды (запросы) начинаются с четырехбуквенного кода, ответы начинаются с трехзначного цифрового кода.
В MGCP каждая команда несёт в себе идентификатор транзакции и получает ответ на каждую.
Список запросов содержит всего восемь команд: AUEP, AUCX, CRCX, DLCX, MDCX, NTFY, RQNT, RSIP.
Две команды используются Агентом, чтобы сделать запрос на медиа шлюз:
Три команды используются Call Агентом, чтобы управлять RTP соединением на медиа шлюзе (шлюз может также послать команду DLCX, когда нужно удалить соединение для самоуправления):
Команда RQNT используется медиа шлюзом для запроса об уведомлениях используется Агентом, чтобы запросить уведомление о событиях на медиа шлюзе.
Команда NTFY используется медиа шлюзом, чтобы сообщить Агенту, что обнаружено событие, о котором Агент предварительно запросил уведомление (командой RQNT).
Команда RSIP — рестарт в процессе, используется медиа шлюзом, чтобы указать Агенту, идёт процесс перезапуска.
Первый пример (из RFC 3435) показывает, команду CreateConnection, создающую соединение с указанным оконечным устройством (endpoint). Соединение будет иметь определённый индентификатор CallID (1204). LocalConnectionOptions указывает, что будет использоваться кодек G.711 (PCM) по мю-закону и период пакетирования составит 10 мс. Режим работы соединения будет "receive only" (только получение):
CRCX 1204 aaln/1@rgw-2567.whatever.net MGCP 1.0 C: A3C47F21456789F0 L: p:10, a:PCMU M: recvonly
Код ответа 200 ОК означает, что операция прошла успешно, и поэтому отображается индентификатор CallID для вновь созданного соединения (1204). В сообщении приходит также описание формата сессии (SDP) для нового соединения, этому ему предшествует пустая строка:
200 1204 OK I: FDE234C8 v=0 o=- 25678 753849 IN IP4 128.96.41.1 s=- c=IN IP4 128.96.41.1 t=0 0 m=audio 3456 RTP/AVP 0
Второй пример (из RFC 3435) представляет команду ModifyConnection которая просто устанавливает режим соединения "send/receive" (отправка/получение) и также информирует что установлено "Notified entity".
MDCX 1209 aaln/1@rgw-2567.whatever.net MGCP 1.0 C: A3C47F21456789F0 I: FDE234C8 N: ca@ca1.whatever.net M: sendrecv
Ответ означает, что транзакция выполнена успешно.
200 1209 OK
Теперь пример команды ModifyConnection, где передаётся принятое описание звонковой сессии (SDP) и запрос уведомления. Оконечное устройство (endpoint) начнёт проигрывать контроль посылки вызова абоненту (длинные гудки, ожидание ответа вызываемого).
MDCX 1210 aaln/1@rgw-2567.whatever.net MGCP 1.0 C: A3C47F21456789F0 I: FDE234C8 M: recvonly X: 0123456789AE R: L/hu S: G/rt v=0 o=- 4723891 7428910 IN IP4 128.96.63.25 s=- c=IN IP4 128.96.63.25 t=0 0 m=audio 3456 RTP/AVP 0
Ответ означает, что транзакция выполнена успешно.
200 1206 OK
MGCP.