SIP Retransmission
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, T1 = 500 ms) | | |----INVITE------>| (Versuch 2, T1*2 = 1 s) | | |----INVITE------>| (Versuch 3, T1*2*2 = 2 s) | | |----INVITE------>| (Versuch 4, T1*2*2*2 = 4 s) | | |----INVITE------>| (Versuch 5, T1*2*2*2*2 = 8 s) | | |----INVITE------>| (Versuch 6, T1*2*2*2*2*2 = 16 s) | | |----INVITE------>| (Versuch 7, T1*2*2*2*2*2*2 = 32 s) | | | (Client gibt auf, da keine Antwort vom Server erhalten wurde) |