Feststellen, wann ein UDP-Paket tatsächlich auf dem OpenWrt-Router übertragen wird

444
Nisheeth Lahoti

Ich verwende einen Linksys WRT 1900 ACS-Router mit OpenWrt 15.05.1. Ich verwende ein C-Programm, das bestimmte WiFi UDP-Multicast-Pakete in regelmäßigen Abständen (von 16 ms) sendet und dann die Systemzeit auf stdout druckt. Ich kann Unregelmäßigkeiten auf der Empfangsseite deutlich erkennen, aber sie erscheinen nicht in den gedruckten Zeitwerten.

Dies lässt mich glauben, dass ein gewisses Maß an Pufferung / Warten auch nach der Rückkehr des sendto () - Systemaufrufs stattfindet. Wie kann ich die Uhrzeit ermitteln, zu der das Paket tatsächlich gesendet wird?

Hinweis: Die Unregelmäßigkeiten sind bei allen Empfängern in diesem Multicast-Netz gleich, daher liegt das Problem nicht auf der Empfängerseite.

0
Broadcast / Multicast über WLAN ist speziell in Bezug auf Verschlüsselung und Priorität. Was auch immer Sie tun, ist im Hinblick auf WLAN wahrscheinlich nicht optimal. Daniel B vor 6 Jahren 0
Ich glaube, UDP ist als Protokoll konzipiert, bei dem dies nicht möglich wäre. Ramhound vor 6 Jahren 0

1 Antwort auf die Frage

0
pim

Leider kannst du nicht.

TL; DR

Das sendto Funktion kehrt zurück, sobald das Paket an den IP-Stack gesendet wurde. Der Kernel-IP-Stack verarbeitet ihn und versucht, das Paket über Ihre WLAN-Schnittstelle zu senden.

Hier liegt das Problem, die WiFi-Übertragungsverzögerung ist lang (verglichen mit drahtgebundenem Ethernet) und unregelmäßig. Hier ist ein Beispiel, welche Latenz Sie erwarten sollten:

Wifi VS Wired ping time log

Dieses logarithmische Diagramm zeigt die Verzögerung der Ping-Zeit zwischen meinem Server und meinem Router sowie zwischen meinem Server und einem drahtlosen Client. Schon seitping es bidirektional ist, liegt die unidirektionale Latenz wahrscheinlich bei etwa der Hälfte.

Die kabelgebundene Kommunikation zeigt eine Pingzeit um 300us, während die drahtlosen Verbindungen durchschnittlich 7 ms (23-fache Verzögerung) anzeigen.

Nun fast das gleiche Diagramm, diesmal linear, um Unregelmäßigkeiten hervorzuheben:

Wifi VS Wired ping time linear

Die WLAN-Ping-Zeit variiert zwischen 6 und 45 ms.

Lösungen?

Da die sendtoFunktion früher als erwartet zurückkehrt, können Sie nicht wirklich messen, wann die Pakete gesendet werden. Wenn Sie zu dem Zeitpunkt, zu dem das Paket gesendet wird, wirklich interessiert sind, können Sie es wahrscheinlich schätzen, indem Sie eine Antwort vom Client abwarten und die Hin- und Rückzeit halbieren.

Aber, wie Sie bereits herausgefunden, alle WiFi - Kunden erhalten das Paket zur gleichen Zeit, da es ein Multicast ist.

Die eigentliche Frage lautet also: Was wollen Sie erreichen?

Wenn Sie beispielsweise möchten, dass alle Clients denselben Audiostrom gleichzeitig wiedergeben, sollte dies durch eine Art Software- PLL erreicht werden.

Wenn Sie die Verzögerung minimieren möchten, können Sie immer noch WLAN-Einstellungen vornehmen, insbesondere im Energiesparmodus, am Router und auf den Clients.

Und wenn Sie eine harte Echtzeit- Leistung erzielen möchten, sollten Sie wahrscheinlich nur WLAN vergessen.