SIP: Session Initiation Protocol Krzysztof Kryniecki 16 marca 2010
Wprowadzenie Zaaprobowany przez IETF w 1999 (RFC 2543) Zbudowany przez Mutli Parry Multimedia Session Control Working Group : MMUSIC Oficjalny numer ostatniej wersji wynosi 2.0 (aktualne RFC 3261) Działa w warstwie aplikacji
5 aspektów mulitmedialnej komunikacji w SIP: Lokalizacja użytkownika Dostępność użytkownika Możliwości użytkownika Ustawienia sesji Zarządzanie sesją
Podobny do HTTP i SMTP Ma wiele wspólnego z HTTP i SMTP: klient serwer wiadomości tekstowe Struktura komunikatów: nagłówki (To, From, Date, Subject) Używa adresowania URL, URI W odróżnieniu od HTTP, m.in.: peer to peer (np. serwer może inicjować komunikację) wiele odpowiedzi do jednego żądania transakcyjność wbudowana maszyna stanów
Podstawy SIP Adresowanie Uniform Resource Identifier (URI) sip:user@mimuw.edu.pl. Architektura funkcjonalna: Agent Użytkownika (User Agent UA) Serwery Sieciowe : SIP proxy (stanowy i bezstanowy) SIP redirect SIP registrar
Komunikaty SIP
Komunikaty SIP 2 rodzaje komunikatów: SIP Request SIP Response
Stuktura komunikatu Struktura komunikatu: generic message = startline *message header CRLF [ message body ] start line = Request Line / Status Line
SIP Request SIP request budowa: Pierwsza linia w komunikcie to Request Line Request Line = Method SP Request URI SP SIP Version CRLF
Podstawowe metody Request: INVITE ACK OPTIONS BYE CANCEL REGISTER
Dodatkowe metody REFER RFC 3515 specification. PUBLISH RFC 3903 specification. SUBSCRIBE RFC 3265 specification. NOTIFY RFC 3515 specification. MESSAGE RFC 3428 specification.
Przykład komunikatu SIP (Request) INVITE sip:user2@server2.com SIP/2.0 Via: SIP/2.0/UDP pc33.server1.com;branch=z9hg4bk776asdhds Max Forwards: 70 To: user2 <sip:user2@server2.com> From: user1 <sip:user1@server1.com>;tag=1928301774 Call ID: a84b4c76e66710@pc33.server1.com CSeq: 314159 INVITE Contact: <sip:user1@pc33.server1.com> Content Type: application/sdp Content Length: 142 User1 Message Body Not Shown
SIP Response SIP response budowa: Status Line = SIP Version SP Status Code SP Reason Phrase CRLF
Rodzaje odpowiedzi: 1xx: Provisional : 100 Trying 180 Ringing 2xx: Success : 200 OK 3xx: Redirection : 301 Moved Permanently & 302 Moved Temporarily 4xx: Client Error : 400 Bad Request 401 Unauthorized 408 Request Timeout 5xx: Server Error 6xx: Global Failure
Najczęstsze odpowiedzi: 100 Trying 180 Ringing 200 OK 301 Moved Permanently & 302 Moved Temporarily 400 Bad Request 401 Unauthorized & 407 Proxy Authentication Required 404 Not Found 408 Request Timeout
Przykład komunikatu SIP (Response)
Przykład atlanta.com... biloxi.com. proxy proxy... Alice's.................... Bob's softphone SIP Phone INVITE F1 ---------------> INVITE F2 100 Trying F3 ---------------> INVITE F4 <--------------- 100 Trying F5 ---------------> <-------------- 180 Ringing F6 180 Ringing F7 <--------------- 180 Ringing F8 <--------------- 200 OK F9 <--------------- 200 OK F10 <--------------- 200 OK F11 <--------------- <--------------- ACK F12 -------------------------------------------------> Media Session <================================================> BYE F13 <------------------------------------------------- 200 OK F14 ------------------------------------------------->
INVITE sip:bob@biloxi.com SIP/2.0 Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hg4bk776asdhds Max Forwards: 70 To: Bob <sip:bob@biloxi.com> From: Alice <sip:alice@atlanta.com>;tag=1928301774 Call ID: a84b4c76e66710@pc33.atlanta.com CSeq: 314159 INVITE Contact: <sip:alice@pc33.atlanta.com> Content Type: application/sdp Content Length: 142 Przykład c.d.
Przykład c.d. SIP/2.0 200 OK Via: SIP/2.0/UDP server10.biloxi.com ;branch=z9hg4bknashds8;received=192.0.2.3 Via: SIP/2.0/UDP bigbox3.site3.atlanta.com ;branch=z9hg4bk77ef4c2312983.1;received=192.0.2.2 Via: SIP/2.0/UDP pc33.atlanta.com ;branch=z9hg4bk776asdhds ;received=192.0.2.1 To: Bob <sip:bob@biloxi.com>;tag=a6c85cf From: Alice <sip:alice@atlanta.com>;tag=1928301774 Call ID: a84b4c76e66710@pc33.atlanta.com CSeq: 314159 INVITE Contact: <sip:bob@192.0.2.4> Content Type: application/sdp Content Length: 131
Dodatkowe nagłówki Nagłówki wykorzystywane w IMS: Record route Contact
Negocjowanie nagłówka "Supported","Require, Proxy Require,"Allow"
Negocjowanie: przykład A >B: INVITE sip:jtoto@example.com SIP/2.0 Via: SIP/2.0/UDP bigmachine.example.com Supported: foo From: sip:jdrosen@example.com;tag=78a669 To: sip:jtoto@example.com Call ID: 70710@bigmachine.example.com Contact: sip:jdrosen@bigmachine.example.com CSeq: 1 INVITE Subject: Venture Capital
Negocjowanie: przykład c.d. B >A: SIP/2.0 300 Moved Via: SIP/2.0/UDP bigmachine.example.com Require: foo From: sip:jdrosen@example.com;tag=78a669 To: sip:jtoto@example.com;tag=443322 Call ID: 70710@bigmachine.example.com Contact: sip:jtoto@university.edu CSeq: 1 INVITE Foo: 9998h7asdh9
Negocjowanie: przykład c.d. A >B: ACK sip:jtoto@example.com SIP/2.0 Via: SIP/2.0/UDP bigmachine.example.com From: sip:jdrosen@example.com;tag=78a669 To: sip:jtoto@example.com;tag=443322 Call ID: 70710@bigmachine.example.com CSeq: 1 ACK
SIP Servlet przetwarza komunikaty SIP różne role proxy registrar redirect najbardziej elastyczny > SIP application server programowalny kontener dla aplikacji SIP często udostępniający też inne modele (web, J2EE/JEE) integracja różnych światów SIP app server wspiera programistę Programowanie na wyższym poziomie abstrakcji Zajmuje się złożonymi aspektami (transakcje, security,...) Skalowalność, niezawodność, wysoka dostępność,... Zarządzanie Możliwość integracji z innymi systemami/technologiami
Miejsce SIP Servlet Dialog Management Layer Transaction Layer Message Parser (Coder/Decoder) Transport Layer Stos SIP Obiekty Request Response Message... Session API Timer API Deployment Listeners (niskopoziomowa sygnalizacja) TCP UDP TLS
Model obiektów SIP Servlet
Klasa SIP Servlet
Klasy SipServletRequest i SipServletResponse
Sesje (2 rodzaje)
Proxy
Bibliografia RFC 3261 http://jdn.pl/node/1642 http://www.oracle.com/technology/pub/articles/dev2 http://www.oracle.com/technology/pub/articles/dev2 http://www.oracle.com/technology/pub/articles/d ev2arch/2006/12/sip programming model.html