- •1 Назначение и принципы протокола SIP
- •Назначение и принципы протокола SIP
- •Согласно принципам семиуровневой модели Взаимодействия открытых систем OSI (Open Systems Interconnection) особенностью протокола
- •В основу протокола положены следующие принципы:
- •Масштабируемость сети
- •Персональная мобильность пользователей.
- •Расширяемость протокола
- •Интеграция в стек существующих протоколов Интернет
- •Взаимодействие с другими протоколами сигнализации
- •Протокол SDP
- •Знаком «*» обозначены необязательные поля. Поля, используемые в протоколе:
- •Описание параметров времени
- •ЗАПРОС
- •Терминал
- •Сервер
- •Прокси-сервер
- •Предусмотрено два типа прокси-серверов - с
- •Сервер переадресации
- •Сервер определения местоположения пользователей
- •ЗАПРОС
- •Request-URI
- •Существует 6 основных видов запросов:
- •3 Запрос CANCEL отменяет обработку ранее переданных запросов с теми же, что и
- •После испытаний протокола SIP в реальных сетях
- •ОТВЕТ
- •Reason-Phrase даёт краткое описание кода ответа и предназначена для визуального восприятия пользователем.
- •Определено шесть классов ответов. Все ответы делятся на два типа: информационные и окончательные.
- •Информационные или предварительные ответы (1xx)
- •Ответы успешной обработки запроса (2xx)
- •SIP-Ответы успешной обработки запроса.
- •Ответы перенаправления вызова (3xx)
- •SIP-ответы перенаправления вызова.
- •302 Moved Temporarily. Вызываемый пользователь временно изменил свое
- •Ответы ошибки в запросе (4xx)
- •Ответы отказа сервера (5xx)
- •SIP-ответы отказа сервера.
- •Ответы полной невозможности установления соединения (6xx)
- •Адресация в сетях SIP
- •Заголовки сообщений
- •Заголовок Call-ID - уникальный идентификатор сеанса связи
- •Реализация услуг телефонии на базе протокола SIP
- •Процедура управления соединением
- •Эти заголовки обязательны для всех SIP-запросов. Они являются основными частями SIP-сообщения, поскольку обеспечивают
- •Если запрос принимается , должны быть произведены любые связанные с ним изменения состояния
- •5 Обработка заголовка Require.Поле этого заголовка используется UAC, чтобы сообщить UAS о расширениях,
- •Установление соединения с участием прокси-сервера
- •1 INVITE Anton Прокси-сервер1
- •INVITE sip:vladimir@protei.ru SIP/2.0
- •Max-Forwards: 70
- •Call-ID: 3848276298220188511@niits.ru
- •Порядковый
- •Content-Type: application/sdp
- •Content-Length: 151
- •SIP/2.0 407 Proxy Authorization Required
- •Call-ID: 3848276298220188511@niits.ru
- •Запрос ACK должен содержать значения заголовков Call-ID, From, и поля Request-URI, идентичные тем,
- •Proxy1 выполняя следующие шаги: 1Создаёт копию полученного запроса.
- •Proxy2 добавляет в сообщение свой заголовок Via:
- •Местоположение вызываемого пользователя определено. Вызываемый пользователь получает сигнал о входящем вызове от своего
- •11 180 (Ringing)
- •Демонстрационная часть
- •К IP-сети подключены два абонента с sip- адресами:
- •Вызываемый пользователь временно изменил свое местоположение и может быть найден по адресу, указанному
- •INVITE
- •На этом изучение теоретического материала заканчивается.
Proxy2 добавляет в сообщение свой заголовок Via:
Via: SIP/2.0/TCP ss2.protei.ru:5060; branch=z9hG4bK721e4.1
Значение поля заголовка Max-Forwards уменьшилось на 1, так как сообщение прошло еще через один прокси-сервер.
Max-Forwards: 68
Proxy2 добавил свой адрес sip:ss2.protei.ru в поле заголовка Record-Route перед существующим значением:
Record-Route: <sip:ss2.protei.ru;lr>, <sip:ss1.niits.ru;lr>
Назад
8 100 (Trying) Proxy 2 -> Proxy 1
SIP/2.0 100 Trying Via: SIP/2.0/TCP ss1.niits.ru:5060; branch=z9hG4bK2d4790.1;received=192.0.2.111
Via: SIP/2.0/TCP serv1.niits.ru:5060; branch=z9hG4bK74bf9 ;received=192.0.2.101
From: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl To: “Vladimir” <sip:vladimir@protei.ru>
Call-ID: 3848276298220188511@niits.ru CSeq: 2 INVITE
Content-Length: 0
Proxy2 принимает запрос INVITE, начинает его обрабатывать и об этом сообщает Proxy1.
Proxy2 добавляет в заголовок ответа свое поле Via.
Рисунок
9 180 (Ringing) Vladimir -> Proxy 2
SIP/2.0 180 Ringing
Via: SIP/2.0/TCP ss2.protei.ru:5060; branch=z9hG4bK721e4.1;received=192.0.2.222 Via: SIP/2.0/TCP ss1.niits.ru:5060; branch=z9hG4bK2d4790.1;received=192.0.2.111 Via: SIP/2.0/TCP serv1.niits.ru:5060; branch=z9hG4bK74bf9;received=192.0.2.101
Record-Route: <sip:ss2.protei.ru;lr>, <sip:ss1.niits.ru;lr> From: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl To: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 Call-ID: 3848276298220188511@niits.ru
Contact: <sip:vladimir@serv3.protei.ru;transport=tcp> CSeq: 2 INVITE
Content-Length: 0
Местоположение вызываемого пользователя определено. Вызываемый пользователь получает сигнал о входящем вызове от своего UA.
UA Vladimira добавляет в ответ на запрос INVITE поле Via и Record-Route, для маршрутизации ответа тем же путем, по которому пришел запрос.
Рисунок |
10 180 (Ringing) Proxy 2 -> Proxy 1
SIP/2.0 180 Ringing
Via: SIP/2.0/TCP ss1.niits.ru:5060; branch=z9hG4bK2d4790.1;received=192.0.2.111
Via: SIP/2.0/TCP serv1.niits.ru:5060; branch=z9hG4bK74bf9;received=192.0.2.101 Record-Route: <sip:ss2.protei.ru;lr>, <sip:ss1.niits.ru;lr> From: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl To: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 Call-ID: 3848276298220188511@niits.ru
Contact: <sip:vladimir@serv3.protei.ru;transport=tcp> CSeq: 2 INVITE
Content-Length: 0
Proxy 2 убирает из ответа первое значение поля Via и запрос направляется по следующему значению (ss1.niits.ru:5060).
Рисунок
11 180 (Ringing) |
Proxy 1 -> Anton |
|
|
SIP/2.0 180 Ringing |
|
|
|
Via: SIP/2.0/TCP serv1.niits.ru:5060; |
|
|
|
|
|||
branch=z9hG4bK74bf9;received=192.0.2.101 |
|||
Record-Route:<sip:ss2.protei.ru;lr>,<sip:ss1.niits.ru;lr> |
From: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl To: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 Call-ID: 3848276298220188511@niits.ru
Contact: <sip:vladimir@serv3.protei.ru;transport=tcp> CSeq: 2 INVITE
Content-Length: 0
Proxy1 убирает из ответа первое значение поля Via и запрос направляется по следующему значению (serv1.niits.ru:5060).
Рисунок
12 200 (OK) Vladimir -> Proxy 2
SIP/2.0 200 OK
Via: SIP/2.0/TCP ss2.protei.ru:5060;branch=z9hG4bK721e4.1; received=192.0.2.222
Via: SIP/2.0/TCP ss1.niits.ru:5060;branch=z9hG4bK2d4790.1; received=192.0.2.111
Via: SIP/2.0/TCP serv1.niits.ru:5060;branch=z9hG4bK74bf9; received=192.0.2.101
Record-Route: <sip:ss2.protei.ru;lr>, <sip:ss1.niits.ru;lr> From: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl To: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 Call-ID: 3848276298220188511@niits.ru
CSeq: 2 INVITE
Contact: <sip:vladimir@serv3.protei.ru;transport=tcp> Content-Type: application/sdp
Content-Length: 147
v=0 o=vladimir 2890844527 2890844527 IN IP4 serv2.protei.ru s=- c=IN IP4 192.0.2.201
t=0 0
m=audio 3456 RTP/AVP 0 a=rtpmap:0 PCMU/8000
Ответ 200 на запрос INVITE означает, что вызываемый пользователь согласен принять участие в сеансе связи, в теле ответа указываются возможности оборудования вызываемого пользователя. Клиент пользователя Vladimir готовится принимать пользовательскую информацию на порт 3456 из сети.
Рисунок
13 200 (OK) Proxy 2 -> Proxy 1
SIP/2.0 200 OK Via: SIP/2.0/TCP s1.niits.ru:5060; branch=z9hG4bK2d4790.1;received=192.0.2.111
Via: SIP/2.0/TCP serv1.niits.ru:5060; branch=z9hG4bK74bf9;received=192.0.2.101 Record-Route: <sip:ss2.protei.ru;lr>, <sip:ss1.niits.ru;lr> From: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl To: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 Call-ID: 3848276298220188511@niits.ru
CSeq: 2 INVITE
Contact: <sip:vladimir@serv2.protei.ru;transport=tcp> Content-Type: application/sdp
Content-Length: 147
v=0 o=vladimir 2890844527 2890844527 IN IP4 serv3.protei.ru s=- c=IN IP4 192.0.2.201
t=0 0
m=audio 3456 RTP/AVP 0 a=rtpmap:0 PCMU/8000
Proxy2 передает ответ 200 Proxy1, в котором сообщается о том, что Vladimir примет участие в сеансе связи. В теле ответа передаются возможности оборудования вызываемого пользователя, которые Proxy2 не меняет. Proxy2 убирает из заголовка первое значение заголовка Via тем самым отмечая, что ответ через него пройден.
Рисунок
14 200 (OK) Proxy 1 -> Anton
SIP/2.0 200 OK Via: SIP/2.0/TCP serv1.niits.ru:5060; branch=z9hG4bK74bf9;received=192.0.2.101
Record-Route: <sip:ss2.protei.ru;lr>, <sip:ss1.niits.ru;lr> From: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl To: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 Call-ID: 3848276298220188511@niits.ru
CSeq: 2 INVITE
Contact: <sip:vladimir@serv2.protei.ru;transport=tcp> Content-Type: application/sdp
Content-Length: 147
v=0 o=vladimir 2890844527 2890844527 IN IP4 serv3.protei.ru s=- c=IN IP4 192.0.2.201
t=0 0
m=audio 3456 RTP/AVP 0 a=rtpmap:0 PCMU/8000
Proxy1 убирает первое значение заголовка Via.
Рисунок
15 ACK Anton -> Proxy 1
ACK sip:vladimir@serv2.protei.ru SIP/2.0 Via: SIP/2.0/TCP serv1.niits.ru:5060; branch=z9hG4bK74b76
Max-Forwards: 70
Route: <sip:ss1.niits.ru;lr>,<sip:ss2.protei.ru;lr> From: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl To: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 Call-ID: 3848276298220188511@niits.ru
CSeq: 2 ACK Content-Length: 0
Anton принимает ответ 200 и подтверждает правильность приема. Тело сообщения отсутствует.
Рисунок
16 ACK Proxy 1 -> Proxy 2
ACK sip:vladimir@serv2.protei.ru SIP/2.0 Via: SIP/2.0/TCP ss1.niits.ru:5060; branch=z9hG4bK2d4790.1
Via: SIP/2.0/TCPserv1.niits.ru:5060; branch=z9hG4bK74b76;received=192.0.2.101 Max-Forwards: 69
Route: <sip:ss2.protei.ru;lr>
From: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl To: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 Call-ID: 3848276298220188511@niits.ru
CSeq: 2 ACK Content-Length: 0
Proxy1 передает подтверждение приема и добавляет свое значение заголовка Via.
Рисунок
17 ACK Proxy 2 -> Vladimir
ACK sip:vladimir@serv2.protei.ru SIP/2.0 Via: SIP/2.0/TCP ss2.protei.ru:5060;
branch=z9hG4bK721e4.1
Via: SIP/2.0/TCP ss1.niits.ru:5060; branch=z9hG4bK2d4790.1;received=192.0.2.111
Via: SIP/2.0/TCP serv1.niits.ru:5060; branch=z9hG4bK74b76;received=192.0.2.101
Max-Forwards: 68
From: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl To: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 Call-ID: 3848276298220188511@niits.ru
CSeq: 2 ACK Content-Length: 0
Proxy2 передает подтверждение приема и добавляет свое значение заголовка Via.
Рисунок
18 BYE Vladimir -> Proxy 2
BYE sip:anton@serv1.niits.ru SIP/2.0 Via: SIP/2.0/TCP serv2.protei.ru:5060; branch=z9hG4bKnashds7
Max-Forwards: 70
Route: <sip:ss2.protei.ru;lr>,<sip:ss1.niits.ru;lr>
From: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 To: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl Call-ID: 3848276298220188511@niits.ru
CSeq: 1 BYE Content-Length: 0
Спустя определенное время Vladimir вешает трубку. Заметим, что значение CSeq не равно 3. Терминалы пользователей Anton и Vladimir поддерживают свой собственный раздельный порядок счёта CSeq.
Рисунок
19 BYE Proxy 2 -> Proxy 1
BYE sip:anton@serv1.niits.ru SIP/2.0 Via: SIP/2.0/TCP ss2.protei.ru:5060;
branch=z9hG4bK721e4.1
Via: SIP/2.0/TCP serv2.protei.ru:5060; branch=z9hG4bKnashds7 ;received=192.0.2.201
Max-Forwards: 69 Route: <sip:ss1.niits.ru;lr>
From: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 To: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl Call-ID: 3848276298220188511@niits.ru
CSeq: 1 BYE Content-Length: 0
Рисунок
20 BYE Proxy 1 -> Anton
BYE sip:anton@serv1.niits.ru SIP/2.0
Via: SIP/2.0/TCP ss1.niits.ru:5060;branch=z9hG4bK2d4790.1
Via: SIP/2.0/TCP ss2.protei.ru:5060; branch=z9hG4bK721e4.1;received=192.0.2.222 Via: SIP/2.0/TCP serv2.protei.ru:5060; branch=z9hG4bKnashds7;received=192.0.2.201 Max-Forwards: 68
From: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 To: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl Call-ID: 3848276298220188511@niits.ru
CSeq: 1 BYE Content-Length: 0
Рисунок
21 200 (OK) Anton -> Proxy 1
SIP/2.0 200 OK Via: SIP/2.0/TCP ss1.niits.ru:5060;
branch=z9hG4bK2d4790.1;received=192.0.2.111 Via: SIP/2.0/TCP ss2.protei.ru:5060;
branch=z9hG4bK721e4.1;received=192.0.2.222 Via: SIP/2.0/TCP serv2.protei.ru:5060;
branch=z9hG4bKnashds7;received=192.0.2.201
From: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 To: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl Call-ID: 3848276298220188511@niits.ru
CSeq: 1 BYE Content-Length: 0
Рисунок
22 200 (OK) Proxy 1 -> Proxy 2
SIP/2.0 200 OK Via: SIP/2.0/TCP ss2.protei.ru:5060; branch=z9hG4bK721e4.1;received=192.0.2.222
Via: SIP/2.0/TCP serv2.protei.ru:5060; branch=z9hG4bKnashds7;received=192.0.2.101
From: “Vladimir” <sip:vladimir@protei.ru>;tag=314159 To: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl Call-ID: 3848276298220188511@niits.ru
CSeq: 1 BYE Content-Length: 0
Рисунок
23 200 (OK) Proxy 2 -> Vladimir
SIP/2.0 200 OK Via: SIP/2.0/TCP serv2.protei.ru:5060; branch=z9hG4bKnashds7;received=192.0.2.201 From: “Vladimir”<sip:vladimir@protei.ru>; tag=314159
To: “Anton” <sip:anton@niits.ru>;tag=9fxced76sl Call-ID: 3848276298220188511@niits.ru
CSeq: 1 BYE Content-Length: 0
Содержание Рисунок |