Комментарии 3
Принимающая сторона говорит, что готова принять, условно, три блока данных, отправитель передает их. Получает отправляет подтверждение, после чего отправляются следующие три блока данных и так далее.
Всю жизнь думал что это работает не так.
Отправляем последовательно (или в любом порядке чтобы навести хаоса) блоки 1, 2, 3.
Если к моменту отправки 4 блока от получателя пришёл ACK на некоторое количество блоков - сдвигаем окно на это количество блоков, продолжаем посылать дальше.
Передача блоков и подтверждений идёт синхронно в обе стороны а не последовательно как на вашей картинке, при этом в случае с размером окна 3 получатель может прислать от 0 до 3х подтверждений в зависимости от того какие блоки и в каком порядке успеют дойти.
у получателя проблемы с памятью и он не может обрабатывать больший объем данных.
А если проблемы не с получателем а с сетью и половина пакетов не доходит - размер окна случайно не будет падать?...
Вопрос "что делать, когда когда окно равно нулю"? остаётся открытым
Напомнило про редкий баг, когда окно уходило в 0 и не возвращалось:
https://engineering.skroutz.gr/blog/uncovering-a-24-year-old-bug-in-the-linux-kernel/
TCP: Что делать, когда окно равно нулю