You are on page 1of 72

Introduccin a SIP y OpenSER

Imagine there is no PSTN...

Sal Ibarra Corretg http://www.saghul.net

Un poco de historia

Introduccin a SIP y OpenSER

Conmutacin de circuitos

La telefona tradicional se basaba en conmutacin de circuitos. Desde el comienzo hasta el final de una llamada se estableca un camino fsico.

Consumo de recursos. 0% escalable. Cambio a estructura en estrella.

Inicialmente -> redes totalmente malladas


Introduccin a SIP y OpenSER

Conmutacin de circuitos (2)

Introduccin a SIP y OpenSER

Conmutacin de circuitos (3)

I own you...

Introduccin a SIP y OpenSER

Conmutacin de circuitos (4)


Al principio, telefona 100% analgica. Gestin del crecimiento


Analgico: FDM Digital: TDM

Posteriormente los switches se sustituyeron por switches digitales. Digital vs. Analgico

Digital es ms barato. Digital tiene mejor calidad. Analgico ms rpido (switching). Complejidad de los terminales digitales.

Solucin: terminales analgicos y red troncal digital.

Introduccin a SIP y OpenSER

Sealizacin

Necesidad de comunicacin entre distintos sistemas. Ligado a la evolucin de centrales/terminales de usuario Sealizacin analgica

Inband Access signalling (del terminal a la central)

Sealizacin digital

Ex. DTMF CAS (sealizacin asociada al canal) CCS (sealizacin por canal comn)

Trunk signalling (entre centrales)


Introduccin a SIP y OpenSER

Sealizacin (2)

Actualmente se usa SS7 (CCS)

Sealizacin asociada al circuito

Relativa a la llamada Consulta de tablas de enrutado Desvos de llamada...

Sealizacin no asociada al circuito

Servicios suplementarios

Paradigma de SS7

La inteligencia reside en la red (terminales 'tontos') El acceso a la red determina los servicios disponibles

Introduccin a SIP y OpenSER

Conmutacin de paquetes

En conmutacin de circuitos raramente se utilizaba todo el ancho de banda disponible. TDM ineficiente gestionando el uso de la red. El contenido del paquete determina la ruta.

Introduccin a SIP y OpenSER

Conmutacin de paquetes VS. Conmutacin de circuitos

C. de circuitos

Ms rpida No se examina el contenido de los paquetes Mejor gestin de recursos Precio

C. de paquetes

Introduccin a SIP y OpenSER

El paradigma IP

Su NICO propsito es proporcionar conectividad. La red es independiente de la tecnologa subyacente. Las aplicaciones pueden utilizar una infraestructura comn IP.

Aplicaciones Conectividad IP Ethernet | ATM | ...

Introduccin a SIP y OpenSER

El paradigma IP (2)

Protocolos de extremo a extremo


IP solo 'lleva' cosas La INTELIGENCIA esta en los extremos

Internet es idiota :)

Justo lo contrario que en la telefona tradicional...

Arquitectura de Conferencias Multimedia en Internet

Introduccin a SIP y OpenSER

Arquitectura de Conferencias Multimedia en Internet

Introduccin a SIP y OpenSER

RTP y RTCP

Protocolo de transporte en Tiempo Real. Requerimiento de aplicaciones con retardo ~ 0. Internet es un medio hostil

Latencias Jitter Timestamps Nmeros de secuencia

Para solucionarlo:

Si tenemos varios streams de audio/vdeo, es necesaria la sincronizacin

RTCP

Asocia los tiemstamps con un RealTime Clock

Introduccin a SIP y OpenSER

SAP

Session Announcement Protocol Sirve para 'anunciar' una sesin multimedia


Hoy a las 8, pelcula de noseke... Como la revista de la TV

No se encarga de describir la sesin, para eso SDP

Introduccin a SIP y OpenSER

SDP

Session Description Protocol Contiene toda la informacin que un usuario puede necesitar para unirse a una sesin multimedia. Ofrece la siguiente informacin

IP para conectarse a la sesin Codecs soportados Informacin descriptiva ...

SIP: Session Initiation Protocol

Introduccin a SIP y OpenSER

Recapitulando...

Hasta ahora sabemos hacer 2 cosas


Anunciar una sesin multimedia Describirla Hay que INVITARLE a inicial una sesin

Pero... como indicamos a alguien que se una?

SIP: Session Initiation Protocol

Introduccin a SIP y OpenSER

Origen

Para cubrir la carencia de no poder iniciar una sesin multimedia con alguien, surgi SIP. Estndar de la IETF, recogido en el RFC3261 (SIPv2) 'Merge' entre

SIPv1 (Session Invitation Protocol) SCIP (Simple Conference Invitation Protocol)

Introduccin a SIP y OpenSER

Funcionalidades

SIP proporciona un mecanismo para iniciar, modificar y finalizar una sesin. Independiente del tipo de sesin multimedia y de su descripcin.

Podemos invitar a alguien a una partida online de mus mediante SIP, utilizando MGDP (Mus Game Description Protocol) para describir la sesin. XD Necesidad de conocer su localizacin. SIP URLs: identificar a usuario SIP. sip:saghul@irontec.com Los usuarios registran su ubicacin en el servidor.

Movilidad del usuario


Introduccin a SIP y OpenSER

Entidades SIP

User-Agent: entidad con la que interacta el usuario.


Telfono SIP Softphone

Servidor Proxy: servidor que gestiona las invitaciones a las sesiones

Sabe donde esta el usuario destino, as que le enruta el mensaje.

Registrar: servidor que acepta peticiones de registro, y guarda la ubicacin del usuario. Location Server: no es una entidad SIP, pero es necesario para localizar al usuario. Normalmente los 3 anteriores son el mismo software.

Introduccin a SIP y OpenSER

Porqu SIP mola

Diferencia entre el establecimiento y la descripcin de la sesin

Extensible Un usuario ES DUEO DE SU SESIN Paradigma IP vs. Paradigma SS7 El 'core' es relativamente sencillo: 6 mtodos Funcionalidades adicionales mediante extensiones La inteligencia esta en los extremos La red guarda muy pocos datos del estado

Protocolo de extremo a extremo


Favorece la interoperabilidad

Es escalable

Funcionamiento de SIP

Introduccin a SIP y OpenSER

Mtodos SIP

INVITE

Invita a un usuario a una sesin multimedia Modifica una sesin multimedia existente Proporciona un 3-way-handshake en el INVITE, sirve para confirmar la recepcin de una respuesta final a un INVITE Cancela una transaccin en curso Se utilizan para abandonar una sesin Sirven para informar al servidor de la ubicacin del usuario Nos permite consultar qu mtodos soporta un usuario.

ACK

CANCEL

BYE

REGISTER

OPTIONS

Introduccin a SIP y OpenSER

Transacciones Cliente-Servidor

Un cliente GENERA peticiones. Un servidor RECIBE peticiones. El UA que genera peticiones se conoce como UAC: User Agent Client. El UA que responde a las peticiones se conoce como UAS: User Agent Server. Una peticin, junto con las respuestas que genera, es una TRANSACCIN.

Introduccin a SIP y OpenSER

Respuestas SIP

100 199: provisional e informativa 200 299: afirmativa 300 399: redireccin 400 499: error del cliente 500 599: error del servidor 600 699: fallo global

Las respuestas incluyen un mensaje descriptivo, pero lo importante es el cdigo numrico.

Introduccin a SIP y OpenSER

Alice

Bob

INVITE

INVITE 180 Ringing 200 OK

Introduccin a SIP y OpenSER

Alice

Bob

ACK

INVITE 180 Ringing 200 OK ACK Conversacin

Introduccin a SIP y OpenSER

ACK (2)

INVITE es el nico mtodo que utiliza 3 way handshake. El resto de mensajes esperan una respuesta veloz, pero en el caso del INVITE, esta puede tardar. El UAC manda al UAS un ACK, indicando que ha recibido su respuesta. Aseguramos el correcto establecimiento de la sesin sobre un medio no fiable: UDP

Introduccin a SIP y OpenSER

Alice

Bob

CANCEL

INVITE 180 Ringing CANCEL 200 OK 487 Transaction Cancelled ACK

Introduccin a SIP y OpenSER

Alice

Bob

BYE

INVITE 180 Ringing 200 OK ACK Conversacin BYE 200 OK

Introduccin a SIP y OpenSER

Alice

REGISTER Servidor SIP

REGISTER 401 Unauthorized REGISTER 200 OK

Introduccin a SIP y OpenSER

Alice

Bob

OPTIONS

OPTIONS 200 OK

Introduccin a SIP y OpenSER

From

Cabeceras SIP

Identifica al que origina una peticin. Representa una relacin entre 2 dispositivos SIP, relacionando un INVITE y todas las transacciones asociadas. Incluye una SIP URL, indicando donde se puede contactar con el usuario. Identifica al receptor de una peticin. Contiene todos los proxys que han gestionado una peticin. Hace que las respuestas sigan el mismo camino que las peticiones

Call-ID

Contact

To

Va

Introduccin a SIP y OpenSER

Ejemplo de INVITE
INVITE sip:bob@biloxi.example.com SIP/2.0 Via: SIP/2.0/TCP client.atlanta.example.com:5060;branch=z9hG4bK74bf9 Max-Forwards: 70 From: Alice <sip:alice@atlanta.example.com>;tag=9fxced76sl To: Bob <sip:bob@biloxi.example.com> Call-ID: 3848276298220188511@atlanta.example.com CSeq: 1 INVITE Contact: <sip:alice@client.atlanta.example.com;transport=tcp> Content-Type: application/sdp Content-Length: 151

Introduccin a SIP y OpenSER

SIP/2.0 180 Ringing ;received=192.0.2.101

Ejemplo de INVITE (2)

Via: SIP/2.0/TCP client.atlanta.example.com:5060;branch=z9hG4bK74bf9 From: Alice <sip:alice@atlanta.example.com>;tag=9fxced76sl To: Bob <sip:bob@biloxi.example.com>;tag=8321234356 Call-ID: 3848276298220188511@atlanta.example.com CSeq: 1 INVITE Contact: <sip:bob@client.biloxi.example.com;transport=tcp> Content-Length: 0 SIP/2.0 200 OK Via: SIP/2.0/TCP client.atlanta.example.com:5060;branch=z9hG4bK74bf9 ;received=192.0.2.101 From: Alice <sip:alice@atlanta.example.com>;tag=9fxced76sl To: Bob <sip:bob@biloxi.example.com>;tag=8321234356 Call-ID: 3848276298220188511@atlanta.example.com CSeq: 1 INVITE Contact: <sip:bob@client.biloxi.example.com;transport=tcp> Content-Type: application/sdp

Introduccin a SIP y OpenSER

Ejemplo de INVITE (3)


ACK sip:bob@client.biloxi.example.com SIP/2.0 Via: SIP/2.0/TCP client.atlanta.example.com:5060;branch=z9hG4bK74bd5 Max-Forwards: 70 From: Alice <sip:alice@atlanta.example.com>;tag=9fxced76sl To: Bob <sip:bob@biloxi.example.com>;tag=8321234356 Call-ID: 3848276298220188511@atlanta.example.com CSeq: 1 ACK Content-Length: 0

Introduccin a SIP y OpenSER

Ejemplo de INVITE (4)


BYE sip:alice@client.atlanta.example.com SIP/2.0 Via: SIP/2.0/TCP client.biloxi.example.com:5060;branch=z9hG4bKnashds7 Max-Forwards: 70 From: Bob <sip:bob@biloxi.example.com>;tag=8321234356 To: Alice <sip:alice@atlanta.example.com>;tag=9fxced76sl Call-ID: 3848276298220188511@atlanta.example.com CSeq: 1 BYE Content-Length: 0 SIP/2.0 200 OK Via: SIP/2.0/TCP client.biloxi.example.com:5060;branch=z9hG4bKnashds7 ;received=192.0.2.201 From: Bob <sip:bob@biloxi.example.com>;tag=8321234356 To: Alice <sip:alice@atlanta.example.com>;tag=9fxced76sl Call-ID: 3848276298220188511@atlanta.example.com CSeq: 1 BYE Content-Length: 0

Introduccin a SIP y OpenSER

NB

Conceptos impostantes: Transaccin y Dilogo

Transaccin

Una peticin + respuesta, SI la respuesta es afirmativa (INVITE + 200 OK) Una peticin + respuesta negativa + ACK (INVITE + 404 Not Found + ACK) Identificado unvocamente por el 'branch' de la cabecera Va. Concepto de 'llamada' Identificado unvocamente por el From tag, To tag y Call-ID.

Dilogo

Introduccin a SIP y OpenSER

Tipos de proxys SIP

Stateful Proxy

Su mbito es la transaccin. No entiende de dilogos, pero s de transacciones. No guardan ningn tipo de estado.

Stateless Proxy

Introduccin a SIP y OpenSER

Alice

Servidor SIP

Routing de mensajes SIP Bob

INVITE 180 Ringing 200 OK ACK Conversacin BYE 200 OK

INVITE 180 Ringing 200 OK

Introduccin a SIP y OpenSER

Routing de mensajes SIP (2)

Despus del 200 OK, Alice ya sabe donde esta Bob (Contact) Las transacciones siguientes (ACK y BYE-200 OK) van directamente de extremo a extremo. Podemos alterar este comportamiento con las cabeceras Record-Route y Route

Si queremos facturar, queremos estar al tanto de la sealizacin...

Introduccin a SIP y OpenSER

Routing de mensajes SIP (3) Servidor SIP

INVITE 180 Ringing 200 OK ACK Conversacin BYE 200 OK

INVITE 180 Ringing 200 OK ACK

BYE 200 OK

Introduccin a SIP y OpenSER

Routing de mensajes SIP (4)

Cada proxy que quiere quedarse 'en medio' aade una cabecera Record-Route al invite que pasa a travs de l. Las cabeceras se mantienen y se envan de vuelta en la respuesta. Las siguientes transacciones se generan con la cabecera Route (en orden inverso que las Reord-Route). En mensaje se enva al proxy que indica su primera cabecera Route y el proxy la elimina.

Extendiendo el RFC3261

Introduccin a SIP y OpenSER

Vista general

Con lo visto hasta ahora, solo podemos hacer y recibir llamadas :-O PEEEERO, SIP se dise para ser extensible, por lo que se le han aadido servicios mediante extensiones al protocolo.

Mensajera Notificaciones Asncronas de Eventos Transferencia de sesiones ...

Introduccin a SIP y OpenSER

Alice

Mensajera Instantnea Bob

INVITE 180 Ringing 200 OK ACK MESSAGE Como mola SIP!! 200 OK

Introduccin a SIP y OpenSER

Alice

Notificaciones Asncronas de Eventos Bob INVITE 484 Busy Here ACK SUBSCRIBE Estado de Bob 200 OK NOTIFY Bob esta ocupado 200 OK NOTIFY Bob esta disponible 200 OK INVITE

Introduccin a SIP y OpenSER

Transferencia de sesiones

OpenSER

Introduccin a SIP y OpenSER

Historia

OpenSER es un fork de SER (SIP Express Router) SER fue creado en el FhG FOKUS de Berlin y liberado en 2002 En 2005, 2 de sus principales desarrolladores (DanielConstantine Mierla y Bogdan-Andrei Iancu) decidieron crear el fork OpenSER, ya que haba distintos puntos de vista en distintos aspectos de la gestin del proyecto Volvieron a su pas natal (Rumana) y fundaron VoiceSystem El desarrollo de OpenSER creci muy rpidamente

El primer servidor SIP Open Source con soporte para SIP sobre TLS (28 de octubre de 2005)

Introduccin a SIP y OpenSER

SER vs OpenSER

OpenSER est siendo desarrollado ms activamente En realidad, a efectos de configuracin, son MUY parecidos OpenSER dispone de una muy buena documentacin La comunidad de OpenSER es muy grande y muy activa

Introduccin a SIP y OpenSER

Qu es OpenSER?

OpenSER es un Stateful Proxy (transaction stateful, dialog stateless*) Qu tiene que hacer?

Validar una peticin Preprocesar la informacin de enrutado. Determinar el receptor de la peticin Encaminar la peticin hacia su destino Procesar las respuestas

Introduccin a SIP y OpenSER

Que NO es OpenSER?

OpenSER NO es un Asterisk moln. OpenSER no procesa audio. OpenSER es un SIP Proxy/Registrar/Location Server, NO un B2BUA B2BUA

Back 2 Back User Agent Acta como UAC por un lado, y como UAS por el otro Mantiene estado de las llamadas Ofrece servicios al usuario (buzn de voz, ...) Gestiona el media (traduccin de codecs, ...) P.e. Asterisk

1 llamada = 2 dilogos SIP (Asterisk hace un bridge)

Configuracin de OpenSER

Introduccin a SIP y OpenSER

Estructura de openser.cfg
# ----------- global configuration parameters -----------------------debug=3 fork=yes log_stderror=no children=4 port=5060 # ------------------ module loading ---------------------------------#set module path mpath="//lib/openser/modules/" loadmodule "sl.so" loadmodule "tm.so" loadmodule "rr.so" loadmodule "maxfwd.so" loadmodule "usrloc.so" loadmodule "registrar.so" loadmodule "textops.so" # (cmd line: -E) # debug level (cmd line: -dddddddddd)

Parmetros globales de configuracin

Carga de mdulos

Introduccin a SIP y OpenSER

# ----------------- setting module-specific parameters --------------modparam("usrloc", "db_mode", 0) # ------------------------- request routing logic ------------------# main routing logic route{ ... } route[1] { ... t_relay(); } onreply_route[1] { ... } failure_route[1] { ...

Estructura de openser.cfg (2)

Introduccin a SIP y OpenSER

Diseando la lgica

OpenSER es nuestra 'caja de herramientas' Tenemos que pensar QU queremos hacer con nuestro proxy

Introduccin a SIP y OpenSER

Ejemplo 1

OpenSER trabajando como stateful proxy No hay almacenamiento persistente de usuarios Funcionamiento

Guarda la localizacin de los usuarios en memoria Simplemente enruta los mensajes

Introduccin a SIP y OpenSER

Contextos de enrutado

Transaccin

Si enrutamos con t_relay() estamos en stateful mode Podemos gestionar las respuestas en onreply_route[] y failure_route[] Si no insertamos una cabecera Record-Route no 'vemos' las siguientes peticiones (gracias a la cabecera Contact han 'aprendido' donde esta cada uno) Con la funcin loose_route enrutamos las peticiones que contengan un conjunto de rutas (cabeceras Route)

Dilogo

Hay que ser ms severos: tiene To tag?

Introduccin a SIP y OpenSER

Ejemplo 1.1

Enrutado stateless

Por donde pasan las respuestas? Donde estn las respuestas?

Enruntado stateless SIN Record-Route

Introduccin a SIP y OpenSER

Ejemplo 2

Autenticacin de REGISTER Usuarios en MySQL Fichero openserctlrc Funciones check_to y check_from Gestin de CANCEL Mltiples dominios

Introduccin a SIP y OpenSER

Ejemplo 3

Conexin con Asterisk Media Server

Va a ser nuestro PSTN gateway

ACLs

Introduccin a SIP y OpenSER

Ejemplo 4

Desvos de llamada Voicemail Pseudo variables AVPs

Introduccin a SIP y OpenSER

Uso de openserctl

Aadir un usuario:

openserctl add 200 1234 saghul@gmail.com openserctl online acl show <usuario> acl grant <usuario> <grupo> acl revoke <usuario> [<grupo>]

Consultar usuarios online

Gestin de ACLs

Introduccin a SIP y OpenSER

Gestin del NAT


OpenSER solo gestiona sealizacin. Con OpenSER es posible implementar soluciones al NAT far-end

Detectamos que un usuario esta detrs de NAT Modificamos sus mensajes para 'evitarlo' Uso de Media Proxys

RTPProxy MediaProxy

Introduccin a SIP y OpenSER

Conclusiones

SIP es un protocolo sencillo en su forma pero MUY complicado en su funcionamiento Tendencia hacia estndares abiertos, interoperabilidad Aunque su aplicacin principal es la VoIP, SIP tiene un futuro prometedor Es necesario conocer SIP a fondo para una buena instalacin de OpenSER

Al gestionar el protocolo a tan bajo nivel, tenemos todo el control.

Introduccin a SIP y OpenSER

Consejos... o algo as

Ngrep es tu nuevo muy mejor amigo

ngrep -d any -P ' ' -W byline -T port 5060 Seriously!

Disponer de un entorno de pruebas adecuado

No pienses que estas loco por leer RFCs NO uses el generador de configuraciones de SIPWise

Es preferible empezar desde abajo e ir complicndolo cada vez ms Aunque creas que puedes, no hagas que OpenSER haga cosas que no le corresponden.

Recuerda que OpenSER es un proxy SIP

Introduccin a SIP y OpenSER

Referencias y lecturas recomendadas

Building Telephony Systems with OpenSER (Flavio E. Goncalves) SIP Demystified (Gonzalo Camarillo) Lista SIP-ES

http://groups.google.com/group/sip-es/ http://www.openser.org/cgi-bin/mailman/listinfo/users-es http://groups.google.com/group/sip-es/web/rfcs-y-drafts http://www.tech-invite.com/ http://del.icio.us/saghul/sip

Lista OpenSER-ES

Listado de RFCs y Drafts

Ejemplos de SIP con dibujos y dems

Por si se me olvida algo interesante

Introduccin a SIP y OpenSER

Licencia

Creative Commons BY-NC-SA http://creativecommons.org/licenses/by-nc-sa/2.5/es/

Gracias!!

BYE sip:gente@192.168.1.120:23834;rinstance=c1e2af826bf4f26c SIP/2.0. Via: SIP/2.0/UDP 192.168.1.119:14060;branch=z9hG4bK-d87543-c32b1e47453b7c41-1--d87543-;rp Max-Forwards: 70. Route: <sip:192.168.1.104;lr;ftag=333c3224>. Contact: <sip:saghul@192.168.1.119:14060>. To: "userA"<sip:gente@192.168.1.104>;tag=be72f51c. From: "userB"<sip:saghul@192.168.1.104>;tag=333c3224. Call-ID: NTA0YTFmYjFkMmQzY2I1NTdiZDMwZGY4ODJkNzc1NTQ.. CSeq: 2 BYE. Reason: SIP;description="User Hung Up". Content-Length: 0.