Основы протокола SIP

Основы протокола SIP

Эта статья содержит в себе заметки по основам протокола SIP, знания черпались из справочника по телекоммуникационным протоколам "Протокол SIP". Конечная цель заметки дать краткую шпаргалку для понимания основ знаний по sip которые неоходимы в повседневной деятельности при работе с VoIP сетями и протоколом SIP в частности. Статья построена в виде заметок и не предполагает полного изложения материала, но знаний ниже должно хватить для понимания работы SIP.

UAC – агент клиента

UAS – сервер клиента

Заголовки являющиеся обязательными в sip запросе

Request-URI – указывает на пользователя или сервис, к которому адресован запрос
To – публичный адрес получателя или ресурс на который отправляется запрос. Параметр tag в поле to определяет терминал вызываемого абонента из терминалов зарегистрированных под одним sip адресом
From – публичный адрес инициатора соединения. Содержит поле display name, если параметр пуст UAS обязан вставить Anonymous
CSeq – число для идентификации и упорядочивания транзакций, содержит порядковый номер и тип запроса
Call-ID – уникальный идентификатор, объединяющий группу сообщений (уникальный идентификатор сессии). Должен совпадать для всех запросов и ответов в процессе диалога. Предотвращает коллизии
Max-Forwards – служит для ограничения числа пересылок запроса на пути к месту назначения, число 70 уменьшается до нуля, конечная ошибка 483
Via – указывает один из узлов, используемых для проведения транзакций и идентифицирует местоположение, куда должен быть отправлен ответ. Значение заголовка изменяется после выбора каждого следующего узла. Параметр branch уникальный параметр транзакции
Запрос CANCEL будет иметь то же значение параметра branch, что и запрос который он отменяет.
CANCEL используется только для отмены INVITE транзакций
Запрос ACK на ответ, отличный от класса 2xx будет иметь тот же параметр branch, что и INVITE, ответ на который он подтверждает
Параметр branch должен всегда начинаться с z9hG4bK (magic cookie) – является уникальным в мировом масштабе

Ответы класса 3xx – ответы перенаправления, клиенты должны использовать адрес  (адреса ) из поля contact при составлении одного или нескольких новых запросов, основанных на перенаправленном запросе (используется поле target set)
Ответы класса 4xx – требуют действий от  UA по обработке в не зависимости от типа запроса, на который приходит ответ

Еще о заголовках
Contact – содержит SIP URI может быть использован для связи с пользователем UA пославшим сообщение. Contact участвует в механизме форкинга

Принцип обработки запроса UAS

1. Определение типа запроса
Поддерживает ли метод сервер ?
Если нет 405 Method Not Allowed
2. Определение типа заголовка
UAS должен обрабатывать любой to, однако если это не так, то 403 (Forbidden)
Если UAS не поддерживает схему, то 416 (Unsupported URI Scheme)
Если UAS не идентифицирует адрес для которого готов принять запрос, то 404 (Not Found)
3. Обработка одинаковых запросов
Если UAS не получает tag в поле to, то происходит поиск существующих транзакций с тэгом, если транзакция существует UAS вернет 482 (Loop Detected)
4. Обработка поля Require
В этом поле UAC сообщает UAS о поддерживаемых расширениях для правильной обработки запроса. Если UAS расширение не поддерживает он вернет 420 (Bad Extension)
5. Обработка содержимого тела сообщения
Если UAS находит в теле не поддерживаемый тип, язык или кодек, то ответ 415 (Unsupported Media Type)

Принцип обработки ответа UAS
UAS отправляет ответы 100 (Trying), ACK сохраняя значения шести параметров и модифицируя поле времени ответа

Ошибки
408 (Request Timeout) – ошибка истечения времени с уровня транзакций
503 (Service Unavailable) – ошибка транспортного уровня (ошибка ICMP в протоколе UDP, нарушение соединения TCP)

В базе SIP содержит шесть основных запросов – REGISTER, INVITE, ACK, CANCEL, BYE, OPTIONS

Сервер определяет запросы по содержанию стартовой строки, после читает заголовок, потом тело
INVITE – приглашает вызываемого пользователя принять участие в сеансе связи
ACK – подтверждает прием ответа на команду INVITE
CANCEL – отменяет обработку ранее переданных запросов
BYE – завершает соединение
Сторона получившая BYE должна подтвердить его передачей 200 OK для разрыва медиа трафика
REGISTER – при помощи этого сообщения клиент сообщает свое местоположение. REGISTER содержит To, From, Contact, Expires (время в секундах по истечении которого регистрация заканчивается)
OPTIONS – запрос информации о возможностях оборудования
Дополнительные запросы
INFO – предназначен для обмена сигнальной информацией в процессе установления и поддержания соединения
Примеры:
Перенос сигнализации между шлюзами ТФОП
Перенос DTMF
Перенос билинговой информации, остаток на счете
Перенос изображений между участниками не задействуя rtp поток
PRACK – с помощью PRACK происходит надежная передача предварительных ответов на INVITE (нужно в ТФОП), работает используя tag 100rel, подтверждение 200ОК
UPDATE – изменение параметров сессии (например смена кодека) без воздействия на состояние диалога
SUBSCRIBE – запрос информации о состоянии и обновлениях состояния удаленного ресурса. Например подписка на VoiceMail
NOTIFY – ответ на SUBSCRIBE запрос
REFER – предписывает получателю связаться с третьей стороной, используя контактную информацию, которая содержится в сообщении. Применение Transfer вызова. Работает аналогично SUBSCRIBE подписке использует NOTIFY
MESSAGE – интерактивный обмен короткими текстовыми сообщениями

Характерно, sip ответ можно идентифицировать от запроса по наличию в стартовой строке информации по Status-Line

Ответы SIP
1xx – информационные или предварительные ответы
2xx – ответы успешной обработки вызова
3xx – ответы перенаправления вызова
4xx – информирует о том, что в запросе обнаружена ошибка
5xx – запрос не может быть обработан из-за ошибки сервера
6xx – ответы полной невозможности установления соединения

Информационные ответы протокола SIP

100 Trying – Запрос обрабатывается. Местоположение вызываемого пользователя не определено
180 Ringing – Местоположение вызываемого пользователя определено, пользователь получает сигнал о входящем вызове
200 ОК – Запрос успешно выполнен
202 Accepted – Запрос был принят, но обработка еще не завершена
404 Bad Request – в запросе обнаружена синтаксическая ошибка
480 Temporarily Unavailable – соединение установлено успешно, но пользователь в данное время не доступен

Регистрация

Значение времени регистрации UA определяется либо заголовком expires либо значением expires для определенного клиента (гибкая настройка каждого), если клиент не требует определенного периода перерегистрации, и для клиента не установлено гибких настроек, то период выбирается сервером исходя из общих настроек.
Если при регистрации от клиента в поле TO значение домена не согласуется с значением Request-URI то сервер выдаст 404.
Если запрос регистрации не содержит поля Contact, то регистрация осуществляется по полю TOрегистрация по IP, в противном случае регистрация по данным из поля Contact.
Запрос типа OPTIONS формируется для проверки функциональных возможностей UAS, к примеру сможет ли сервер выполнить определенный INVITE может быть проверен с помощью OPTIONS. На запрос OPTIONS должен содержаться ответ Allow, Accept, Accept-Language, Supported.
Ответ на запрос INVITE содержит заголовки Allow, Supported, Accept.
Запрос INVITE, который отправлен в рамках существующего диалога называется re-INVITE.
Модифицировать сессию может как вызывающий так и вызываемый пользователь.
Незавершенная клиентская транзакция – транзакция получившая предварительный ответ, но не получившая окончательного ответа находится в состоянии Proceeding
Аутентификация, используется аутентификация Digest http,basic по умолчанию должен быть запрещен. Область защиты указывается в поле realm запроса аутентификации, переданного сервером клиенту. Аутентификации могут требовать все транзакции

Примеры установления SIP соединений

Установление соединения через сервер

 Установление соединения через сервер

 

ДВО переключение связи

 ДВО переключение связи

 

ДВО переадресация вызова

 ДВО переадресация вызова

 

ДВО уведомление о вызове во время связи

 ДВО уведомление о вызове во время связи

 

ДВО удержание вызова и трехсторонняя конференция

 ДВО удержание вызова и трехсторонняя конференция

 

Поделиться:

Добавить комментарий

2 + 2 =
Решите простой математический пример. Например для "два плюс четыре =?" введите "6".