Для анализа трейсов прежде всего необходимо четко понимать что происходит внутри CUCM: для этого мы сперва вкратце рассмотрим архитектуру CUCM.
CUCM это приложение, написанное на языке C++ и функционирующее в ОС Red Hat.
Внутри приложения функционируют C++ Objects или SDL Processes (Signal Distribution Layer). Все эти объекты функционируют и взаимодействуют между собой.
Часть объектов существуют всегда, часть объектов создаются и уничтожаются при необходимости.
Все SDL Processes можно разделить на несколько логических уровней:
Как видно из схемы, помимо перечисленных уровней присутствуют также Aggregator Layer и Link Layer.
Aggregation Layer в контексте наших задач рассматривают вместе с Call Control Layer
Link Layer же отвечает за сетевое взаимодействие на уровне TCP UDP и нас вовсе не интересует.
Мы рассмотрим классификацию процессов CUCM на примере уровня Feature Layer.
В случае с 20-ю телефонами SIP на ноде будет создан один процесс SipHandler, промежуточный процесс SipStationInt, и 20 штук процессов SipStationD. Для SIP Trunk используется процессы SIPD - каждый для своего транка.
Рассмотрим теперь что происходит когда юзер поднимает трубу:
В этом случае телефон передаёт сообщение CUCM, и далее происходят события: StationInit передаёт сообщение процессу телефона StationD. И далее StationD создаст процесс StationCdpc. Процесс StationCdpc отвечает за один звонок с определённого телефона (С(all)D(ependent)), и будет уничтожен если положить трубу на рычаг.
Аналогично, если телефон выключить и пропадёт его регистрация - будет уничтожен его процесс StationD.
Для обработки введённого на телефоне номера в работу вступают процессы другого уровня - уровня Call Control.
Процессы данного уровня участвуют в установлении вызова и в обработке этого вызова:
Давайте посмотрим как будет обрабатываться звонок пошагово:
Call Control (CC) создаёт под данный звонок отдельный процесс Call Dependent Call Control (CdCc). На этот процесс будет переданы набранные цифры.
Для обработки звонка CdCc передаст на обработку номера в DA, где произойдут необходимые трансляции и будут определены привилегии для данного звонка.
Далее звонок отдаётся на Device Manager (DM), где будет определено устройство на которое необходимо передать наш звонок.
Информация от DM возвращается на DA и затем на CDCC.
Далее начнётся установление звонка (CcSetupReq) и через цепочку RouteListControl > RoutelistCdrc будет выбрано устройство для выхода.
Также отметим здесь процесс Line Control: процесс отвечает за все DN-ы зарегистрированные в системе.
Итак, телефон начал звонить, пользователь поднял трубку, и следующим шагом у нас будет "поднятие" media или RTP потока.
Мы спускаемся на уровень ниже и передаём звонок на уровень Media Layer.
Как уже было сказано, на данном уровне располагаются процессы, отвечающие за установление RTP потока.
Тут также есть постоянно живущие процессы: ConnectionManager и MediaCoordinator.
Процессы MediaManager и MediaExchange создаются и уничтожаются вместе с вызовами. Они отвечают за все характеристики вызова между двумя абонентами: кодеки, DTMF.
Далее создаются процессы int или интерфейсы, которые взаимодействуют непосредственно с устройствами и отвечают за взаимодействие между Media Layer и Device Layer: передают устройствам кодеки, IP адреса, порты и др.
Предположим совершается звонок с Телефона А на Телефон С.
Но в процессе установления соединения стало понятно, что телефоны не могут договориться с кодеком.
Для установления подобного соединения необходим транскодер.
Выделение транскодера обеспечат MediaManager и MediaExchage - они поймут какой транскодер необходимо использовать. Будет создан отдельный процесс MediaExchange или MX, который обеспечит согласование между первым телефоном и транскодером и между транскодером и вторым телефоном.
После того как разговор завершится, будут уничтожены все процессы, за исключением ConnectionManager и MediaCoordinator.
В SDI и SDL Traces каждый процесс обозначается определённым образом:
Process Type будет соответствовать типу процесса, т.е. для StationD это будет 37.
Process Instance - идентификатор процесса данного типа. В нашем случае "50" отражает что всего зарегано как минимум 50 телефонов и данный телефон 50-ый. Для Parent Processes это значение всегда Единица (1).
Таким образом данное обозначение процессов делает их уникальными и очень поможет нам в процессе анализа трейсов.
Рассмотрим звонок телефона А на Телефон B.
Используемые материалы: https://supportforums.cisco.com/ru/document/12689811
Комментарии
Спасибо за статью)
Спасибо за статью)
Можно вопрос не много не по теме?
при изменении маршрута на sip-trunk, ССМ сбрасывает активные разговоры, так и должно быть ? или это ошибка в конфиге?
да, любые манипуляции с
да, любые манипуляции с транком сбросят текущие разговоры сигнализация которых прошла через этот транк.
to vs Понял, спасибо :)
to vs
Понял, спасибо :)
Добавить комментарий