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, реализуют некоторые или все эти вещи.