Результатом детективного расследования Джейкобсона и Карелса стал набор обновленных алгоритмов контроля потоков и предотвращения перегрузок – одна из самых глобальных модификаций в протоколе TCP за 40 лет.
В основе контроля перегрузок протокола TCP лежит алгоритм аддитивного увеличения, мультипликативного уменьшения (АУМУ). Прежде чем АУМУ вступает в игру, новое соединение будет агрессивно наращивать свою скорость передачи данных: если первый пакет успешно получен, оно направит еще два, если и они успешно получены, то соединение вышлет еще четыре и т. д. Но как только подтверждение приема не возвращается к отправителю, АУМУ начинает действовать. Согласно этому алгоритму любой полностью полученный набор пакетов приводит не к удвоению передаваемых пакетов, а к сокращению их числа на один, а недоставленные пакеты сокращают скорость передачи вполовину (отсюда и название алгоритма). В сущности, действие алгоритма похоже на указания «еще немного, еще немного, еще немного, о-о-о, слишком много, немного меньше, о'кей, немного больше, еще немного больше…». Таким образом, это приводит к форме частотного диапазона, известного как пилообразный TCP (равномерные подъемы вверх, прерываемые резкими падениями).
Так почему происходит такой четкий асимметричный спад? Как объясняли Джейкобсон и Карелс, в первый раз АУМУ вступает в игру, как только соединение теряет первый пакет в своей агрессивно нарастающей фазе. Поскольку эта первоначальная фаза привела к двукратному увеличению скорости передачи с каждым успешно переданным пакетом, решение урезать скорость вдвое, как только появляется проблема, выглядит вполне логичным. И если соединение вновь начинает давать сбой после того, как заработает, это происходит, скорее всего, потому, что какое-то новое соединение сражается за сеть. Наиболее консервативная оценка данной ситуации (буквально предположим, что вы единственный человек, использующий сеть, и теперь второй человек забирает половину ваших ресурсов) также приводит к урезанию наполовину. Консерватизм здесь необходим: сеть может стабилизироваться, только если ее пользователи перестанут с ней работать на скорости, равной скорости передачи данных, когда сеть перегружается. По той же причине исключительно аддитивное увеличение помогает стабилизировать сеть для всех, предупреждая возникновение быстрых циклов «перегрузка – восстановление».
Хотя такое четкое разделение между сложением и умножением вряд ли можно обнаружить в природе, пилообразный характер TCP находит некоторое отражение в различных областях, где основная идея заключается в том, чтобы один некто мог взять ровно столько, сколько требуется.