Инструменты пользователя

Инструменты сайта


sip

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

sip [2018/11/01 16:15] (текущий)
Строка 1: Строка 1:
 +====== SIP ======
 +~~Title: Описание RFC протокола SIP ~~
 +{{htmlmetatags>​
 +metatag-description=(В статье собраны ссылки на RFC протокола SIP. Описана структура SIP запроса.)
 +}}
 +
 +
 +{{ ::​sip-h323.jpg?​nolink |}}
 +  * [[wpru>​SIP]]
 +  * [[http://​www.voip-info.org/​wiki/​view/​SIP|voip-info:​ SIP]]
 +  * [[http://​wiki.sipnet.ru/​index.php/​SIP_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%8B_%D0%B8_%D0%B8%D1%85_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F|SIP ответы и их значения]]
 +  * [[http://​book.itep.ru/​4/​4/​sip.htm|Семенов Ю.А. Протокол запуска сессий SIP]]
 +  * [[http://​voip.rus.net/​tiki-index.php?​page=SIP+method+options|SIP метод OPTIONS]]
 +  * [[http://​wiki.sipnet.ru/​index.php/​%D0%A2%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D1%81%D0%B5%D1%82%D0%B5%D0%B2%D1%8B%D1%85_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2_(NAT)_%D0%B8_SIP|Трансляция сетевых адресов (NAT) и SIP]]
 +
 +Протокол Session Initiation Protocol (SIP), обычно применяемый в VoIP-телефонах (как аппаратных,​ так и программных),​ отвечает за установку и разъединение соединения,​ а также за любые изменения,​ происходящие во время соединения,​ такие как переадресации. Назначение SIP – помочь двум конечным точкам поговорить друг с другом (по возможности напрямую). **Протокол SIP – это просто протокол обмена сигналами,​ то есть его задачей является лишь обеспечить возможность двум конечным точкам говорить друг с другом,​ но не работа с носителем вызова (голосом)**. Передача голоса осуществляется с помощью другого протокола – Real-Time Transport Protocol (транспортный протокол реального времени – [[RTP]]; [[RFC]] 3550) – для передачи медиа-данных непосредственно между двумя конечными точками.
 +
 +<note tip>VoIP (Voice over IP; IP-телефония) — система связи, обеспечивающая передачу речевого сигнала по сети Интернет или по любым другим IP-сетям. Сигнал по каналу связи передаётся в цифровом виде и, как правило,​ перед передачей преобразовывается (сжимается) с тем, чтобы удалить избыточность.</​note>​
 +
 +====== RFC SIP ======
 +Тем, кто соберётся делать собственную реализацию протокола SIP, пригодится список [[RFC]], описывающих протокол и его дополнения:​
 +  * [[rfc>​2543]]:​ Первоначальное описание SIP/2.0
 +  * RFC 2976: передача информации,​ не изменяющей состояние сессии (метод INFO)
 +  * RFC 2279: Сообщения протокола SIP (запросы и ответы)
 +  * [[rfc_3261|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- запросы =====
 +**Запросы**:​
 +В первоначальной версии протокола 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]]. Для организации взаимодействия с существующими приложениями IP-сетей и для обеспечения мобильности пользователей протокол SIP использует адрес, подобный адресу электронной почты. В качестве адресов рабочих станций используются специальные универсальные указатели ресурсов - так называемые SIP URL (Universal Resource Locators).
 +
 +SIP- адреса бывают четырех типов:
 +
 +  * имя@домен;​
 +  * имя@хост;​
 +  * имя@IР-адрес;​
 +  * №телефона@шлюз
 +Таким образом,​ адрес состоит из двух частей. Первая часть - это имя пользователя,​ зарегистрированного в домене или на рабочей станции. Если вторая часть адреса идентифицирует какой-либо шлюз, то в первой указывается телефонный номер абонента.
 +
 +Во второй части адреса указывается имя домена,​ рабочей станции или шлюза. Для определения IP- адреса устройства необходимо обратиться к службе доменных имен - [[DNS]]. Если же во второй части SIP- адреса размещается IP- адрес, то с рабочей станцией можно связаться напрямую.
 +
 +В начале SIP- адреса ставится слово "​sip:",​ указывающее,​ что это именно SIP- адрес. Примеры SIP- адресов:<​file>​
 +sip: als@rts.loniis.ru
 +sip: user1@192.168.100.152
 +sip: 294-75-47@gateway.ru
 +</​file>​
 +
 +
 +В SIP поддерживает функции messaging и presence. Первая обеспечивает обмен в реальном времени короткими сообщениями (как ICQ на ПК или SMS в сетях GSM), вторая позволяет определять состояние абонента,​ т. е. на месте ли он, не занят ли и т. д. (в ICQ тоже есть такая возможность). Благодаря этим двум функциям SIP позволяет реагировать на события,​ а также рассылать сообщения "по событию"​.
 +
 +
 +====== IP-интеграция ======
 +SIP поддерживает специальный довольно мощный язык [[http://​en.wikipedia.org/​wiki/​Call-Processing_Language|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. Вот и все.
 +
 +{{:​siptrace.jpg|}}
 +
 +===== в сети предприятия =====
 +
 +Но такая схема абсолютно неэффективна,​ когда клиентов в сети не два, а два миллиарда. SIP-сетям с большим числом пользователей необходима инфраструктура,​ и ее создают различные серверы SIP. Сервер регистрации (registrar) занимается учетом и авторизацией пользователей,​ сервер локализации (allocation) ищет их и определяет их местонахождение,​ сервер переадресации (redirect) переводит звонки абонентам туда, где они фактически находятся в данный момент,​ -- если меня, например,​ нет в Москве,​ потому что я уехал в Америку,​ сервер переведет звонок на мой американский номер.
 +Наиболее сложные функции ложатся на прокси-сервер (SIP Proxy), обеспечивающий взаимодействие внутренней (например,​ учрежденческой) IP-телефонной сети с внешним миром, -- именно он определяет все политики,​ правила общения и т. д. Существуют и другие серверы SIP (например,​ сервер конференций),​ но они менее важны. На рисунке показано,​ как может работать SIP в сети предприятия.
 +
 +{{:​siptrace2.jpg|}}
 +
 +Пользователь Алиса приходит на свое рабочее место в компании Example, включает в корпоративную сеть ноутбук и активизирует имеющийся на нем программный телефон,​ который автоматически регистрируется на сервере регистрации. Тот, в свою очередь,​ запрашивает информацию о пользователе в корпоративной базе данных и сообщает о том, как с ним контактировать,​ серверу локализации. (Оба сервера могут интегрироваться с различными базами данных,​ службами каталогов типа LDAP или MS Active Directory и т. д.) Теперь,​ когда кто-нибудь позвонит Алисе, прокси-сервер,​ запросив сервер локализации,​ установит связь с ее рабочим местом.
 +====== Аутентификация и авторизация SIP 2.0 ======
 +  * [[http://​voip.rus.net/​tiki-index.php?​page=SIP+Authentication|Идентификация пользователей в SIP]] [[RFC]] 3261
 +  * [[https://​who.rocq.inria.fr/​Philippe.Sultan/​Asterisk/​asterisk_sip_external_authentication.html|SIP peers external authentication in Asterisk / OpenPBX]]
 +  * [[http://​openmaniak.com/​trixbox_analyze.php|SIP Registration]] + [[Wireshark]]
 +  * [[http://​voip.rus.net/​tiki-index.php?​page=Asterisk+config+sip.conf|Asterisk в роли SIP клиента]]
 +  * Гольдштейн Б.С., Зарубин А.А., Саморезов В.В. Протокол SIP. Глава 2.6. Процедуры функционирования HTTP аутентификации
 +  * [[HTTP-аутентификация]]
 +До выхода SIP 2.0, который поддерживается любым современным оборудованием и ПО, разрешалась передача паролей чуть ли не открытым текстом (HTTP Basic Authentication),​ что в настоящее время вообще немыслимо. Однако,​ применяемая в SIP 2.0 авторизация на основе дайджеста от случайной строки и пароля (HTTP [[Digest]] Authentication),​ также относительно уязвима. Ведь если злоумышленник перехватывает случайную строку и полученный дайджест ([[MD5]] или [[SHA]]-1), он имеет возможность автономно подобрать пароль (по словарю или перебором),​ и ему не понадобится даже подключаться к SIP-серверу. Это главная причина,​ по которой настоятельно рекомендуется использовать сложные пароли длиной не менее 10 символов.
 +
 +Прохождение авторизации в SIP протоколе зависит от "​[[realm]]",​ различного для каждого защищаемого домена.
 +
 +
 +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** (нормальный ответ сервера о том, что пользователь еще не авторизировался;​ обычно после этого абонентское оборудование отправляет на сервер новый запрос,​ содержащий логин и пароль).
 +{{:​sip_authentication.gif|}}
 +На третьем этапе абонент высылает серверу строку в сообщении REGISTER<​file>​
 +Authorization:​ Digest username="​203",​realm="​asterisk",​nonce="​29b8191d",​uri="​sip:​local",​
 +   ​response="​7306cfba1b131f2f04363b68d908f855",​algorithm=MD5
 +</​file>​Где **параметр response** - строка,​ состоящая из 32 шестнадцатиричных разрядов и удостоверяющая,​ что пользователю известен пароль. Формируется с помощью применения функции хеширования к значениям nonce, nc, cnonce, qop, uri, username, realm, типу запроса и паролю password. По умолчанию хеширование производится по алгоритму [[MD5]]. ​
 +  * **Вариант №3**. Если используется внешний сервер для [[аутентификация|аутентификации]] (процедура проверки подлинности) по протоколу [[RADIUS]]. Сервер на запрос REGISTER присылает ответ SIP/2.0 **407 Proxy Authentication Required** - необходима аутентификация на прокси-сервере).
 +{{:​sip_radius_authentication.gif|}}
 +
 +====== SIP URI ======
 +
 +**SIP URI** – это схема адресации SIP, используемая для вызова абонента с помощью SIP. Другими словами,​ SIP URI является номером SIP-телефона пользователя. SIP URI похож на адрес электронной почты и записывается в следующем формате:<​file>​
 +SIP URI = sip:​x@y:​Port Где x=имя пользователя и y=хост (домен или IP)
 +</​file>​Примеры:<​file>​
 +sip:​joe.bloggs@10.123.17.213
 +sip:​support@phonesystem.com
 +sip:​7422444032@phonesystem.com
 +</​file>​
 +
  
sip.txt · Последние изменения: 2018/11/01 16:15 (внешнее изменение)