TCP Retransmission: сколько пакетов будет отправлено повторно?

Как работает ретрансляция TCP? Какая формула определяется тем, сколько пакетов будет отправлено повторно? Я так понимаю он установлен где-то в кубическом протоколе TCP, но где?

Интересует, как это работает в Linux. Я использую Debian 8 и просто смотрю дампы. Я установил соединение с помощью netcat на порт 27000. Я обычно делаю на сервере, который заставляет iptables отбрасывать все пакеты через порт 27000 и отправлять пакет (и посмотрите, сколько раз пакет был повторно отправлен).

1 ответ

Решение

Это очень широкий вопрос.

Нет, это не в принципе и не обязательно CUBIC.

Повторная передача сначала указывается в "базовом" протоколе TCP RFC 793 (1981), раздел 3.7 Передача данных, пункт "Тайм-аут повторной передачи".

С тех пор было много (действительно много[*]) улучшений. Очень заметным является "медленный запуск", последний из которых определен в RFC 5681, но корни которого уходят в 1997 RFC 2001, "Алгоритмы медленного запуска TCP, предотвращения перегрузки, быстрой повторной передачи и быстрого восстановления".

В этой области нет "одного размера для всех", всегда есть компромисс. Кроме того, "умные" алгоритмы будут занимать больше места (программное обеспечение + использование ЦП), поэтому они могут использоваться, а могут и не использоваться, или просто доступны в зависимости от приложения (например, встроенные устройства). И поскольку эти вещи находятся в реализации (то есть не видны при обмене данными между хостами), вы никогда не сможете точно знать, какой хост использует какой. Например, вы увидите размер и масштаб окна TCP в сегментах, но не будете знать, каким алгоритмом он управляется.

Что касается Linux, предполагается, что по умолчанию PRR начиная с 3.2. До этого был CUBIC, а до этого BIC.

Хотя, по умолчанию это не означает, что это единственный доступный. В моем ядре Debian Stock 4.4.0 это CUBIC:

jbmaillet@sumo:~$ cat /proc/sys/net/ipv4/tcp_congestion_control
cubic

Хотя Рено тоже доступен:

jbmaillet@sumo:~$ cat /proc/sys/net/ipv4/tcp_allowed_congestion_control
cubic reno

... и дюжина доступных в разделе "TCP: расширенный контроль перегрузки" в конфигурации ядра.

*: https://en.wikipedia.org/wiki/TCP_congestion-avoidance_algorithm

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