TCP: зачем нам нужен контроль потока и контроль перегрузки

Я кратко прочитал как об управлении потоком, так и о контроле перегрузки, и я не могу понять, почему нам нужны они оба, а не только контроль перегрузки.

Разве мы не можем просто использовать управление перегрузкой и включить получателя в качестве последнего узла? Мне кажется, что управление потоком может быть просто частным случаем управления перегрузкой.

Я просмотрел этот вопрос, я думаю, что у ОП тот же вопрос, что и у меня, но вопрос сформулирован недостаточно хорошо, поэтому ответ неполный.

Предположим, мы отправляем 100 пакетов, но только первые пять из них были подтверждены ACK. Как отправитель узнает, что это медленная сеть или получатель? Да и должно ли это иметь значение? Сеть с получателем не способна принимать достаточно быстро, поэтому отправитель должен работать медленнее.

В чем проблема с такой реализацией?

if (acked() / sent() < THRESHOLD){
    transmission_rate(0.5);
}else{
    transmission_rate(SOME_RATE); // where SOME_RATE > 0
}

Есть ли что-то, что делает управление потоком, чего не делает управление перегрузкой, что требует управления потоком в протоколе TCP?


person Pavel Skipenes    schedule 12.05.2021    source источник


Ответы (1)


Я думаю, что автор здесь довольно хорошо объяснил управление потоком.

По сути, вы правы, есть некоторое совпадение между управлением перегрузкой и управлением потоком. Однако оба они функционируют по-разному. Например, сеть может быть достаточно большой, и необходимы оба.

Представьте себе подключение Raspberry Pi к суперкомпьютеру с гигабитной сетью. Этот пример глупый, но послужит для иллюстрации. Отправитель (суперкомпьютер) и сеть вполне могут поддерживать высокие скорости, но если у pi низкий буфер приема, нет особого смысла отправлять быстро. По этой причине получатель будет объявлять свое окно отправки, чтобы отправитель знал, как быстро другая сторона может обрабатывать данные. Таким образом, он ограничит случаи, когда он успешно отправляет данные по сети, но получатель не может их обработать и должен их отбросить. Как правило, отправка меньшего количества байтов по сети является хорошей идеей, поскольку это поможет предотвратить возможную перегрузку.

person Misho Janev    schedule 15.05.2021