Ich habe bemerkt, dass, wenn ich Pakete in gleichen Intervallen von einem Udp-Socket senden, das erste Paket gesendet wird, scheint verzögert zu sein. Wenn ich zum Beispiel die Pakete alle 100 ms sende, finde ich die Verzögerung zwischen dem Empfang der normal zu verteilenden Pakete mit mittleren 100 ms und der durchschnittlichen Standardabweichung von 4 in meinem Netzwerk. Der Abstand zwischen der Empfangszeit für das erste und das zweite Paket beträgt jedoch normalerweise etwa 10 bis 40 ms - wie Sie sehen können, ist dies eindeutig ein statistisch signifikanter Unterschied, und meine Frage ist, was verursacht es?Was verursacht UDP-Empfangsverzögerung?
Ich verwende die sendto-Funktion von C auf Linux. Jemand schlug vor, dass die Verzögerung durch eine ARP-Auflösung verursacht werden könnte, die verhindert, dass das Paket gesendet wird, bis die Ziel-IP in eine MAC-Adresse konvertiert wurde - ist das wahrscheinlich? Wenn ich das sendende Programm neu starte, dauert das erste Paket wieder zu lange, und die Verzögerung ist inkonsistent - 10 bis 40 ms sind ein ziemlich großer Bereich.
Ich muss herausfinden, warum dieses erste Paket zu lange dauert, und wie man es umgehen kann.
Edit: Weitere Analyse mit pcap zeigt an, dass das sendende Programm die Pakete im richtigen Intervall sendet. Das Problem muss beim Empfänger liegen, der mit select() auf einen lesbaren Socket wartet, dann recvfrom aufruft und das Paket druckt. Gibt es eine Art Pufferung, von der ich vielleicht nichts weiß?
Sie können einen Sniffer verwenden, um zu überprüfen, ob etwas mit Ihrem Computer etwas in Zusammenhang mit der Übertragung des Pakets verwandt ist. –
Hey, könnte wer auch immer downvoted bitte warum? – Benubird