Каковы правила повторной передачи для TCP?


The статья в Википедии о TCP указывает, что IP-пакеты, транспортирующие сегменты TCP, могут иногда теряться, и что TCP "запрашивает повторную передачу потерянных данных".

каковы именно правила для запроса повторной передачи потерянных данных? С какой периодичностью выполняются запросы на повторную передачу? Есть ли верхняя граница числа? Есть ли функциональность для клиента, чтобы указать серверу забыть обо всем сегменте TCP для какой части пропал без вести, когда пропал IP-пакет?

2   51  

2 ответа:

каковы именно правила для запроса повторной передачи потерянных данных?

приемник не запрашивает повторную передачу. Отправитель ожидает ACK для диапазона байтов, отправленного клиенту, и когда он не получен, повторно отправляет пакеты через определенный интервал. Это ARQ (автоматический запрос на повтор). Есть несколько способов, которыми это реализуется.

Stop-and-wait ARQ
Go-Back-N ARQ
Selective Repeat ARQ

представлены в RFC 3366.

С какой частотой выполняются запросы на повторную передачу?

повторные передачи-раз и количество попыток не применяется стандартом. Он реализован по-разному в разных операционных системах, но методология фиксирована. (Возможно, один из способов снятия отпечатков пальцев OSs?)

тайм-ауты измеряются в терминах времени RTT (туда и обратно). Но это не нужно очень часто из-за Fast-ретрансляция, которая срабатывает, когда 3 Дубликата ACKs есть.

есть ли верхняя граница числа?

Да есть. После определенного количества повторных попыток хост считается "выключенным", а отправитель отказывается и разрывает TCP-соединение.

есть ли функциональность для клиента, чтобы указать серверу, чтобы забыть обо всем сегменте TCP, для которого часть пропала без вести, когда IP-пакет пошел не хватает?

все дело в надежной связи. Если бы вы хотели, чтобы клиент забыл о какой-то части, вы бы не использовали TCP в первую очередь. (Возможно, UDP?)

нет фиксированного времени для повторной передачи. Простые реализации оценивают RTT (round-trip-time), и если никакой ACK для отправки данных не был получен в 2 раза за это время, то они повторно отправляют.

потом двойной время ожидания и повторная отправка еще раз, если снова нет ответа. Полоскать. Повторять.

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

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

TCP никогда отбрасывает данные, поэтому нет, нет способа указать, что сервер должен забыть о каком-то сегменте.