Grundlegendes
- Das Session Initiation Protocol (SIP) ist ein Kommunikationsprotokoll, das für die Signalisierung und Kontrolle von Multimedia-Kommunikationssitzungen in Anwendungen wie Sprach- und Videotelefonie verwendet wird.
- Im Falle von verlorenen oder verzögerten Paketen hat SIP eingebaute Mechanismen für Retransmission. Diese Mechanismen sind in RFC 3261, die SIP-Spezifikation, definiert.
Prinzip
- SIP basiert auf dem Request-Response-Modell.
- Es verwendet mehrere verschiedene Nachrichtentypen, einschließlich INVITE, ACK, BYE, CANCEL, OPTIONS und REGISTER. Ein einfacher Aufruffluss könnte so aussehen:
Client Server
| |
|-----INVITE------>|
| |
|<----100 Trying---|
| |
| | (Paket geht verloren, keine Antwort)
| |
|-----INVITE------>| (Retransmission)
| |
|<----200 OK-------|
| |
|-------ACK------->|
- In diesem Flussdiagramm sendet der Client eine INVITE-Nachricht an den Server, um einen Anruf zu initiieren.
- Wenn die endgültige Antwort des Servers verloren geht, wiederholt der Client die INVITE-Anfrage.
Es wird solange wiederholt, bis ein Erfolg eintritt
- Die Anfrage wird mehrmals wiederholt, um zu versuchen, eine erfolgreiche Verbindung herzustellen.
- Jede Wiederholung erfolgt nach einer festgelegten Wartezeit, die sich nach jedem fehlgeschlagenen Versuch verdoppelt:
Client Server
| |
|----INVITE------>| (Versuch 1)
| |
|----INVITE------>| (Versuch 2 nach 500 ms)
| |
|----INVITE------>| (Versuch 3 nach 1 s)
| |
|----INVITE------>| (Versuch 4 nach 2 s)
| |
|----INVITE------>| (Versuch 5 nach 4 s)
| |
|----INVITE------>| (Versuch 6 nach 8 s)
| |
|----INVITE------>| (Versuch 7 nach 16 s)
| |
|<---200 OK-------| (Antwort vom Server erreicht den Client)
| |
|------ACK------->|
Oder bis das 32 fache von T1(hier 500ms) erreicht wird
- Wenn keine Antwort vom Server empfangen wird, gibt der Client den Versuch nach einer bestimmten Zeit auf.
- Diese Zeit ist das 32-fache des ursprünglichen Retransmissions-Intervalls (T1), das hier auf 500 ms gesetzt ist:
Client Server
| |
|----INVITE------>| (Versuch 1)
| |
|----INVITE------>| (Versuch 2, T1 = 500 ms)
| |
|----INVITE------>| (Versuch 3, T1*2 = 1 s)
| |
|----INVITE------>| (Versuch 4, T1*2*2 = 2 s)
| |
|----INVITE------>| (Versuch 5, T1*2*2*2 = 4 s)
| |
|----INVITE------>| (Versuch 6, T1*2*2*2*2 = 8 s)
| |
|----INVITE------>| (Versuch 7, T1*2*2*2*2*2 = 16 s)
| |
|----INVITE------>| (Versuch 8, T1*2*2*2*2*2*2 = 32 s)
| |
| (Client gibt auf, da keine Antwort vom Server erhalten wurde) |