C# UDP-сокет проверяет потерю пакета

У меня есть сокет udp, который отправляет 100 строк каждые 1 секунду, и когда данные получены, я хочу проверить правильность данных или нет и измерить потерю пакета данных

источник для отправки строки:

string toSend;
byte[] data = Encoding.ASCII.GetBytes(toSend);

как я знаю, udp не может проверить правильность данных или нет и не может измерить потерю пакетов, за исключением того, что Полученные уже знают, что данные получат

поэтому для статистики я отправляю данные, которые Receiver уже знает каждые 5 секунд

Как я знаю, что данные были отправлены правильно или потеря пакета при получении данных?

1 ответ

Добавьте свой собственный протокол сверху UDP, протокол, который включает в себя некоторый порядковый номер. Если вы начинаете порядковый номер с нуля и отправляете шесть пакетов, то последний пакет должен иметь порядковый номер пять. Если вы получаете пакеты с порядковыми номерами 0, 1 и 5, то вы знаете, что потеря этих пакетов составляет 50% для этих шести пакетов.,

Для проверки ошибок добавьте простую контрольную сумму для каждого пакета.


Также, если вам нужна более высокая надежность, тогда с помощью схемы нумерации последовательностей можно легко осуществить переупорядочение пакетов, чтобы пакеты, поступающие в неправильном порядке, переставляли в правильном порядке. Также легко реализовать подтверждения и повторную передачу потерянных пакетов. Таким образом, добавление этого поверх UDP является способом реализации очень простого TCP-подобного протокола. Многие протоколы, использующие UDP, реализуют некоторые или все эти вещи.

Другие вопросы по тегам