Анализ SIP пакета, на примерах рабочего вызова и со сбоем
В период работы с астериском рано или поздно задумываешься о том, почему не получается прозвониться и обычное чтение лога не помогает. На помощь приходит снятый дамп. В этой статье рассмотрим разные дампы SIP сообщений и постараемся разобрать на примерах причины неисправностей, а также найти виновника найденной неполадки. Структура SIP SIP – это структурированный многоуровневый протокол […]
В период работы с астериском рано или поздно задумываешься о том, почему не получается прозвониться и обычное чтение лога не помогает. На помощь приходит снятый дамп. В этой статье рассмотрим разные дампы SIP сообщений и постараемся разобрать на примерах причины неисправностей, а также найти виновника найденной неполадки.
Структура SIP
SIP – это структурированный многоуровневый протокол связи, который описывает тип установки и завершения сеанса связи, также включает обмен мультимедиа.
Категории запросов:
- Одинарные методы — методы на которые требуется единичный ответ, без дополнительных запросов.
- Диалоговые методы — методы, которые сопровождаются многочисленными ответными сообщениями и поддерживают диалоговые соединения.
В одинарные запросы входят пакеты со следующими методами:
- OPTIONS – метод позволяющий определить доступность того или иного VOIP устройства подключенного в АТС. Запрос о функциональных возможностях АТС.
- SUBSCRIBE – метод позволяющий получать информацию о статусах в пределах всего сеанса подключения
- PUBLISH — публикация события на сервере.
- INFO – передача какой либо информации, которая не меняет состояние сессии
- NOTIFY – уведомление о событии для пользователя, отправившего PUBLISH
- ACK – подтверждение ответа на запрос INVITE
К диалоговым методам можно отнести:
- INVITE – приглашение пользователя на сеанс связи
- REGISTER – передает серверу информацию для регистрации пользователя
Детально рассмотреть можно здесь .
Пакет INVITE
Структура сообщений в SIP одинакова. Стартовая строка → Заголовки → Пустая строка → Тело сообщения. Для примера рассмотрим Пакет INVITE:
Стартовая строка | INVITE sip:[email protected] SIP/2.0 |
Заголовки | Via: SIP/2.0/UDP 192.168.170.105:5060;rport;branch=z9hG4bKPjR1lZ8c09xesG.6AE497.qhlZlf2nwJxa Max-Forwards: 70 From: «102» <sip:[email protected]>;tag=5EH8QhIiuvpzL62cHe9uhXXbQbsSg8-s To: <sip:[email protected]> Contact: «102» <sip:[email protected]:5060;ob> Call-ID: ks2EUm46cCnW9jlRCYfkIuXT0AdEaZzt CSeq: 31529 INVITE Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS Supported: replaces, 100rel, timer, norefersub Session-Expires: 1800 Min-SE: 90 User-Agent: Digium D40 1_3_0_1_53901 Content-Type: application/sdp Content-Length: 442 |
Пустая строка | |
SDP данные | v=0 o=- 240683915 240683915 IN IP4 192.168.170.105 s=digphn c=IN IP4 192.168.170.105 t=0 0 a=X-nat:0 m=audio 4062 RTP/AVP 9 8 0 18 58 118 58 111 96 a=rtcp:4063 IN IP4 192.168.170.105 a=rtpmap:9 G722/8000 a=rtpmap:8 PCMA/8000 a=rtpmap:0 PCMU/8000 a=rtpmap:18 G729/8000 a=rtpmap:58 L16/16000 a=rtpmap:118 L16/8000 a=rtpmap:58 L16-256/16000 a=rtpmap:111 G726-32/8000 a=sendrecv a=rtpmap:96 telephone-event/8000 a=fmtp:96 0-15 |
INVITE | sip:[email protected] | SIP/2.0 |
Метод SIP | Ruri (request-uri) | Версия протокола |
Далее следует основное тело пакета с полями заголовков. В основной своей части используются заголовки:
- Via
- Max-Forwards
- From
- To
- Contact
- Call-ID
- Cseq
В заголовоке Via записывается адрес устройства, отправившего сообщение, Транспортный протокол, номер порта на который нужно отправить обратно и идентификатор транзакции.
Поле Max-Forwards указывает максимальное количество полей Via может быть в пакете.
Заголовок From предназначен для обозначения инициатора запроса с указанием адреса uri и отображаемого имени.
В заголовок To подставляется информация о получателе сообщения. Зачастую формируется из значения Ruri. Т.к. в дальнейшем на клиентской стороне может быть изменена.
Заголовок Call—ID – это уникальный идентификатор, сохраняющийся на протяжении всего диалога.
В Cseq записывается порядковый номер запроса и имя метода, которое передается,
В поле Contact записывается URI адрес того устройства, на которое должен прийти ответ. Т.е. в приведенном выше примере, ответ прийдет из всех зарегистрированных устройств пользователя 102 на устройство <sip:[email protected]:5060;ob>
Т.е. сравните поля From и Contact в нашем примере:
From: «102» <sip:[email protected]>;tag=5EH8QhIiuvpzL62cHe9uhXXbQbsSg8-s | Contact: «102» <sip:[email protected]:5060;ob> |
В поле From указан адрес сервера астериска, а в поле Contact указан адрес устройства.
Причины отбоя INVITE
- В дампе вы видите только один или несколько инвайтов.
Причиной данной неполадки может быть:
- Не правильно настроенный iptables
- Попали в бан. (Проверять fail2ban)
Если в дампе видите только запросы к оператору связи из этого вывод, что с их стороны работают указанные выше пункты. Или к вам не приходят ответные пакеты оператора. Проверяйте описанные выше пункты
- Вызов от неавторизованного пользователя.
Схема вызова в данном случае читается следующим образом:
- Отправляется инициирующий INVITE
- Получаем ответ от астериска 401 Unauthorized, что говорит нам о том, что пользователь не зарегистрированный
- Клиент подтверждает что не авторизован пакетом ACK
- Снова отправляется INVITE с авторизационными данными. Смотрим заголовок Authorization
- Получаем ответ от сервера 403 Forbidden, что указывает на то, что пользователя с такими авторизационными данными не существует на АТС
- Клиент подтверждает полученный ответ пакетом ACK
Примеры вызовов
Рассмотрим корректный вызов:
- Отправляется инициирующий INVITE
- Получаем ответ от астериска 401 Unauthorized, что говорит нам о том, что пользователь не зарегистрированный
- Клиент подтверждает что не авторизован пакетом ACK
- Снова отправляется INVITE с авторизационными данными.
- АТС видит что пользователь авторизован и посылает ответ 100 Trying
- Следом посылаются к инициатору пакеты 180 Ringing с различным интервалом. Пока не поднимут трубку.
- Пакет 200 OK (SDP) от вызываемой стороны означает что трубка была снята, сейчас будут ходить RTP пакеты.
- Инициатор вызова отправляет пакет ACK с подтверждением. Что увидел сигнал о снятии трубки
- По завершению вызова будет отправлен пакет BYE со стороны инициатора разрыва линии.
- Вторая сторона разговора отправляет пакет 200 OK без SDP для подтверждения завершения вызова
Вызов на не зарегистрированного пользователя.
- Отправляется инициирующий INVITE
- Получаем ответ от астериска 401 Unauthorized, что говорит нам о том, что пользователь не зарегистрированный
- Клиент подтверждает что не авторизован пакетом ACK
- Снова отправляется INVITE с авторизационными данными.
- АТС видит что пользователь авторизован и посылает ответ 100 Trying
- От сервера видим пакет 503 Service Unavailable
В пакете мы видим причину разъединения в полях X-Asterisk-HangupCause и X-Asterisk-HangupCauseCode (в данном примере это пользователь не найден).
7. Инициатор, подтверждает завершение вызова.
Пакет REGISTER
Рассмотрим пример пакета REGISTER и опишем его работу
Первая строка | REGISTER sip:192.168.170.220:5060 SIP/2.0 |
Заголовки | Via: SIP/2.0/UDP 192.168.170.105:5060;rport;branch=z9hG4bKPj.J5KVeS0GGU4BV3DE1Wk0YLCSGSGQzjq Max-Forwards: 70 From: «102» <sip:[email protected]>;tag=J6Kk9pzb8UEm9uUgGMIZrwzdkuxw48f- To: «102» <sip:[email protected]> Call-ID: ARjJonSDAVAJADPRCdFlWj6Ww5jw3JU1 CSeq: 48583 REGISTER User-Agent: Digium D40 1_3_0_1_53901 Contact: «102» <sip:[email protected]:5060;ob> Expires: 0 Content-Length: 0 |
REGISTER | sip:[email protected] | SIP/2.0 |
Метод SIP | Ruri (request-uri) | Версия протокола |
Заголовки пакета и их назначение
Основные заголовки пакета:
Поле Via содержит адреса устройств, через которые маршрутизировался этот пакет, это могут быть различные АТС, proxy сервера и т. д.
Max-Forwards – указывается максимальное колличество хопов (прыжков/переадресаций) которые может пройти пакет до пункта назначения
Заголовок From предназначен для обозначения инициатора запроса с указанием адреса uri и отображаемого имени.
В заголовок To подставляется информация о получателе сообщения. Зачастую формируется из значения Ruri.
Заголовок Call—ID – это уникальный идентификатор, сохраняющийся на протяжении всего диалога.
В Cseq записывается порядковый номер запроса и имя метода, которое передается.
Заголовок Expires содержит информацию о времени , через которое истекает регистрация. Значение указывается целочисленно в секундах от 0 до (2 ** 32) -1.
Возможные причины отбоя регистрации
В этом блоке будем рассматривать самые распространенные причины сбоев в регистрации
- Вы не видите ответа на пакет REGISTER
Причинами этой ситуации может быть:
- Firewall не пропускает, нужно проверить правила.
- IP инициатора запроса попал в бан
- Сетевое оборудование не пропускает. В данном случае, вы вообще не увидите запросов на АТС.
- Ответ на REGISTER есть, но регистрация не проходит.
- Не верный логин или пароль от extension (см. рис6)
Решение
Смотреть лог или консоль астериска
- Не верный permit (см. рис6)
Решение
Смотреть лог или консоль астериска.
- Указан не верный транспорт (UDP, TCP, TLS) (см. рис6)
Решение
Смотреть лог или консоль астериска.
Примеры регистрации
Рассмотрим корректную регистрацию:
- Digium посылает регистрацию на астериск.
- REGISTER с заголовком Authorization
Authorization: | Digest username=»102″, realm=»pbx574″, nonce=»50117049″, uri=»sip:192.168.170.220:5060″, response=»026616e569998328028072d869333f72″, algorithm=MD5 |
- Получаем ответ отастериска пакет 200 OK
Рассмотрим не верную авторизацию:
- Телефон Digium посылает регистрацию на астериск.
- АТС отвечает сообщением 401 Unauthorized. Это означает что АТС не увидела авторизационные данные.
- Телефон заново посылает пакет REGISTER с заголовком Authorization
- В ответ PBX отвечает 403 Forbidden. Что означает что какие то данные не верны. Нужно смотреть консоль астериска.
Остались вопросы?
Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.