Предыдущие статьи по SIP:
- Взаимодействие клиентов SIP. Часть 1 (Простое взаимодействие)
- Взаимодействие клиентов SIP. Часть 2 (Взаимодействие с использованием Proxy-сервера)
- SIP URI и URL. Часть 1 (URI, URL и URN)
В первой части статьи мы разобрались, что такое URL, URN и URN. Пришло время поговорить о URI и URL, используемых в SIP.
Протокол SIP поддерживает несколько URI схем:
- sip — для SIP
- sips — для защищенного SIP
- tel — для телефонных номеров
- pres — для присутствия
- im — для мгновенных сообщений
- xmpp — для Jabber'а
- h323 — для протокола H.323
Для начала давайте рассмотрим SIP и SIPS URI
SIP и SIPS URI
Поскольку схемы SIP и SIPS URI идентичны, дальше в тексте мы будем говорить только о SIP URI, подразумевая, что все это относится также и к SIPS URI.
Кроме того, договоримся, что написание большими буквами (SIP) будет обозначать протокол, а маленькими (sip) - название схемы.
Как вы помните из предыдущих статей, SIP URI используются в ряде мест в SIP-сообщении, в частности в заголовочных полях To, From, Contact и т.д. Кроме того sip URI, точно также, как и mailto URI могут быть использованы на сайтах в качестве гиперссылок.
В общем случае, схема sip выглядит следующим образом:
Обратите внимание, что URI не должны содержать пробелов или переводов строки.
USER и PASSWORD
Как мы помним из первой части статьи, в схеме URI совокупность user и password называется userinfo. В рамках sip, userinfo завершается знаком "@". Userinfo часть является опциональной и может отсутствовать; знак "@" при этом также должен отсутствовать.
Согласно RFC 3261, user идентифицирует определенный ресурс на хосте, При этом под хостом чаще всего подразумевается домен.
Если хост поддерживает работу с телефонными номерами, то в качестве пользователя может быть указан телефонный номер, с которым мы хотим связаться. Это актуально, например, при использовании SIP trunk.
Password позволяет передать пароль. делать это не рекомендуется, так как в данном случае пароль будет передан в открытом виде.
HOST
Хост, предоставляющий ресурс. Используется или полное доменное имя (FQDN) или IPv4/IPv6-адрес. При этом рекомендуется использовать FQDN везде, где это возможно — это позволит избежать проблем, связанных с изменением IP-адреса хоста.
PORT
Порт, на который следует отправлять запрос. Если данное поле отсутствует, то используется 5060 для SIP и 5061 для SIPS.
Параметры
Параметры воздействуют на запрос, который будет отправлен на URI.
Количество параметров может быть произвольным, но каждый из них может встречаться только один раз. Каждый новый параметр начинается со знака ";" и имеет следующий синтаксис:
Схема sip поддерживает следующие параметры:
- transport
- maddr
- ttl
- method
- lr
- user — не путать с user из userinfo
Поскольку схема URI расширяем, могут встречаться и другие параметры. При этом User Agent должен игнорировать все неизвестные параметры.
transport
Определят протокол, который следует использовать для отправки сообщений. Обычно используются UDP, TCP или SCTP, однако схема позволяет указывать любой поддерживаемый SIP-клиентом протокол транспортного уровня. По умолчанию для SIP используется UDP. Для SIPS должен использоваться любой надежный протокол; по усмолчанию — TCP.
maddr
Определяет адрес сервера, но который следует посылать запросы для данного пользователя. Соответственно перезаписывает значение поля host. В случае, если в URI присутствует msddr, порт и транспорт будут относиться к нему. Обычно в maddr содержится multicast-адрес.
ttl
Определяет TTL (Time-To-Live) UDP multicast-пакета. Должен быть использован только в том случае, если в качестве транспорта используется UDP и maddr содержит multicast-адрес.
user
Не путать с userinfo->user. Поскольку в качестве имени пользователя может быть использован телефонный номер, следует отличать случай, когда "+79211234567" — это номер телефона, с которым нас свяжет хост, от случая, когда та же самая строчка — это имя пользователя на хосте (да, мы вполне можем создать пользователя с именем "+79211234567"). Для этого используют параметр user. По умолчанию user=ip. Это значит, что userinfo->user содержит имя пользователя на хосте. Если же user=phone, то userinfo->user — это номер телефона, с которым нас должен связать хост.
При этом важно учитывать, что данный параметр никаким образом не говорит о возможностях и характеристиках абонента, представленного данным URI. То есть, user=phone не должно нас наталкивать на мысль, что User Agent — это телефон, который не умеет работать с видео-звонками.
method
Определяет метод, который следует использовать в запросе. По умолчанию — INVITE.
lr
Используется при маршрутизации. О нем мы поговорим в отдельной статье.
Заголовки
Заголовки, которые могут быть добавлены в запрос. Это могут быть Subject и Priority.
Ниже приведена таблица использования составных частей SIP URI схемы для различных случаев:
В следующей статье мы рассмотрим схемы tel для телефонных номеров и pres для присутствия.
Автор: positivic