Протокол Session Initiation Protocol (SIP), обычно применяемый в VoIP-телефонах (как аппаратных, так и программных), отвечает за установку и разъединение соединения, а также за любые изменения, происходящие во время соединения, такие как переадресации. Назначение SIP – помочь двум конечным точкам поговорить друг с другом (по возможности напрямую). Протокол SIP – это просто протокол обмена сигналами, то есть его задачей является лишь обеспечить возможность двум конечным точкам говорить друг с другом, но не работа с носителем вызова (голосом). Передача голоса осуществляется с помощью другого протокола – Real-Time Transport Protocol (транспортный протокол реального времени – RTP; RFC 3550) – для передачи медиа-данных непосредственно между двумя конечными точками.
VoIP (Voice over IP; IP-телефония) — система связи, обеспечивающая передачу речевого сигнала по сети Интернет или по любым другим IP-сетям. Сигнал по каналу связи передаётся в цифровом виде и, как правило, перед передачей преобразовывается (сжимается) с тем, чтобы удалить избыточность.
Тем, кто соберётся делать собственную реализацию протокола SIP, пригодится список RFC, описывающих протокол и его дополнения:
Запросы:
В первоначальной версии протокола SIP (RFC 3261) было определено шесть типов запросов. С помощью запросов клиент сообщает о текущем местоположении, приглашает пользователей принять участие в сеансах связи, модифицирует уже установленные сеансы, завершает их и т. д. Тип запроса указывается в стартовой строке.
Но в процессе развития, в протокол было добавлено еще несколько типов запросов, которые дополнили его функциональность:
Адресация SIP логическая, того же типа, что Что такое ссылка URL в Методы и структура протокола HTTP. Для организации взаимодействия с существующими приложениями IP-сетей и для обеспечения мобильности пользователей протокол SIP использует адрес, подобный адресу электронной почты. В качестве адресов рабочих станций используются специальные универсальные указатели ресурсов — так называемые SIP URL (Universal Resource Locators).
SIP- адреса бывают четырех типов:
Таким образом, адрес состоит из двух частей. Первая часть — это имя пользователя, зарегистрированного в домене или на рабочей станции. Если вторая часть адреса идентифицирует какой-либо шлюз, то в первой указывается телефонный номер абонента.
Во второй части адреса указывается имя домена, рабочей станции или шлюза. Для определения 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 позволяет реагировать на события, а также рассылать сообщения «по событию».
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, который поддерживается любым современным оборудованием и ПО, разрешалась передача паролей чуть ли не открытым текстом (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 — цифровая подпись, которая является уникальным электронным идентификатором, обеспечивающим проверку сообщения с установлением подлинности отправителя и гарантии то, что документ не был изменен с момента подписания.
Последовательность действий для авторизации клиентского оборудования на сервере.
На третьем этапе абонент высылает серверу строку в сообщении 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.
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
Протоколом SIP
предусмотрены три основных сценария
установления соединения: с участием
прокси-сервера, с участием сервера
переадресации и непосредственно между
пользователями. Различие между
перечисленными сценариями заключается
в том, что по-разному осуществляется
поиск и приглашение вызываемого
пользователя. В первом случае эти функции
возлагает на себя прокси-сервер, а
вызывающему пользователю необходимо
знать только постоянный SIP-адрес
вызываемого пользователя. Во втором
случае вызывающая сторона самостоятельно
устанавливает соединение, а сервер
переадресации лишь реализует преобразование
постоянного адреса вызываемого абонента
в его текущий адрес. И, наконец, в третьем
случае вызывающему пользователю для
установления соединения необходимо
знать текущий адрес вызываемого
пользователя.
Рассмотрим подробно
два первых сценария:
-
Установление
соединения с участием сервера
переадресации
Администратор
сети сообщает пользователям адрес
сервера переадресации. Вызывающий
пользователь передает запрос INVITE (1) на
известный ему адрес сервера переадресации
и порт 5060, используемый по умолчанию
(Рисунок 2.2). В запросе вызывающий
пользователь указывает адрес вызываемого
пользователя. Сервер переадресации
запрашивает текущий адрес нужного
пользователя у сервера определения
местоположения (2), который сообщает ему
этот адрес (3). Сервер переадресации в
ответе 302 Moved temporarily передает вызывающей
стороне текущий адрес вызываемого
пользователя (4), или он может сообщить
список зарегистрированных адресов
вызываемого пользователя и предложить
вызывающему пользователю самому выбрать
один из них. Вызывающая сторона
подтверждает прием ответа 302 посылкой
сообщения АСК (5).
Рис.
2.3. Сценарий установления соединения
через сервер переадресации
Теперь вызывающая
сторона может связаться непосредственно
с вызываемой стороной. Для этого она
передает новый запрос INVITE (6) с тем же
идентификатором Call-ID, но другим номером
CSeq. В теле сообщения INVITE указываются
данные о функциональных возможностях
вызывающей стороны в формате протокола
SDP. Вызываемая сторона принимает запрос
INVITE и начинает его обработку, о чем
сообщает ответом 100 Trying (7) встречному
оборудованию для перезапуска его
таймеров. После завершения обработки
поступившего запроса оборудование
вызываемой стороны сообщает своему
пользователю о входящем вызове, а
встречной стороне передает ответ 180
Ringing (8). После приема вызываемым
пользователем входящего вызова удаленной
стороне передается сообщение 200 OK (9), в
котором содержатся данные о функциональных
возможностях вызываемого терминала в
формате протокола SDP. Терминал вызывающего
пользователя подтверждает прием ответа
запросом АСК (10). На этом фаза установления
соединения закончена и начинается
разговорная фаза.
По завершении
разговорной фазы любой из сторон
передается запрос BYE (11), который
подтверждается ответом 200 OK (12).
-
Установление
соединения с участием прокси-сервера
Администратор
сети сообщает адрес этого сервера
пользователям. Вызывающий пользователь
передает запрос INVITE (1) на адрес
прокси-сервера и порт 5060, используемый
по умолчанию (Рисунок 2.4.). В запросе
пользователь указывает известный ему
адрес вызываемого пользователя.
Прокси-сервер запрашивает текущий адрес
вызываемого пользователя у сервера
определения местоположения (2), который
и сообщает ему этот адрес (3). Далее
прокси-сервер передает запрос INVITE
непосредственно вызываемому оборудованию
(4). Опять в запросе содержатся данные о
функциональных возможностях вызывающего
терминала, но при этом в запрос добавляется
поле Via с адресом прокси-сервера для
того, чтобы ответы на обратном пути шли
через него. После приема и обработки
запроса вызываемое оборудование сообщает
своему пользователю о входящем вызове,
а встречной стороне передает ответ 180
Ringing (5), копируя в него из запроса поля
То, From, Call-ID, CSeq и Via. После приема вызова
пользователем встречной стороне
передается сообщение 200 OK (6), содержащее
данные о функциональных возможностях
вызываемого терминала в формате протокола
SDP. Терминал вызывающего пользователя
подтверждает прием ответа запросом АСК
(7). На этом фаза установления соединения
закончена и начинается разговорная
фаза.
По завершении
разговорной фазы одной из сторон
передается запрос BYE (8), который
подтверждается ответом 200 OK (9).
Все сообщения
проходят через прокси-сервер, который
может модифицировать в них некоторые
поля.
Рис. 2.4.
Сценарий установления соединения через
прокси-сервер
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
5.5. Пример SIP-сети
Сети SIP обычно строятся из элементов трех основных типов: терминалов, прокси-серверов и серверов переадресации. На
рис.
5.3 приведен пример возможного построения сети SIP.
Терминалы могут быть двух типов:
- Персональный компьютер со звуковой платой и программным обеспечением SIP-клиента.
- SIP-телефон, подключающийся непосредственно к ЛВС Ethernet.
Путем программирования сервер можно настроить на разные алгоритмы работы: он может обслуживать часть пользователей по одним правилам, а другую часть — по иным.
В протоколе SIP определены два вида сигнальных сообщений — запрос и ответ. Они имеют текстовый формат и базируются на протоколе HTTP. В запросе указываются процедуры, вызываемые для выполнения требуемых операций, а в ответе — результаты их выполнения. Определены шесть процедур:
- INVITE — приглашает пользователя принять участие в сеансе связи (служит для установления нового соединения; может содержать параметры для согласования);
- BYE — завершает соединение между двумя пользователями;
- OPTIONS — используется для передачи информации о поддерживаемых характеристиках (эта передача может осуществляться напрямую между двумя агентами пользователей или через сервер SIP);
- АСК — используется для подтверждения получения сообщения или для положительного ответа на команду INVITE ;
- CANCEL — прекращает поиск пользователя;
- REGISTER — передает информацию о местоположении пользователя на сервер SIP, который может транслировать ее на сервер адресов (Location Server).
Рис.
5.4.
Возможный сценарий установления и завершения сеанса связи по протоколу SIP
Переадресация соединения по SIP
Терминалы в протоколе SIP — это оконечные устройства, обеспечивающие двухстороннюю связь в реальном времени с другим устройством, но, в отличие от терминалов, описанных в рекомендациях Н.323, терминалы SIP выполняют функции шлюза.
Прокси-сервер принимает запрос от терминалов и обрабатывает его, после чего отправляет дальше: или на другой прокси-сервер, или оконечному терминалу. Кроме того, прокси-сервер обрабатывает все запросы и ответы от имени того терминала (или другого прокси), запрос от которого обрабатывается в данный момент. Таким образом, прокси-сервер выступает посредником между двумя терминалами.
Сервер переадресации получает запросы от терминала (прокси-серверов), обрабатывает их и возвращает этому терминалу обработанную информацию, необходимую для дальнейшей маршрутизации вызова. Затем терминал (прокси) непосредственно устанавливает соединение, согласно адресу, указанному сервером перенаправления. Существует также и бессерверный вариант соединения, когда один терминал может посылать запросы непосредственно другому терминалу.
Кроме того, в сетях SIP используются серверы местоположения (location server). Принципы его работы не входят в рекомендации SIP. Сервер SIP после принятия запроса обращается к серверу местоположения для того, чтобы узнать адрес, по которому можно найти пользователя; сервер местоположения в ответ либо сообщает список возможных адресов местоположения пользователя, либо информирует о невозможности найти их.
В сети с прокси-сервером (
рис.
5.5) для успешного установления двустороннего соединения между инициирующей и принимающей сторонами требуется выполнить следующие последовательные шаги:
- Прокси-сервер принимает запрос INVITE от инициирующей стороны.
- Прокси-сервер определяет местонахождение клиента, используя предоставленные услуги адресации и определения местоположения.
- По найденному адресу выдается запрос INVITE от сервера к принимающей стороне.
- Вызываемая сторона уведомляет вызывающую сторону и возвращает указание об успехе обратно прокси-серверу.
- От прокси-сервера к вызывающей стороне отправляется ответное сообщение «Все в порядке» (код 200 ).
- Вызывающая сторона подтверждает прием ответного сообщения выдачей запроса ACK, который прокси-сервер отправляет непосредственно к вызываемой стороне.
На
рис.
5.6 представлена архитектура сети SIP с сервером переадресации.
В сети SIP с сервером переадресации (
рис.
5.6) для успешного установления двустороннего соединения требуется выполнить следующие последовательные шаги:
- Сервер переадресации принимает запрос INVITE от вызывающей стороны ( Бориса ) и определяет местонахождение ( Егора ) по предоставленной информации.
- После этого сервер переадресации возвращает адрес вызывающей стороне. В отличие от прокси-сервера, сервер переадресации не выдает INVITE.
- Вызывающая сторона отправляет ACK к серверу переадресации, подтверждая завершенную транзакцию.
- Вызывающая сторона ( Борис ) отправляет запрос INVITE непосредственно Егору.
- Вызываемая сторона предоставляет указание о благоприятном установлении соединения (реакция «Все в порядке» с кодом статуса 200 ), вызывающая сторона возвращает ACK.
Подход, основанный на использовании протокола SIP, ориентирован на интеграцию услуги передачи речевого трафика по IP-сетям с остальными услугами Интернета. Этот подход является намного более простым для реализации в сравнении с H.323, но меньше подходит для организации взаимодействия с обычными телефонными сетями. В основном это связано с тем, что сигнальный протокол SIP, базирующийся на основе протокола HTTP, плохо согласуется с системами сигнализации, используемыми в ТфОП. Кроме того, сервер SIP в общем случае не сохраняет сведений о текущих соединениях ( Stateless ), в то время как узлы ТфОП, напротив, сохраняют информацию обо всех установленных соединениях ( Statefull ). Второй вариант больше подходит для поставщиков услуг Интернета для предоставления еще одной услуги — интернет-телефонии. Эта услуга будет являться всего лишь небольшой частью пакета услуг и будет предоставляться, например, по фиксированным тарифам, при этом будет использоваться
максимально упрощенная схема управления услугами.