Алгоритм управления перегрузкой на приемнике

Предположим, мы говорим о ситуации, когда многие отправители отправляют пакеты получателю.
Часто отправители управляют перегрузкой, используя скользящее окно, ограничивающее скорость отправки.

У нас есть:

 snd_cwnd = min(cwnd,rwnd) 

Используя явную или неявную информацию обратной связи от сети (маршрутизатор, коммутатор), отправитель будет контролировать cwnd контролировать скорость отправки.

Обычно, rwnd всегда достаточно большой, чтобы отправитель заботился только о cwnd, Но если мы рассмотрим rwnd, используя его для ограничения snd_cwnd, это сделало бы контроль заторов более эффективным.

rwnd это количество пакетов (или байтов), которые получатель сможет получить. Меня беспокоит способность отправителей.

Вопросы:
1. Так как же получатель узнает, сколько потоков отправляет ему пакеты?
2. В любом случае, получатель знает snd_cwnd отправителя?

1 ответ

Это все очень запутано.

  1. Количество потоков в приемнике не имеет отношения к числу любого конкретного потока. Rwnd - это просто количество места, оставшегося в приемном буфере для этого потока.

  2. Получателю не нужно знать cwnd отправителя. Это проблема отправителя.

Ваше утверждение, что "обычно rwnd всегда достаточно велик, чтобы отправитель заботился только о cwnd", просто не соответствует действительности. Окно приема меняется с каждым приемом; он рекламируется с каждым ACK; и это часто падает до нуля.

Ваше следующее утверждение "если мы рассмотрим rwnd, используя его для ограничения cwnd...", это просто описание того, что уже происходит, согласно 'snd_cwnd = min (cwnd, rwnd)'.

Или же это может стать совершенно необъяснимым предложением без необходимости изменять управление потоком данных TCP, которое работало в течение 25 лет и не работало в течение нескольких лет до этого: я помню несколько зависаний Arpanet в середине 1980-х годов.

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