MGCP определяет девять команд, причем некоторые из них передаются от Softswitch в шлюз, а другие из шлюза в Softswitch. Команды протокола и их общее описание приводятся в табл. 6.1. Команда MGCP содержит командную строку, несколько строк параметров и, не обязательно, описание сеанса. Командная строка и параметры являются текстом, использующим набор символов ASCII. Во время установления, поддержания и разрушения соединения при помощи протокола MGCP устройство управления и шлюз обмениваются командами и ответами.
MGCP поддерживает концепцию инкапсуляции, при которой одна команда может быть включена в состав другой. Например, когда Softswitch передает к шлюзу команду создать соединение (команду CRCX), он может одновременно передать шлюзу команду уведомлять его об определенных событиях. Таким образом, мы можем встретить команду NotificationRequest, инкапсулированной в команду CreateConnection. Эта функциональная возможность особенно полезна в тех случаях, когда некоторое действие должно выполняться или событие следует обнаруживать только в сочетании с другими условиями. Например, Softswitch может потребовать от MG обнаружения и сообщения о тональных сигналах DTMF но только при продолжении обслуживания вызова. В таком случае команда NotificationRequest, настраивающая шлюз на обнаружение тональных сигналов DTMF и сообщение об их содержании, могут быть инкапсулированы в команду CreateConnection, и обнаружение тонального сигнала будет происходить только в контексте созданного соединения. MGCP предусматривает только один уровень инкапсуляции. Иначе говоря, одна команда не может быть инкапсулирована в другую команду, если эта вторая команда уже инкапсулирована в третью команду. Однако MGCP позволяет передавать несколько команд одновременно в одном и том же пакете UDP.
|
|
Таблица 6.1. Команды протокола MGCP
|
Команда протокола MGCP обязательно содержит заголовок, за которым может следовать описание сеанса связи (session description). Заголовок команды и описание сеанса связи представляют собой набор текстовых строк. Описание сеанса отделено от заголовка команды пустой строкой. Заголовок содержит командную строку, например, вида CRCX 1204 ts/ 1@skri.niits.ru MGCP 0.1, и список параметров.
|
|
Как видно из примера, командная строка состоит из нескольких информационных полей. Первое поле - название команды - представлено в виде кода из четырех букв (табл. 6.1). Далее следует идентификатор транзакции.
Протокол MGCP предусматривает корреляцию команд и ответов: команда и ответ на нее образуют транзакцию, имеющую уникальный идентификатор Transactionldentifier. Идентификатор транзакции включается в заголовок и команды, и ответа. Значения идентификаторов выбираются из диапазона чисел 1 - 999999999, причем значение идентификатора текущей транзакции всегда на единицу больше идентификатора предыдущей транзакции.
Идентификатор порта определяет тот порт, которому надлежит выполнить команду, за исключением команд Notify и ReStartInProgress, в которых идентификатор определяет порт, передавший команду. Идентификаторы портов кодируются таким же образом, как кодируются адреса электронной почты (в соответствии с RFC 821). Например, возможен идентификатор ts/1@skri.niits.ru, который идентифицирует первый порт (временной интервал) шлюза skri, расположенного в домене niits. Замыкает пример версия протокола, которая кодируется очевидным образом - MGCP 1.0.
Выше указывалось, что заголовок команды, кроме командной строки, содержит список параметров. Параметры команд протокола MGCP сведены в табл. 6.2. Каждый параметр идентифицируется кодом, который состоит из одной или двух заглавных букв. За кодом параметра следуют одно двоеточие, один символ пробела и значение параметра.
В некоторых случаях значение параметра может быть единой численной величиной. В других случаях значение параметра может быть единой шестнадцатеричной строкой. Еще в ряде случаев оно может быть списком разделенных запятыми значений или включать в себя список субполей. Один и тот же набор параметров допускается для использования и в командах, и в ответах.
Не все параметры, приведенные в таблице, должны обязательно присутствовать во всех командах протокола MGCP, спецификации включают в себя таблицу возможных комбинаций параметров в командах MGCP (обязательное присутствие параметра в команде - М, необязательное присутствие - О, запрет присутствия параметра - F).
Таблица 6.2. Параметры команд протокола MGCP
|
Окончание табл. 6.2.
|
6.3.3. Ответы на команды
|
|
|
|
На каждую команду MGCP передается ответ. Структура ответов на команды в протоколе MGCP идентична вышеописанной структуре самих команд. Строку ответа составляет код возврата, за которым следует идентификатор транзакции и, опционально, - фраза комментария или причины. Каждый из этих элементов отделен символом единичный пробел (SP), при этом строка ответа заканчивается символом возврат каретки/ перевод строки (CRLF). Коды возврата являются целыми числами и разделяются на следующие категории:
• 0XX (от 000 до 099) - ответ с подтверждением,
• 1XX (от 100 до 199) - предварительные ответы; окончательный ответ последует позже,
• 2XX (от 200 до 299) - команда успешно выполнена,
• 4XX (от 400 до 499) - отказ из-за случайной ошибки,
• 5XX (от 500 до 599) - отказ из-за постоянной ошибки,
• 8XX (от 800 до 899) - ответы с пакетной спецификой.
В табл. 6.3 приведены возможные варианты кода ответа на команды протокола MGCP.
Из представленного перечня кодов ответов видно, что ответ должен быть увязан с командой, на которую он отвечает. Поэтому идентификатор TransactionId появляется как в командах, так и в ответах. Ответ на команду должен использовать тот же самый TransactionId, что и вызвавшая ответ команда. Те же параметры, которые разрешено применять в командах MGCP, разрешено применять и в ответах MGCP. Однако разрешенное использование в ответах отличается от разрешенного использования в командах. Например, параметр LocalConnectionOptions является опциональным параметром в команде CRCX, но он запрещен в ответе на команду CRCX.
Основная роль ответов заключается в защите от ошибок протокола, конфигурации или функциональных ошибок. И, все же, на основании информации, предоставляемой кодами ошибок, невозможно реализовать осмысленный механизм диагностики. Для получения диагностической информации от шлюзов и портов шлюза нужны другие методы. Одним из них является использование протокола SNMP.
Таблица 6.3. Коды ответов на команды протокола MGCP
|
9. Б.С. Гольдштейн
6.3.4. Описание сеансов связи SDP
При установлении соединений Softswitch предоставляет портам шлюзов, участвующим в этих соединениях, необходимую информацию друг о друге - описание сеансов связи. Описание сеанса связи вводится в состав некоторых команд и ответов протокола MGCP и включает в себя IP-адрес, номер UDP/RTP-порта, указание вида информации и алгоритма ее кодирования информации, данные о периоде пакетизации и т.д. Синтаксис описания сеанса связи в протоколе MGCP соответствует синтаксису протокола SDP (Session Description Protocol), уже упоминавшегося в главе 4.
Рассмотрим синтаксис протокола SDP в части описания сеанса речевой связи. Для описания такого сеанса в протоколе предусмотрено несколько информационных полей:
• версия протокола SDP кодируется v=0;
• IP-адрес шлюза содержит IP-адрес, который будет использоваться для обмена пакетами RTP, причем если это поле включено в команды протокола MGCP, то оно означает адрес удаленного шлюза, а если поле включено в ответы, то - адрес шлюза, передающего ответ;
• поле описания речевого канала кодируется буквой «т» и содержит индикацию вида передаваемой или принимаемой информации (в нашем случае - речи), номер порта, используемого для приема RTP пакетов удаленным шлюзом (если поле описания речевого канала включено в команды MGCP) или локальным шлюзом (если это поле включено в ответы), индикацию использования протокола RTP для передачи речи и указание алгоритма кодирования речевой информации;
• режим соединения может быть одним из следующих: sendonly - шлюзу надлежит только передавать информацию, recvonly - шлюзу надлежит только принимать информацию, sendrecv - шлюзу надлежит передавать и принимать информацию, inactive - шлюз не должен ни передавать, ни принимать информацию, loopback - шлюз должен передавать принимаемую информацию в обратном направлении и conttest - шлюзу надлежит перевести порт в режим тестирования.
Кроме вышеуказанных полей, для описания сеанса речевой связи в протоколе SDP предусмотрено еще несколько необязательных информационных полей. Отметим, что если в команду или в ответ протокола MGCP включены описания нескольких сеансов связи, то они отделяются друг от друга строкой с указанием версии протокола SDP. Типичный пример описания сеанса речевой связи с использованием протокола SDP:
v = 0
c = IN IP4 212.18.62.1
m = audio 1234 RTP/AVP 0
Поясним приведенный пример: для описания сеанса связи используется протокол SDP, версия 0, в сети используется протокол IP, версия 4, IP адрес шлюза - 212.18.62.1, передается или принимается речевая информация, упакованная в пакеты RTP, номер порта RTP - 1234, алгоритм кодирования речи - G.711, закон ц.
Приведенное описание протокола MGCP сможет быть полезным читателю хотя бы для того, чтобы сравнить его с протоколом Megaco/H.248, речь о котором пойдет ниже.