Алгоритм управления перегрузкой на приемнике
Предположим, мы говорим о ситуации, когда многие отправители отправляют пакеты получателю.
Часто отправители управляют перегрузкой, используя скользящее окно, ограничивающее скорость отправки.
У нас есть:
snd_cwnd = min(cwnd,rwnd)
Используя явную или неявную информацию обратной связи от сети (маршрутизатор, коммутатор), отправитель будет контролировать cwnd
контролировать скорость отправки.
Обычно, rwnd
всегда достаточно большой, чтобы отправитель заботился только о cwnd
, Но если мы рассмотрим rwnd
, используя его для ограничения snd_cwnd
, это сделало бы контроль заторов более эффективным.
rwnd
это количество пакетов (или байтов), которые получатель сможет получить. Меня беспокоит способность отправителей.
Вопросы:
1. Так как же получатель узнает, сколько потоков отправляет ему пакеты?
2. В любом случае, получатель знает snd_cwnd отправителя?
1 ответ
Это все очень запутано.
Количество потоков в приемнике не имеет отношения к числу любого конкретного потока. Rwnd - это просто количество места, оставшегося в приемном буфере для этого потока.
Получателю не нужно знать cwnd отправителя. Это проблема отправителя.
Ваше утверждение, что "обычно rwnd всегда достаточно велик, чтобы отправитель заботился только о cwnd", просто не соответствует действительности. Окно приема меняется с каждым приемом; он рекламируется с каждым ACK; и это часто падает до нуля.
Ваше следующее утверждение "если мы рассмотрим rwnd, используя его для ограничения cwnd...", это просто описание того, что уже происходит, согласно 'snd_cwnd = min (cwnd, rwnd)'.
Или же это может стать совершенно необъяснимым предложением без необходимости изменять управление потоком данных TCP, которое работало в течение 25 лет и не работало в течение нескольких лет до этого: я помню несколько зависаний Arpanet в середине 1980-х годов.