**Session Initiation Protocol** (en galego, **Protocolo de Inicio de Sesións**) é un protocolo desenvolvido polo IETF MMUSIC Working Group coa intención de ser o estándar para a iniciación, modificación e finalización de sesións interactivas de usuario onde interveñen elementos multimedia como o vídeo, voz, mensaxería instantánea, xogos online e realidade virtual. SIP é un dos protocolos de sinalización para voz sobre IP, acompañado por H.323 e IAX2.

SIP é como HTTP, o protocolo de Web. As mensaxes constan de encabezados e un corpo de mensaxe. Os corpos de mensaxe de SIP para as chamadas telefónicas defínense en SDP. É un protocolo baseado en texto que utiliza a codificación Utf-8.

Elementos Funcionais
--------------------

Dende o punto de vista do equipamento, a arquitectura SIP supón a existencia de dous tipos de equipos: terminais e servidores de rede. Os terminais son os equipos finais que empregan os usuarios, namentres que os servidores de rede son equipos intermedios que engaden funcionalidade as redes SIP.

### Terminais

Os equipos terminais dispoñen de dous compoñentes fundamentais:

* **Axente de usuario cliente**, ou UAC (*User Agent Client*). Trátase da aplicación que permite que o terminal puída realizar ou iniciar unha chamada. O UAC utilizase para enviar solicitudes SIP.
* **Axente de usuario servidor**, ou UAS (*User Agent Server*). Trátase da aplicación que permite que o terminal puída recibir ou responder a unha chamada realizada polo UAC. O UAS recibe solicitudes SIP e devolve as respostas correspondentes en nome do usuario. Estas respostas poden ser de aceptación, rexeitamento ou redirección da solicitude.

Os axentes de usuario danlle unha funcionalidade completa ao terminal, de forma que poden utilizarse sen a intervención dos servidores de rede. Por outra beira, podería haber terminais que conteñan só un dos axentes de usuario. Neste caso, o terminal utilizaríase exclusivamente para escoitar ou para transmitir.

|  |  |
| --- | --- |
| **Peticións SIP** | **Respostas SIP** |
| **INVITE**, *mensaxe de invitación a iniciar unha sesión enviado polo chamante.* | **1xx**, *mensaxe de información: tentándoo ou teléfono soando* |
| **ACK**, *Asentimento do chamante ante a aceptación da chamada no destino* | **2xx**, *éxito ou OK* |
| **BYE**, *Sinal de fin da sesión por parte dun dos terminais* | **3xx**, *mensaxe de desvío da chamada* |
| **CANCEL**, *cancela unha invitación de inicio de sesión pendente* | **4xx**, *erro na petición* |
| **REGISTER**, *para proporcionar ao sistema a dirección de contacto dese usuario*  | **5xx**, *erro no servidor* |
| **OPTIONS**, *consulta as características de soporte dun terminal: codecs etc* | **6xx**, *erro xeral* |
| **INFO**, *contén información fora de banda, coma díxitos DTMF* |  |

### Servidores SIP

Aínda que os servidores de rede poderían estar fisicamente localizados en equipos distintos, adoita ser normal que un mesmo equipo teña a funcionalidade de varios tipos de servidores, especialmente a combinación do servidor de rexistro con calquera dos anteriores.

#### Servidor de Rexistro

O Servidor de rexistro (*Registrar Server*), mantén un rexistro do enderezo SIP dun usuario e do seu enderezo IP correspondente. Isto permite ter localizado a un usuario en todo momento. Por exemplo, se un usuario dispón de distintos dispositivos SIP (ordenador da oficina, PDA, ordenador de casa etc), cando entra (*log-in*) en calquera deles o dispositivo envíalle unha mensaxe ao servidor de rexistro avisándoo do seu novo enderezo IP, co que o servidor xa sabe onde ten que reenviar as chamadas con destino a dito usuario. Este servidor coñécese tamén como servidor de localización (*location server*)

O Servidor de rexistro acepta peticións de rexistro dos UAC (*user agent client*, quen envía solicitudes SIP) e actualiza a información relativa a cada un deles nunha base de datos de localización.

#### Servidor de Relocalización

O servidor de relocalización, proporciona información acerca da localización do usuario. Se un usuario A desexa comunicarse cun usuario S, en primeiro lugar A necesita descubri-la localización actual de S na rede, co fin de que a petición de establecemento de sesión poida chegarlle. Ademais, hai que ter en conta que o usuario S pode estar en diferentes lugares en instantes distintos, incluso ser alcanzable por varios medios simultaneamente (por exemplo, a través dun PC ou dun teléfono convencional).

#### Servidor de Redirección

Os servidores de redirección (*Redirect Server*) non reenvían os mensaxes de solicitude SIP, senón que lle responden ao cliente co enderezo, ou enderezos, do servidor ao que lle teñen que enviar dita solicitude. Neste caso, é o cliente o que contacta directamente co novo servidor. O servidor de redirección non contacta con outros servidores nin acepta chamadas (non ten a funcionalidade de axente de usuario servidor).

A diferenza dos servidores proxy, os servidores de redirección non inician a súa propia petición SIP e tampouco poden aceptar ou terminar chamadas, como ocorre cos UAS (*user agent Server*).

Proxy
-----

O servidor proxy (*proxy server*) é un equipo que recibe solicitudes do cliente, as analiza e decide o servidor ao que debe reenvialas. O Servidor proxy é unha entidade intermedia que actúa como servidor e como cliente, e que realiza peticións de parte doutros clientes. Estas peticións son servidas internamente ou reenviadas cara a outros servidores.

Se é necesario, o proxy pode modifica-lo mensaxe de solicitude antes de reenvía-lo: para o seguinte servidor a mensaxe procede do proxy. Unha solicitude pode atravesar distintos servidores proxy antes de alcanza-lo seu destino. Neste caso, a resposta atravesaría todo o camiño inverso. Como o proxy manexa solicitudes e respostas, necesita dispoñer tanto da funcionalidade de cliente como da de servidor. Por outro lado, os servidores proxy poden manter un rexistro de todas as chamadas en curso ou non (estes modos coñécense como *statefúll* e *stateless*, respectivamente). No caso de que o proxy non manteña rexistro da chamada, limitarase a reenviar a solicitude. O rexistro de chamadas é necesario para poder ofrecer determinados servizos de valor engadido, ou incluso para determinadas aplicacións de xestión.

Cando un usuario ou terminal SIP desexa establecer unha comunicación con outro, envía unha mensaxe ó seu servidor Proxy para coñecer o enderezo físico que ten nese momento o destinatario da comunicación. Nesta fase, o chamante indicará ao servidor Proxy o enderezo lóxico do usuario chamado (por exemplo o seu enderezo de correo electrónico) e con ela o servidor Proxy escalará a consulta ao *servidor Location*, quen resolverá a localización física do usuario chamado.

Funcionamento do VoIP nunha rede co protocolo SIP
-------------------------------------------------

SIP é un protocolo punto a punto, tamén chamado p2p. Como tal require un núcleo de rede sinxelo (e altamente escalable) con intelixencia distribuída nos extremos da rede, incluída nos terminais (xa sexa mediante hardware ou software). Moitas características de SIP son implementadas nos terminais en oposición ás tradicionais características de SS7, que son implementadas na rede.

SIP funciona en colaboración con outros moitos protocolos, pero só intervén na parte de sinalización ao establecer a sesión de comunicación. SIP actúa como envoltura ao SDP, que describe o contido multimedia da sesión, por exemplo, que porto IP e códec se usarán durante a comunicación etc. SIP é usado simplemente para iniciar e terminar chamadas de voz e vídeo. Todas as comunicacións de voz/vídeo van sobre RTP. Nun uso normal, as sesións SIP son simplemente fluxos de paquetes de RTP. RTP é o verdadeiro portador para o contido de voz e vídeo. Os clientes SIP usan o porto 5060 en TCP e UDP para conectar cos servidores SIP.

SIP implementa unha comunicación en tres pasos:

* o que chama envía un *INVITE*, namentres non reciba o sinal de que o teléfono está soando recibe do proxy SIP mais próximo un *100 Tentandoo*.
* o que recibe a chamada envíalle un *180 soando* ata que alguén descolga. Nese momento envía un *200 OK* para aceptar a chamada.
* o que chama envía un *ACK* para confirmar o *200 OK* e establecer a chamada.

Agora os terminais envíanse paquetes RTP ata que un deles decide pechar a comunicación:

* O que decide colgar envía un *BYE* cara ao outro.
* Ao recibir o *BYE*, contesta cun *200 OK* para confirma-lo fin, pechándose a chamada.

É importante destacar que, nos pasos anteriores, os servidores proxy SIP só interveñen na fase de establecemento da chamada. Unha vez iniciada a chamada, os paquetes envíanse directamente cara ao outro terminal sen intervención dos proxies. Tamén existe a variante na que o circuíto virtual durante toda a comunicación pasa polos proxies, de xeito que é posible controlar o fluxo de información e poder facturar o seu custo.

Véxase tamén
------------

### Ligazóns externas

* Ligazóns sobre SIP no Open Directory Project *(en inglés)*
* RFC 3261 *(en inglés)*

|  |  |
| --- | --- |
| Control de autoridades | 
* Wd: Q191018
* LCCN: sh2008009773
* MAG: 41878487

 |