SIP протокол

SIP (англ. Session Initiation Protocol — протокол установления сессии) — стандарт на способ установления и завершения пользовательского интернет-сеанса, включающего обмен мультимедийным содержимым (видео- и аудиоконференция, мгновенные сообщения, онлайн игры).

В модели взаимодействия открытых систем SIP является сетевым протоколом прикладного уровня.

Протокол описывает, каким образом клиентское приложение (например, софтфон) может запросить начало соединения у другого, возможно, физически удалённого клиента, находящегося в той же сети, используя его уникальное имя. Протокол определяет способ согласования между клиентами об открытии каналов обмена на основе других протоколов, которые могут использоваться для непосредственной передачи информации (например, RTP). Допускается добавление или удаление таких каналов в течение установленного сеанса, а также подключение и отключение дополнительных клиентов (то есть допускается участие в обмене более двух сторон — конференц-связь). Протокол также определяет порядок завершения сеанса.

Дизайн протокола

Клиенты SIP традиционно используют порт 5060 TCP и UDP для соединения серверов и других элементов SIP. В основном SIP используется для установления и разъединения голосовых и видеозвонков. При этом он может использоваться и в любых других приложениях, где требуется установка соединения, таких как Event Subscription and Notification, Terminal mobility и так далее. Существует большое количество RFC, относящихся к SIP и определяющих поведение таких приложений. Для передачи самих голосовых и видеоданных используют другие транспортные протоколы, чаще всего Real-time Transport Protocol (RTP).

Главной задачей разработки SIP было создание сигнального протокола и протокола установления соединений для IP коммуникаций, который может поддерживать расширенный набор функций обработки вызова и услуг, представленных в существующей ТфОП. Сам протокол SIP не определяет этих функций, а сосредоточен только на процедурах установления звонка и сигнализации. При этом он был спроектирован обеспечивать создание таких функций элементов сети, как Прокси-сервер (Proxy Servers) и Пользовательские Агенты (User Agents). При помощи этих элементов можно поддерживать базовые телефонные операции: набор номера, звонок телефонного аппарата, возможность после набора услышать длинные или короткие гудки.

Телефонные сети на основе SIP могут поддерживать и более современные услуги, обычно предоставляемые Signalling System 7 (SS7), несмотря на значительное различие этих двух протоколов. SS7 характеризуется сложной, централизованной интеллектуальной сетью и простыми, неинтеллектуальными, терминалами (традиционные телефонные аппараты). SIP — наоборот, требует очень простую (и, соответственно, хорошо масштабируемую) сеть с интеллектом, встроенным в оконечные элементы на периферии (терминалы, построенные как физические устройства или программы).

SIP используется вместе с несколькими другими протоколами и участвует только в сигнальной части сессии связи. SIP выполняет роль носителя для SDP, который описывает параметры media-данных в рамках сессии, например используемые порты IP и кодеки. В типичном применении сессии SIP — это просто потоки пакетов RTP. RTP является непосредственным носителем голосовых и видеоданных.

Первая предложенная версия стандарта (SIP 2.0) была определена в RFC 2543. Протокол был дополнительно уточнён в RFC 3261, хотя многие реализации по-прежнему основаны на промежуточных версиях стандарта. Обратите внимание, что номер версии остался 2.0.

Сообщения протокола SIP

Сообщения протокола SIP (запросы и ответы), представляют собой последовательности текстовых строк, закодированных в соответствии с документом RFC 2279. Структура и синтаксис сообщений SIP идентичны используемым в протоколе HTTP.

Структура сообщений протокола SIP:

Стартовая строка
Заголовки
Пустая строка
Тело сообщения
  • Стартовая строка — начальная строка любого SIP-сообщения. Если сообщение является запросом, в ней указывается тип запроса, адресат и номер версии протокола. Если сообщение является ответом на запрос, в ней указывается номер версии протокола, тип ответа и его короткая расшифровка.
  • Заголовки сообщений содержат информацию, необходимую для обработки сообщения (информация об отправителе, адресате, пути следования и пр.)
  • Тело сообщения содержит описание сеансов связи. Не все запросы содержат тело сообщения (например запрос BYE). Все ответы могут содержать тело сообщения, но содержимое тела в них бывает разным.

В первоначальной версии протокола SIP (RFC 3261) было определено шесть типов запросов. С помощью запросов клиент сообщает о текущем местоположении, приглашает пользователей принять участие в сеансах связи, модифицирует уже установленные сеансы, завершает их и т. д. Тип запроса указывается в стартовой строке.

INVITE — Приглашает пользователя к сеансу связи. Обычно содержит SDP-описание сеанса.

АСК — Подтверждает приём ответа на запрос INVITE.

BYE — Завершает сеанс связи. Может быть передан любой из сторон, участвующих в сеансе.

CANCEL — Отменяет обработку ранее переданных запросов, но не влияет на запросы, которые уже закончили обрабатываться.

REGISTER — Переносит адресную информацию для регистрации пользователя на сервере определения местоположения.

OPTION — Запрашивает информацию о функциональных возможностях терминала.

Но в процессе развития, в протокол было добавлено еще несколько типов запросов, которые дополнили его функциональность:

PRACK — временное подтверждение

SUBSCRIBE — подписка на получение уведомлений о событии

NOTIFY — уведомление подписчика о событии

PUBLISH — публикация события на сервере

INFO — передача информации, которая не изменяет состояние сессии

REFER — запрос получателя о передаче запроса SIP

MESSAGE — передача мгновенных сообщений средствами SIP

UPDATE — модификация состояния сессии без изменения состояния диалога

Ответы на запросы сообщают о результате обработки запроса, либо передают запрошенную информацию. Структуру ответов и их виды протокол SIP унаследовал от протокола HTTP. Определено шесть типов ответов, несущих разную функциональную нагрузку. Тип ответа кодируется трёхзначным числом, самой важной является первая цифра, которая определяет класс ответа:

1ХХ — Информативные ответы показывают, что запрос находится в стадии обработки. Наиболее распространённые ответы данного типа 100 Trying, 180 Ringing, 183 Session Progress.

2ХХ — Финальные ответы означающие, что запрос был успешно обработан. В настоящее время в данном типе определён только один ответ — 200 OK.

3ХХ — Финальные ответы информирующие оборудование вызывающего пользователя о новом местоположении вызываемого пользователя, например ответ 302 Moved Temporary.

4ХХ — Финальные ответы информирующие об ошибке при обработке или выполнении запроса, например 403 Forbidden или классический для протокола HTTP, ответ 404 Not Found.

5ХХ — Финальные ответы информирующие о том, что запрос не может быть обработан из-за отказа сервера, 500 Server Internal Error.

6ХХ — Финальные ответы информирующие о том, что соединение с вызываемым пользователем установить невозможно, например ответ 603 Decline означает, что вызываемый пользователь отклонил входящий вызов.

canceled
           INVITE (SDP)
   x qqqqqqqqqqqqqqqqqqqqqqqqqq> x       
   x         100 Trying          x         
   x <qqqqqqqqqqqqqqqqqqqqqqqqqq x         
   x  183 Session Progress (SDP) x         
   x <qqqqqqqqqqqqqqqqqqqqqqqqqq x         
   x      RTP (g711a) 2276       x         
   x11218 qqqqqqqqqqqqqqqq> 19680x         
   x      RTP (g711a) 2215       x        
   x11218 <qqqqqqqqqqqqqqqq 19680x         
   x           CANCEL            x        
   x qqqqqqqqqqqqqqqqqqqqqqqqqq> x        
   x           200 OK            x      
   x <qqqqqqqqqqqqqqqqqqqqqqqqqq x         
   x   487 Request Terminated    x         
   x <qqqqqqqqqqqqqqqqqqqqqqqqqq x       
   x             ACK             x      
   x qqqqqqqqqqqqqqqqqqqqqqqqqq> 
completed
            INVITE (SDP)         x         
   x qqqqqqqqqqqqqqqqqqqqqqqqqq> x        
   x         100 Trying          x         
   x <qqqqqqqqqqqqqqqqqqqqqqqqqq x         
   x  183 Session Progress (SDP) x         
   x <qqqqqqqqqqqqqqqqqqqqqqqqqq x         
   x        200 OK (SDP)         x         
   x <qqqqqqqqqqqqqqqqqqqqqqqqqq x         
   x             ACK             x         
   x qqqqqqqqqqqqqqqqqqqqqqqqqq> x         
   x             BYE             x         
   x qqqqqqqqqqqqqqqqqqqqqqqqqq> x         
   x           200 OK            x         
   x <qqqqqqqqqqqqqqqqqqqqqqqqqq x
rejected

(Busy)

   x        INVITE (SDP)         x         
   x qqqqqqqqqqqqqqqqqqqqqqqqqq> x         
   x         100 Trying          x         
   x <qqqqqqqqqqqqqqqqqqqqqqqqqq x         
   x  183 Session Progress (SDP) x         
   x <qqqqqqqqqqqqqqqqqqqqqqqqqq x         
   x        486 Busy Here        x         
   x <qqqqqqqqqqqqqqqqqqqqqqqqqq x         
   x             ACK             x         
   x qqqqqqqqqqqqqqqqqqqqqqqqqq> x         

Настройка SIP в Asterisk - sip.conf

Настройка Asterisk

Настроим Asterisk, Freeswitch, Call Center

  • orphans/sip.txt
  • Последние изменения: 2016/06/01