SIP

Протокол Session Initiation Protocol (SIP), обычно применяемый в VoIP-телефонах (как аппаратных, так и программных), отвечает за установку и разъединение соединения, а также за любые изменения, происходящие во время соединения, такие как переадресации. Назначение SIP – помочь двум конечным точкам поговорить друг с другом (по возможности напрямую). Протокол SIP – это просто протокол обмена сигналами, то есть его задачей является лишь обеспечить возможность двум конечным точкам говорить друг с другом, но не работа с носителем вызова (голосом). Передача голоса осуществляется с помощью другого протокола – Real-Time Transport Protocol (транспортный протокол реального времени – RTP; RFC 3550) – для передачи медиа-данных непосредственно между двумя конечными точками.

VoIP (Voice over IP; IP-телефония) — система связи, обеспечивающая передачу речевого сигнала по сети Интернет или по любым другим IP-сетям. Сигнал по каналу связи передаётся в цифровом виде и, как правило, перед передачей преобразовывается (сжимается) с тем, чтобы удалить избыточность.

RFC SIP

Тем, кто соберётся делать собственную реализацию протокола SIP, пригодится список RFC, описывающих протокол и его дополнения:

  • 2543: Первоначальное описание SIP/2.0
  • RFC 2976: передача информации, не изменяющей состояние сессии (метод INFO)
  • RFC 2279: Сообщения протокола SIP (запросы и ответы)
  • RFC 3261: Уточнения SIP/2.0
  • RFC 3262: Расширение протокола SIP: метод Provisional Response ACKnowledgement (PRACK) и тэг 100rel
  • RFC 3263: поиск SIP серверов с помощью DNS (записи SRV)
  • RFC 3265: подписка на получение уведомлений о событии (методы SUBSCRIBE и NOTIFY)
  • RFC 3311: Обновление сессии без изменения диалога (метод UPDATE)
  • RFC 3372: модификация SIP-T (интерконнект ISUP - SIP)
  • RFC 3398: сопоставление параметров ISUP и SIP (Integrated Services Digital Network (ISDN) User Part (ISUP) to Session Initiation Protocol (SIP) Mapping)
  • RFC 3428: Расширение SIP для передачи мгновенных сообщений (Instant Messaging) и метод MESSAGE
  • RFC 3515: метод REFER
  • RFC 3903: публикация события на сервере (метод PUBLISH)
  • RFC 4235: Пакет событий, инициируемых по INVITE (An INVITE-Initiated Dialog Event Package for the Session Initiation Protocol (SIP))
  • RFC 4262: SIP Event Lists (SUBSCRIBE, NOTIFY, Presence)
  • RFC 5806: Diversion Indication in SIP

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

  • INVITE — Приглашает пользователя к сеансу связи. Обычно содержит Протокол SDP -описание сеанса. Запрос INVITE, который отправлен для уже установленного сеанса связи, называется методом re-INVITE. re-INVITE позволяет менять адреса или порты сеансов, может добавлять поток медиаданных, удалять поток медиаданных, и т.д.
  • АСК — Подтверждает приём ответа на запрос INVITE.
  • BYE — Завершает сеанс связи. Может быть передан любой из сторон, участвующих в сеансе.
  • CANCEL — Отменяет обработку ранее переданных запросов, но не влияет на запросы, которые уже закончили обрабатываться.
  • REGISTER — Переносит адресную информацию для регистрации пользователя на сервере определения местоположения.
  • OPTIONS — Запрашивает информацию о функциональных возможностях терминала. Передача информации о возможностях вызывающего и вызываемого SIP телефонов.

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

  • PRACK — временное подтверждение (RFC 3262)
  • SUBSCRIBE — подписка на получение уведомлений о событии (RFC 3265)
  • NOTIFY — уведомление подписчика о событии (RFC 3265)
  • PUBLISH — публикация события на сервере (RFC 3903)
  • INFO — передача информации, которая не изменяет состояние сессии (RFC 2976)
  • REFER — запрос получателя о передаче запроса SIP (RFC 3515)
  • MESSAGE — передача мгновенных сообщений средствами SIP (RFC 3428)
  • UPDATE — модификация состояния сессии без изменения состояния диалога (RFC 3311)

Адресация SIP

Адресация SIP логическая, того же типа, что Что такое ссылка URL в Коды состояния HTTP. Методы и структура протокола HTTP. Для организации взаимодействия с существующими приложениями IP-сетей и для обеспечения мобильности пользователей протокол SIP использует адрес, подобный адресу электронной почты. В качестве адресов рабочих станций используются специальные универсальные указатели ресурсов - так называемые SIP URL (Universal Resource Locators).

SIP- адреса бывают четырех типов:

  • имя@домен;
  • имя@хост;
  • имя@IР-адрес;
  • №телефона@шлюз

Таким образом, адрес состоит из двух частей. Первая часть - это имя пользователя, зарегистрированного в домене или на рабочей станции. Если вторая часть адреса идентифицирует какой-либо шлюз, то в первой указывается телефонный номер абонента.

Во второй части адреса указывается имя домена, рабочей станции или шлюза. Для определения IP- адреса устройства необходимо обратиться к службе доменных имен - Раздел DNS: Что такое DNS. Если же во второй части SIP- адреса размещается IP- адрес, то с рабочей станцией можно связаться напрямую.

В начале SIP- адреса ставится слово "sip:", указывающее, что это именно SIP- адрес. Примеры SIP- адресов:

sip: als@rts.loniis.ru
sip: user1@192.168.100.152
sip: 294-75-47@gateway.ru

В SIP поддерживает функции messaging и presence. Первая обеспечивает обмен в реальном времени короткими сообщениями (как ICQ на ПК или SMS в сетях GSM), вторая позволяет определять состояние абонента, т. е. на месте ли он, не занят ли и т. д. (в ICQ тоже есть такая возможность). Благодаря этим двум функциям SIP позволяет реагировать на события, а также рассылать сообщения "по событию".

IP-интеграция

SIP поддерживает специальный довольно мощный язык CPL (Call Processing Language -язык обработки звонков) на основе xml, предназначенный для написания телефонных скриптов, позволяющий указать, кто кому когда и зачем звонит, что делать, если трубку не берут или берут не там, и т. д. В силу всего этого в рамках SIP легко строить самые разнообразные сервисы.

Подобные сервисы могут создавать три группы людей: производители SIP- оборудования, сервис-провайдеры и сами конечные пользователи. Язык CPL несложен, так что, видимо, многие будут способны реализовать вполне изощренную схему работы автоответчика: скажем, если позвонивший набирает цифру 1, он переключается на домашний телефон абонента, если 2 – на сотовый, если 3 – на телефон его родителей и т. д. А почему бы не написать скрипт, который, когда раздастся звонок, показывал бы вам лицо (фотографию) звонящего? Телефон ресторана мог бы, скажем, сразу выдавать на дисплей сегодняшнее меню, – короче говоря, возможности здесь ограничены только фантазией пользователя.

Поскольку все современные ERP-, CRM- и т. п. системы работают по протоколу IP, SIP без особых проблем интегрируется с ними (в отличие от H.323, которому его телефонная природа мешает взаимодействовать с большинством приложений).

Сценарий установления соединения

Первый пользователь снимает трубку и набирает номер, SIP-клиент генерирует сигнал INVITE (приглашение), у второго пользователя звонит телефон, его SIP-клиент выдает сообщение 180 (Ringing, звонок), затем пользователь берет трубку, SIP-клиент выдает сообщение 200 (OK), первый SIP-клиент посылает второму сигнал ACK (подтверждение) – и далее начинается передача голосового потока по протоколу RTP (Real-time Transport Protocol). Когда разговор окончен и один из пользователей вешает трубку, SIP-клиент посылает сигнал BYE. Вот и все.

Но такая схема абсолютно неэффективна, когда клиентов в сети не два, а два миллиарда. SIP-сетям с большим числом пользователей необходима инфраструктура, и ее создают различные серверы SIP. Сервер регистрации (registrar) занимается учетом и авторизацией пользователей, сервер локализации (allocation) ищет их и определяет их местонахождение, сервер переадресации (redirect) переводит звонки абонентам туда, где они фактически находятся в данный момент, – если меня, например, нет в Москве, потому что я уехал в Америку, сервер переведет звонок на мой американский номер. Наиболее сложные функции ложатся на прокси-сервер (SIP Proxy), обеспечивающий взаимодействие внутренней (например, учрежденческой) IP-телефонной сети с внешним миром, – именно он определяет все политики, правила общения и т. д. Существуют и другие серверы SIP (например, сервер конференций), но они менее важны. На рисунке показано, как может работать SIP в сети предприятия.

Пользователь Алиса приходит на свое рабочее место в компании Example, включает в корпоративную сеть ноутбук и активизирует имеющийся на нем программный телефон, который автоматически регистрируется на сервере регистрации. Тот, в свою очередь, запрашивает информацию о пользователе в корпоративной базе данных и сообщает о том, как с ним контактировать, серверу локализации. (Оба сервера могут интегрироваться с различными базами данных, службами каталогов типа LDAP или MS Active Directory и т. д.) Теперь, когда кто-нибудь позвонит Алисе, прокси-сервер, запросив сервер локализации, установит связь с ее рабочим местом.

Аутентификация и авторизация SIP 2.0

До выхода SIP 2.0, который поддерживается любым современным оборудованием и ПО, разрешалась передача паролей чуть ли не открытым текстом (HTTP Basic Authentication), что в настоящее время вообще немыслимо. Однако, применяемая в SIP 2.0 авторизация на основе дайджеста от случайной строки и пароля (HTTP Хеш-сумма (digest - дайджест) Authentication), также относительно уязвима. Ведь если злоумышленник перехватывает случайную строку и полученный дайджест (Алгоритм MD5 или SHA-1), он имеет возможность автономно подобрать пароль (по словарю или перебором), и ему не понадобится даже подключаться к SIP-серверу. Это главная причина, по которой настоятельно рекомендуется использовать сложные пароли длиной не менее 10 символов.

Прохождение авторизации в SIP протоколе зависит от "Что такое realm sip?", различного для каждого защищаемого домена.

md5 алгоритм на входе принимает любую длину символов и на выходе выдать 128-битный отпечаток (finger-print) или профиль сообщения (message digest), которое было подано на вход алгоритма. Гипотетически считается, что два сообщения, которые имеют один и тот же профиль сообщения или выработаны любым сообщением, имеют определенный профиль сообщения.

Message digest — коротка цифровая строка фиксированной длины, формируется из более длинного сообщения с использованием специального алгоритма. Алгоритм md5 назначен для цифровой подписи (digital signature) приложений, где большие файлы должны быть «сжаты» в безопасный способ, до того как они будут закриптованы с помощью публичного или скрытого ключа с помощью криптосистемы с открытым ключом, например RSA. Digital signature — цифровая подпись, которая является уникальным электронным идентификатором, обеспечивающим проверку сообщения с установлением подлинности отправителя и гарантии то, что документ не был изменен с момента подписания.

Последовательность действий для авторизации клиентского оборудования на сервере.

  • Вариант №1. Абонент: высылает серверу сообщение с заголовком REGISTER. Если в настройках абонента не указан secret, то этого достаточно, сервер присылает ответ SIP/2.0 200 OK и процесс регистрации заканчивается.
  • Вариант №2. Если secret указан. Сервер на запрос REGISTER присылает ответ SIP/2.0 401 Unauthorized (нормальный ответ сервера о том, что пользователь еще не авторизировался; обычно после этого абонентское оборудование отправляет на сервер новый запрос, содержащий логин и пароль).

На третьем этапе абонент высылает серверу строку в сообщении REGISTER

Authorization: Digest username="203",realm="asterisk",nonce="29b8191d",uri="sip:local",
   response="7306cfba1b131f2f04363b68d908f855",algorithm=MD5

Где параметр response - строка, состоящая из 32 шестнадцатиричных разрядов и удостоверяющая, что пользователю известен пароль. Формируется с помощью применения функции хеширования к значениям nonce, nc, cnonce, qop, uri, username, realm, типу запроса и паролю password. По умолчанию хеширование производится по алгоритму Алгоритм MD5.

  • Вариант №3. Если используется внешний сервер для аутентификации (процедура проверки подлинности) по протоколу radius. Сервер на запрос REGISTER присылает ответ SIP/2.0 407 Proxy Authentication Required - необходима аутентификация на прокси-сервере).

SIP URI

SIP URI – это схема адресации SIP, используемая для вызова абонента с помощью SIP. Другими словами, SIP URI является номером SIP-телефона пользователя. SIP URI похож на адрес электронной почты и записывается в следующем формате:

SIP URI = sip:x@y:Port Где x=имя пользователя и y=хост (домен или IP)

Примеры:

sip:joe.bloggs@10.123.17.213
sip:support@phonesystem.com
sip:7422444032@phonesystem.com
PQ VPS сервера в 28+ странах.