Сколько раз я должен повторно передать пакет, прежде чем предположить, что он был потерян?

#networking #protocols #custom-protocol

#сеть #протоколы #пользовательский протокол

Вопрос:

Я создавал надежный сетевой протокол, подобный TCP, и мне было интересно, какое хорошее значение по умолчанию для порога повторной передачи должно быть в пакете (количество раз, которое я повторно отправлял пакет, прежде чем предположить, что соединение было разорвано). Как я могу найти оптимальное количество попыток в сети? Кроме того; не все сети обладают одинаковой надежностью, поэтому я бы предположил, что это «оптимальное» значение будет различаться в разных сетях. Есть ли хороший способ рассчитать оптимальное количество попыток? Также; сколько миллисекунд я должен подождать перед повторной попыткой?

Комментарии:

1. Этот протокол будет построен поверх UDP для обхода брандмауэров NAT

Ответ №1:

На этот вопрос невозможно ответить в представленном виде, поскольку существует слишком много сложностей реального мира, которые необходимо учитывать.

Если вам нужен TCP, используйте TCP. Если вы хотите разработать пользовательский протокол для транспортного уровня, вы сделаете хуже, чем 40 лет накопленного опыта, закодированного в TCP.

Если вы не посмотрите на существующую литературу, вы пропустите добрую сотню соображений по дизайну, которые никогда не придут вам в голову, сидя за своим столом.

Комментарии:

1. Из-за ограничений брандмауэра о TCP просто не может быть и речи. (мы разрабатываем P2P-приложение для мобильных устройств и настольных компьютеров, и большинство людей не знают, как перенастроить свои NATS, поэтому необходим UDP (пробивание отверстий UDP), и мы создаем надежный слой поверх этого).

2. Тогда не изобретайте колесо заново, украдите его: en.wikipedia.org/wiki/UDP_hole_punching

3. Проблема в том, что его НУЖНО изобрести заново, потому что UDP ненадежен, и я уже использую UDP для пробивки отверстий; это просто не «надежный», как TCP

4. TCP реализует надежную передачу через ненадежную службу дейтаграмм, что вы и пытаетесь сделать. Похоже, что вы надеетесь избежать выполнения своей «домашней работы»; нет королевской дороги к протоколам передачи, но вы могли бы сделать намного хуже, чем «Компьютерные сети» Таненбаума.

Ответ №2:

В итоге я разрешил приложению установить это значение со значением по умолчанию 5 повторных попыток. Похоже, это работало в большом количестве сетей в наших сценариях тестирования.