how/network
Что делает TCP когда пакет теряется? Не ждёт долго. Если три «дубликата ACK» подряд - сразу переотправляет, не дожидаясь таймера.
Сеть не идеальна: пакеты иногда теряются (полная очередь на роутере, сбой Wi-Fi, обрыв линка). А TCP обещает «надёжную доставку» - значит должен как-то восстанавливать потери. Как именно?
У TCP есть два механизма переотправки:
Нажми ▶ - посмотрим как fast retransmit срабатывает на потере одного пакета посередине потока.
Клиент и сервер прошли three-way handshake (см.
tcp-handshake) и оба в ESTABLISHED. Готовы передавать данные.
TCP не ждёт ACK на каждый пакет - пайплайнит их. Окно отправки
cwnd определяет сколько пакетов можно «в полёте» одновременно
без подтверждения.
итого
Что важно запомнить:
netstat -s / /proc/net/snmp) видно сколько
retransmit'ов произошло - высокий процент = проблемы с сетьюЕсли хочется глубже - есть [[tcp-handshake|жизненный цикл TCP]] и
урок intermediate-02-tcp-handshake где можно поснифать пакеты
руками.