Solved
Verbindungsabbrüche SIP Telefonie, ausgehend, wegen Session Expiry.
3 years ago
Hallo Kommune
habe bei mir konsistent Verbindungsabbrüche nach ca 50 Minuten festgestellt, nur ausgehend. Client ist Asterisk 18 direkt auf einem OpenWRT Router, kein NAT. Magenta Vertrag, 100MBit. Telefonie Server Situation:
$ nslookup -querytype=SRV _sip._udp.tel.t-online.de
_sip._udp.tel.t-online.de service = 10 0 5060 n-epp-110.edns.t-ipnet.de.
_sip._udp.tel.t-online.de service = 20 0 5060 d-epp-100.edns.t-ipnet.de.
_sip._udp.tel.t-online.de service = 30 0 5060 h2-epp-100.edns.t-ipnet.de.
Der erste, 217.0.25.97, wird genommen.
Was passiert ist Folgendes, laut Packet Logs genommen direkt vom WAN Interface. Ich sende den initialen INVITE raus, das übliche "unauthorized" etcetera folgt, dann kommt das Okay, wo der Server sagt dass er der Refresher sein will, bzgl. Session Expiry:
Session-Expires: 1800;refresher=uas
Er ist der UAS, weil ich den INVITE gesendet habe. Asterisk stimmt zu, und von nun an ist es Sache des Telekom Servers die Sitzung mit reINVITES am Leben zu halten. Expiry ist 30 Minuten, also sollte der erste reINVITE nach 15 kommen.
Dann kommt auch einer, aber erst nach 22 Minuten. Hier erklärt sich wiederum der Telekom Server für die Geschichte verantwortlich:
Session-Expires: 1800;refresher=uac
Klar, UAC diesmal weil der ja den INVITE geschickt hat. Asterisk stimmt zu, alles klar und sauber. Und dann hört man gar nix mehr vom Telekom Server. Außer 30 Minuten später, also nach den vollen 1800 Sekunden, wo er sein BYE schickt mit der Begündung
Reason: SIP;cause=408;text="Request Timeout (1:26)"
D.h. obgleich er sich für die reINVITES verantwortlich erklärt schickt er genau einen und das war's. Dann lässt er die Sitzung einfach auslaufen und kappt schließlich die Verbindung.
Wie gesagt, das passiert nur ausgehend. Eingehend erklärt er sich auch verantworlich, diesmal von Beginn an als UAC, da er ja den ersten INVITE schickt, und dann kommen schön pünktlich und sauber, wie zuhause gelernt, alle 15 Minuten seine reINVITES. Ich kann ihm sogar sagen, bei eingehenden Verbindungen, dass mein Asterisk die Sache übernehmen soll. Dann sagt Asterisk "refresher UAS", der Telekom Server schluckt das und dann schickt Asterisk alle 15 Minuten reINVITES, diesmal natürlich annoncierend dass er als UAC die Sache in der Hand behält, und es gibt nullo Problemo, egal wer die reINVITES macht.
Wie gesagt, bei eingehenden Verbindungen. Bei ausgehenden scheint Telekom Server unter Gedächtnisschwund zu leiden und, nach dem ersten reINVITE, zuverlässig zu vergessen wofür er sich eigentlich verantwortlich erklärt hat. Wo wendet man sich mit sowas hin?
1130
9
This could help you too
5 years ago
597
0
3
1068
0
2
4 years ago
988
0
2
5 years ago
1638
0
3
708
0
2
3 years ago
Bei ausgehenden scheint Telekom Server unter Gedächtnisschwund zu leiden und, nach dem ersten reINVITE, zuverlässig zu vergessen wofür er sich eigentlich verantwortlich erklärt hat.
Kann ich für "meinen" Telekomserver so nicht bestätigen.
Da kommt das UPDATE alle 15min.
Hast du schon mal mit einem Softphone, wie z.B. PhonerLite getestet?
7
Answer
from
3 years ago
Hallo zusammen,
der Fehler liegt hier beim Anrufer, im SDP Offer/Answer Prozess.
Im initialen INVITE sendet der Anrufer folgenden SDP-Body:
Dann beim Session-Refresh mittels Re-INVITE wird im 200 OK folgendes geantwortet:
Interessant ist hier die o-line. Schaut man einmal in RFC8866 bezüglich Syntax, heißt es dort:
<sess-version> is a version number for this session description. Its usage is up to the creating tool, so long as <sess-version> is increased when a modification is made to the session description. Again, as with <sess-id> it is RECOMMENDED that a Timestamp be used.
In beiden SDP-Bodys ist die Session Version die selbe, aber es gab eine Änderung im SDP-Body (m-line ohne Payloadtype 9).
Dies widerspricht Abschnitt 8 des RFC3264 (sess-version muss inkrementiert werden):
Somit handelt es sich um eine harte RFC-Verletzung, die dann wiederum in der Folge zum fehlenden Session-Refresh führt...
Answer
from
3 years ago
Meister Proper, was soll ich sagen? Propere Arbeit erster Güte. Danke, wirklich. Klasse.
Also, Asche auf mein Haupt, sei zu allererstmal festgestellt. Hatte ich nicht behauptet, dieselbe Konfiguration hätte zuvor viele Jahre getan? Gelogen! muss ich jetzt leider selber feststellen. Ich hatte nämlich früher ausschließlich den alaw Codec aktiviert, aber irgendwann kürzlich mal den g722 hinzugenommen. Und egal wo der Fehler - auf meiner Seite - jetzt wirklich begraben liegt, ob Bug oder Fehlkonfiguration oder was, das war natürlich hier der fatale Unterschied.
Also, ich mach jetzt erst nochmal einen Test, wieder nur mit alaw - obgleich das Ergebnis jetzt ziemlich vorhersagbar ist - und dann werde ich mir nochmal anschauen was hier - auf meiner Seite, klar - wirklich das Problem ist.
Aber nochmal, das war jetzt in der Tat ein echter Hochgenuss. Problem erkannt, sauber isoliert und kristallklar dargestellt, und dem Männle (mir) damit wirklich geholfen. Spitze. Echt.
Edit:
Tja, Freunde der Sonne, was sagt man dazu. Jetzt geht's, ganz genauso wie in den guten alten Zeiten. Also, was haben wir heute gelernt? Lügen, auch ungewollte, haben kurze Beine. Das schreiben wir uns jetzt auf'n Zettel und heften den an den Kühlschrank, damit wir diese wertvolle Lektion nicht so bald vergessen.
Answer
from
3 years ago
Um die Sache abzuschließen für andere chan_sip Nutzer die eventuell hierüber stolpern, dies ist tatsächlich ein Bug in chan_sip. Das Modul inkrementiert seine SDP Session Version (p->sessionversion in add_sdp()) rein reaktiv, nämlich nur wenn die Gegenstelle ihrerseits ihre Version inkrementiert hat. Das ist natürlich zuwenig.
Wie gesagt, das Ganze fällt überhaupt nicht auf wenn man nur alaw verwendet (allow=!all,alaw). Wenn man aber einen zweiten Codec, namentlich g722, hinzunimmt (allow=!all,alaw,g722), und der Tkom Server antwortet "nehmen wir alaw", also im Rahmen des initialen Aushandlungsprozesses der Session, dann modifiziert chan_sip seine Session ohne seine Version intern hochzuzählen, was es eigentlich mit dem letzten ACK im Sessionaufbau tun müsste.
Witzigerweise, und das ist wirklich lustig, haben die einen Hack implementiert mit dem Clients begegnet werden soll die ihrerseits ihre Version Nummer nicht korrekt hochzählen. Der entsprechende Konfigurationsparameter lautet "ignoresdpversion". Wenn man den auf yes setzt - nur für ausgehende Tkom Verbindungen natürlich - inkrementiert chan_sip seine Version Nummer *jedes Mal* wenn es seinen Session Zustand kommuniziert. Das heißt, es wird dem Server vorgegaukelt dass sich die Session geändert hat, und der Server muss dann checken was genau und ob Handlungsbedarf besteht, was in der Regel dann eben nicht der Fall ist.
So mit einem Server umzuspringen ist natürlich nicht die reine Schule. Aber den Check, haben wir ja gerade gelernt, macht der Tkom Server sowieso, das heißt der rechentechnische Mehraufwand auf seiner Seite sollte sich in Grenzen halten. Und tatsächlich, mit diesem fiesen Trick funktioniert die ganze Sache. D.h. damit werden wieder Session Refreshes regelmäßig vom Tkom Server gesendet, auch wenn man g722 mit im Sortiment hat. Kann natürlich sein, dass es Seiteneffekte gibt die ich nicht überblicke. Aber ein kleiner Test ist anstandslos durchgelaufen, d.h. mit jedem Refresh hat der Server richtig erkannt dass es trotz des Inkrementes nichts zu tun gibt, also an der Session nicht rumgefummelt werden muss.
Dies nur als Randbemerkung. Ob man HD Audio, wie es so schön heißt, wirklich braucht sei sowieso mal dahingestellt. Anscheinend gibt's da ja ohnehin jede Menge Probleme, etwa mit Mobilfunkteilnehmern. Und mit dieser Beobachtung, denke ich, können wir die Sache dann wirklich zu den Akten legen.
Wie gesagt, ganz herzlichen Dank nochmal für die tolle Unterstützung. Ich hätt' das nie rausbekommen, auch nicht mit Ratsuche auf anderen einschlägigen Foren. Da bin ich mir ziemlich hundertprozentig sicher.
Unlogged in user
Answer
from
Accepted Solution
accepted by
3 years ago
Hallo zusammen,
der Fehler liegt hier beim Anrufer, im SDP Offer/Answer Prozess.
Im initialen INVITE sendet der Anrufer folgenden SDP-Body:
Dann beim Session-Refresh mittels Re-INVITE wird im 200 OK folgendes geantwortet:
Interessant ist hier die o-line. Schaut man einmal in RFC8866 bezüglich Syntax, heißt es dort:
<sess-version> is a version number for this session description. Its usage is up to the creating tool, so long as <sess-version> is increased when a modification is made to the session description. Again, as with <sess-id> it is RECOMMENDED that a Timestamp be used.
In beiden SDP-Bodys ist die Session Version die selbe, aber es gab eine Änderung im SDP-Body (m-line ohne Payloadtype 9).
Dies widerspricht Abschnitt 8 des RFC3264 (sess-version muss inkrementiert werden):
Somit handelt es sich um eine harte RFC-Verletzung, die dann wiederum in der Folge zum fehlenden Session-Refresh führt...
0
Unlogged in user
Ask
from