SIP Basics

Hallo zusammen,

Ich habe mich mal ein bisschen mit dem SIP Protokoll auseinandergesetzt. Hier eine Zusammenfassung meiner Erkenntnisse.

SIP Steht für Session Initiation Protokoll und ist im RFC2161 definiert.

SIP Adressen sind ähnlich wie Emailadressen aufgebaut:

  • sip:user@domain.tld
  • sips:user@domain.tld
  • tel:+41xxxxxxxxx oder sip:+41xxxxxxxxx@domain.tld

Bei SIP gibt es verschiedene Komponenten

 

Komponente Beschreibung
Client Der Client besteht eigentlich aus zwei Komponenten, dem User Agent Client (UAC) und dem User Agent Server (UAS)
Registrar Server Der Registrar Server akzeptiert REGISTER Requests von Clients und speichert diese Informationen. Er bietet einen Location und Translation Service an.
Location Server Speichert die Adressen welche im Registrar Server registriert werden.
Proxy Server Funktioniert ähnlich wie ein HTTP Proxy. Es gibt zwei Typen dieser Proxys und zwar Stateful Proxy oder Stateless Proxy.
Redirect Server Dieser Server übergibt dem Client Redirect Messages oder Routet den Request an einen anderen Server weiter.

Kommunikation zwischen zwei Clients

Client und Registrar Server

Client und Proxy

Client und Redirect Server

SIP Methoden http://en.wikipedia.org/wiki/List_of_SIP_request_methods

 

Methode Beschreibung RFC
INVITE Einladung zu einer Call Session RFC 3261
ACK Bestätigung RFC 3261
BYE Beendet eine Call Session RFC 3261
CANCEL Abrechen aller bestehenden Requests RFC 3261
OPTIONS Abfrage der Möglichkeiten des Servers RFC 3261
REGISTER Registriert einen Client bei einem SIP Server (Registrar) RFC 3261
PRACK Provisorische Bestätigung RFC 3262
SUBSCRIBE Abonnieren eines Events RFC 3265
NOTIFY Mitteilen eines Events an einen Subscriber RFC 3265
PUBLISH Publiziert ein Event an den Server RFC 3903
INFO Informationen an den Server senden ohne den Session State zu verändern RFC 6086
REFER Vermittlungsanfrage (Call Transfer) RFC 3515
MESSAGE Instant Message (Chat) RFC 3428
UPDATE Verändert den Session State ohne den Dialog State zu verändern RFC 3311

SIP Status codes http://de.wikipedia.org/wiki/SIP-Status-Codes

 

Status Code Beschreibung
1xx Provisorisch - Request erhalten, verarbeiten des Requests
2xx Erfolg - Die Aktion war erfolgreich
3xx Redirection - Weitere Aktion des Client nötig
4xx Client Error - Der Request enthält eine falsche Syntax oder kann nicht erfüllt werden
5xx Server Error - Der Server kann die Anfrage nicht ausführen
6xx Global Failure - Der Request kann nicht ausgeführt werden

Lync REGISTER

Auf dem Lync Server mache ich ein SIP Trace. Wie man bei Lync den Snooper einsetzt habe ich schon im folgenden Blog Artikel http://blog.icewolf.ch/archive/2011/04/23/troubleshoot-lync-server.aspx erklärt

Schauen wir und das doch mal was passiert wenn sich ein Lync Client beim Lync Server Registriert.

Man sieht die vier "REGISTER sip:icewolf.ch" anfragen. Erst bei der vierten Anfrage wird ein "200 OK" zurückgegeben.

1. Register Anfrage ohne Authorisation

TL_INFO(TF_PROTOCOL) [0]139C.1770::11/15/2012-23:47:22.467.00003925 (SIPStack,SIPAdminLog::TraceProtocolRecord:SIPAdminLog.cpp(125))$$begin_record
Trace-Correlation-Id: 4027926292
Instance-Id: 00000AAC
Direction: incoming
Peer: 172.21.175.204:49745
Message-Type: request
Start-Line: REGISTER sip:icewolf.ch SIP/2.0
From: <sip:a.bohren@icewolf.ch>;tag=c14ce80077;epid=4ce2daba48
To: <sip:a.bohren@icewolf.ch>
CSeq: 1 REGISTER
Call-ID: 389ddeb47b394f849198c5be12306bb9
Via: SIP/2.0/TLS 172.21.175.204:49745
Max-Forwards: 70
Contact: <sip:172.21.175.204:49745;transport=tls;ms-opaque=83634d618b>;methods="INVITE, MESSAGE, INFO, OPTIONS, BYE, CANCEL, NOTIFY, ACK, REFER, BENOTIFY";proxy=replace;+sip.instance="<urn:uuid:598BDDAF-2296-5223-8EC1-65FC63DDAB36>"
User-Agent: UCCAPI/4.0.7577.4356 OC/4.0.7577.4356 (Microsoft Lync 2010)
Supported: gruu-10, adhoclist, msrtc-event-categories
Supported: ms-forking
Supported: ms-cluster-failover
Supported: ms-userservices-state-notification
ms-keep-alive: UAC;hop-hop=yes
Event: registration
Content-Length: 0
Message-Body: –
$$end_record

2. Register Anfrage mit Authorisation
Authorization: TLS-DSK qop="auth", realm="SIP Communications Service", targetname="ICESRV06.corp.icewolf.ch", gssapi-data="" version=4

3. Register Anfrage mit Authorisation
Authorization: TLS-DSK qop="auth", realm="SIP Communications Service", targetname="ICESRV06.corp.icewolf.ch", gssapi-data="" opaque="6911BC37", version=4

4. Register Anfrage mit Authorisation
Proxy-Authorization: TLS-DSK qop="auth", realm="SIP Communications Service", opaque="6911BC37", targetname="ICESRV06.corp.icewolf.ch", crand="9dccf9c2", cnum="1", response="9c55c281538a997a84cb3f886b6d1fa46d35d5e2"

LYNC INVITE

Nun schauen wir uns mal einen INVITE Request an. Der Benutzer "sip:a.bohren@icewolf.ch" lädt den Benutzer "sip:boa@icewolf.ch" zu einem Instant Message Chat ein.

Man sieht den den Invite Request und die Status Codes (100 Trying) bis der Anruf entgegengenommen wurde.

TL_INFO(TF_PROTOCOL) [0]139C.1770::11/15/2012-23:47:34.339.0001e2b3 (SIPStack,SIPAdminLog::TraceProtocolRecord:SIPAdminLog.cpp(125))$$begin_record
Trace-Correlation-Id: 1130765770
Instance-Id: 00000AF4
Direction: incoming
Peer: 172.21.175.204:49745
Message-Type: request
Start-Line: INVITE sip:boa@icewolf.ch SIP/2.0
From: <sip:a.bohren@icewolf.ch>;tag=b648746a90;epid=4ce2daba48
To: <sip:boa@icewolf.ch>
CSeq: 1 INVITE
Call-ID: 0c978a3fe8214c9a90013d9eda123847
Via: SIP/2.0/TLS 172.21.175.204:49745
Max-Forwards: 70
Contact: <sip:a.bohren@icewolf.ch;opaque=user:epid:r92LWZYiI1KOwWX8Y92rNgAA;gruu>
User-Agent: UCCAPI/4.0.7577.4356 OC/4.0.7577.4356 (Microsoft Lync 2010)
Supported: ms-dialog-route-set-update
Ms-Text-Format: text/plain; charset=UTF-8;msgr=WAAtAE0ATQBTAC0ASQBNAC0ARgBvAHIAbQBhAHQAOgAgAEYATgA9AFMAZQBnAG8AZQAlADIAMABVAEkAOwAgAEUARgA9ADsAIABDAE8APQAwADsAIABDAFMAPQAwADsAIABQAEYAPQAwAAoADQAKAA0A;
Ms-IM-Format: text/html; charset=UTF-8; ms-body=PERJViBzdHlsZT0iZm9udC1zaXplOiAxMHB0O2ZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknO2NvbG9yOiAjMDAwMDAwO2RpcmVjdGlvbjogbHRyO2ZvbnQtd2VpZ2h0OiBub3JtYWw7Zm9udC1zdHlsZTogbm9ybWFsO3RleHQtZGVjb3JhdGlvbjogbm9uZSI+SGkgQm9hPC9ESVY+
Ms-IM-Format: text/rtf; charset=UTF-8; ms-body=e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbWh0bWwxIFxmYmlkaXMgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZzd2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFyc2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9DQp7XGY0XGZzd2lzcyBTZWdvZSBVSTt9fQ0Ke1xjb2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTtccmVkMFxncmVlbjBcYmx1ZTA7fQ0KXHVjMVxwYXJkXHBsYWluXGRlZnRhYjM2MCBcZjBcZnMyNCANCntcKlxodG1sdGFnMCBccGFyIH0NCntcKlxodG1sdGFnNDggPEJPRFk+fXtcKlxodG1sdGFnNjR9XGh0bWxydGYge1xodG1scnRmMCANCntcKlxodG1sdGFnMTQ4IDxGT05UIGNvbG9yPSMwMDAwMDAgc2l6ZT0yIGZhY2U9IlNlZ29lIFVJIj59XGh0bWxydGYge1xjZjIgXGZzMjAgXGY0IFxodG1scnRmMCANCntcKlxodG1sdGFnNCBccGFyIH1caHRtbHJ0ZiB9XGh0bWxydGYwIHtcKlxodG1sdGFnNzJ9XGh0bWxydGZ9XGh0bWxydGYwDQoNCntcKlxodG1sdGFnOTYgPERJViBkaXI9bHRyPn1caHRtbHJ0ZiB7XGx0cnBhclxsdHJjaFxxbCBcaHRtbHJ0ZjAge1wqXGh0bWx0YWc2NH1caHRtbHJ0ZiB7XGh0bWxydGYwIFxodG1scnRmIHtcY2YyIFxmczIwIFxmNCBcaHRtbHJ0ZjAgSGkgQm9hXGh0bWxydGYgfVxodG1scnRmMCB7XCpcaHRtbHRhZzcyfVxodG1scnRmXHBhcn1caHRtbHJ0ZjANCg0Ke1wqXGh0bWx0YWcxMDQgPC9ESVY+fVxodG1scnRmIH1caHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzI0OCA8L0ZPTlQ+fQ0Ke1wqXGh0bWx0YWc1OCA8L0JPRFk+fX0=
Supported: ms-embedded-first-message
Supported: ms-delayed-accept
Supported: ms-renders-isf
Supported: ms-renders-gif
Supported: ms-renders-mime-alternative
Ms-Conversation-ID: Ac3Di5ZjJUQaEDMSTZOTniKMVM+wQA==
Supported: timer
Supported: histinfo
Supported: ms-safe-transfer
Supported: ms-sender
Supported: ms-early-media
Roster-Manager: sip:a.bohren@icewolf.ch
EndPoints: <sip:a.bohren@icewolf.ch>, <sip:boa@icewolf.ch>
Supported: com.microsoft.rtc-multiparty
ms-keep-alive: UAC;hop-hop=yes
Allow: INVITE, BYE, ACK, CANCEL, INFO, MESSAGE, UPDATE, REFER, NOTIFY, BENOTIFY
ms-subnet: 172.21.175.0
Supported: ms-conf-invite
Proxy-Authorization: TLS-DSK qop="auth", realm="SIP Communications Service", opaque="6911BC37", targetname="ICESRV06.corp.icewolf.ch", crand="d5dee643", cnum="17", response="49c658ae036e12899ce3b672cc22d624fda1ceef"
Content-Type: application/sdp
Content-Length: 248
Message-Body: v=0
o=- 0 0 IN IP4 172.21.175.204
s=session
c=IN IP4 172.21.175.204
t=0 0
m=message 5060 sip null
a=accept-types:text/plain multipart/alternative image/gif text/rtf text/html application/x-ms-ink application/ms-imdn+xml text/x-
msmsgsinvite
$$end_record

Session Description Protocol (SDP)

Spannend im obigen Request ist der Message Body, der enthält nämlich das Session Description Protocol (SDP, RFC 4566, RFC 2327)

v = Protokoll-Version
o = Ersteller der Session und Session-Identifizierung
s = Name der Session
i = zusätzliche Session-Informationen (optional)
u = URI mit der weiterführender Beschreibung (optional)
e = E-Mail-Adresse (optional)
p = Telefon-Nummer (optional)
c = Verbindungs-Information (wird nicht benötigt, wenn bei allen Medien angegeben, optional)
b = Information über die Bandbreite (optional)
z = Zeitzonen-Anpassungen (optional)
k = Verschlüsselungs-Schlüssel (encryption key) (optional)
a = keine oder mehr Session-Attribute (optional)
t = Zeit, in der die Session aktiv ist
r = keine oder mehr Wiederholungen (optional)
m = Medientyp, Port und Protokoll für den Medientransport sowie die Medienformate
i = Titel des Mediums (optional)
c = Verbindungs-Informationen, optional wenn diese nicht in der Session definiert sind (s. o, optional)
b = keine oder mehr Bandbreiteninformationen (optional)
k = Verschlüsselungs-Schlüssel ("encryption key", optional)
a = keine oder mehr Media-Attribute (optional)

Lync Message (Instant Messaging)

Nun schauen wir uns noch die übertragung einer Nachricht von sip:boa@icewolf.ch an sip:a.bohren@icewolf.ch in Lync an. Den Nachrichteninhalt (also der übermittelte Text) wird nicht angezeigt. Das würde aber auch die Privatsphäre verletzen.

TL_INFO(TF_PROTOCOL) [0]139C.1770::11/15/2012-23:47:47.052.00025416 (SIPStack,SIPAdminLog::TraceProtocolRecord:SIPAdminLog.cpp(125))$$begin_record
Trace-Correlation-Id: 1130765770
Instance-Id: 00000B04
Direction: incoming
Peer: 172.21.175.200:49278
Message-Type: request
Start-Line: MESSAGE sip:a.bohren@icewolf.ch;opaque=user:epid:r92LWZYiI1KOwWX8Y92rNgAA;gruu SIP/2.0
From: "" <sip:boa@icewolf.ch>;epid=e4cf75d760;tag=1034c68cc9
To: "Bohren, Andres"<sip:a.bohren@icewolf.ch>;tag=b648746a90;epid=4ce2daba48
CSeq: 3 MESSAGE
Call-ID: 0c978a3fe8214c9a90013d9eda123847
Via: SIP/2.0/TLS 172.21.175.200:49278
Max-Forwards: 70
Route: <sip:ICESRV06.corp.icewolf.ch:5061;transport=tls;opaque=state:T:F:Ci.R1cf00;lr;ms-route-sig=gamDndL3afTRL-A0_3Medy7vemBO2F8Nwkvv_KtXlp7JeL3PofbL-f2wAA>;tag=1188DEEFDBAF6743B5671B77817EF014
User-Agent: UCCAPI/4.0.7577.4356 OC/4.0.7577.4356 (Microsoft Lync 2010)
Supported: ms-dialog-route-set-update
Supported: timer
Proxy-Authorization: TLS-DSK qop="auth", realm="SIP Communications Service", opaque="10ED3377", targetname="ICESRV06.corp.icewolf.ch", crand="c71159db", cnum="17", response="47f50faaf6d36232ef7d0a92f07f8e42ae97aa21"
Content-Type: text/html
Content-Length: 159
Message-Body: ----****MESSAGE BODY DELETED****----
$$end_record

Lync BYE

Nun wird die Konversation von sip:a.bohren@icewolf.ch mit einem BYE Request an sip:boa@icewolf.ch beendet

 TL_INFO(TF_PROTOCOL) [0]139C.1770::11/15/2012-23:48:03.638.0002cad3 (SIPStack,SIPAdminLog::TraceProtocolRecord:SIPAdminLog.cpp(125))$$begin_record
Trace-Correlation-Id: 1130765770
Instance-Id: 00000B19
Direction: incoming
Peer: 172.21.175.204:49745
Message-Type: request
Start-Line: BYE sip:boa@icewolf.ch;opaque=user:epid:oTOfiTmWJV-ZaVTfQzrj7AAA;gruu SIP/2.0
From: <sip:a.bohren@icewolf.ch>;tag=b648746a90;epid=4ce2daba48
To: <sip:boa@icewolf.ch>;epid=e4cf75d760;tag=1034c68cc9
CSeq: 5 BYE
Call-ID: 0c978a3fe8214c9a90013d9eda123847
Via: SIP/2.0/TLS 172.21.175.204:49745
Max-Forwards: 70
Route: <sip:ICESRV06.corp.icewolf.ch:5061;transport=tls;opaque=state:T:F:Eu:Ci.R1ce00;lr;ms-route-sig=ga-EGtqFm9xrteJDIqkulw6h_9j-cv9LQS54t8cpyk9kGL3PofbL-f2wAA>
User-Agent: UCCAPI/4.0.7577.4356 OC/4.0.7577.4356 (Microsoft Lync 2010)
Ms-client-diagnostics: 51004; reason="Action initiated by user"
Proxy-Authorization: TLS-DSK qop="auth", realm="SIP Communications Service", opaque="6911BC37", targetname="ICESRV06.corp.icewolf.ch", crand="192830be", cnum="28", response="d79cde4006e6daf06a12078b391c88d65d39d7b5"
Content-Length: 0
Message-Body: –
$$end_record

Weitere Informationen

Weitere Protokolle welche bei SIP benutzt werden.

Grüsse
Andres Bohren