Допустим, есть TCP-соединение, одна сторона посылает данные, другая принимает.
Пусть посылатель послал полное окно. Получатель данные принял, подтвердил, но программа данные не вычитала, поэтому окно осталось нулевого размера.
Теперь, позже, программа вычитала все данные одним махом, и получатель послал window update. Который потерялся в сети.
Теперь у посылателя нет никаких причин теребить соединение, потому что все, что он послал, подтверждено, а новых данных он послать не может, потому что считает, что окно нулевого размера. И у получателя тоже нет никаких причин что-либо перепосылать.
И что, из-за одного потерянного пакета они так и будут куковать до ближайшего keep alive, или до бесконечности, если keep alive выключен? Или я чего-то не понимаю?