Я заметил, что когда я отправляю пакеты с равными интервалами из сокета udp, первый отправленный пакет, кажется, задерживается.Например, если я отправляю пакеты каждые 100 мс, я нахожу, что задержка между приемом пакетов обычно распределяется со средним значением 100 мс и средним стандартным отклонением 4 в моей сети.Тем не менее, промежуток между временем приема первого и второго пакетов обычно составляет от 10 до 40 мс - как вы можете видеть, это явно статистически значимое различие, и поэтому мой вопрос, что его вызывает?
Я использую функцию sendto из C на Linux.Кто-то предположил, что задержка может быть вызвана разрешением arp, препятствующим отправке пакета до тех пор, пока IP-адрес назначения не будет преобразован в MAC-адрес - возможно ли это?Если я перезапущу отправляющую программу, первый пакет снова займет слишком много времени, и задержка будет непостоянной - от 10 до 40 мс - довольно большой диапазон.
Мне нужно выяснить, почему этот первый пакет занимает слишком много времени.и как обойти это.
Редактировать: Дальнейший анализ с помощью pcap показывает, что отправляющая программа отправляет пакеты с нужным интервалом.Проблема должна быть с получателем, который использует select () для ожидания читаемого сокета, затем вызывает recvfrom и печатает пакет.Есть ли там какая-то буферизация, о которой я не знаю?