Насколько я понимаю, когда вы открываете tcp-соединение для отправки данных, tcp-уровень на принимающей стороне удерживает весь пакет до завершения передачи, а затем отправляет все данные в приложение.
Из википедии по tcp:
Из-за перегрузки сети, балансировки нагрузки на трафик или другого непредсказуемого поведения сети IP-пакеты могут быть потеряны, дублированы или доставлены не по порядку. TCP обнаруживает эти проблемы, запрашивает повторную передачу потерянных данных, реорганизует неупорядоченные данные и даже помогает минимизировать перегрузку сети, чтобы уменьшить вероятность возникновения других проблем. Как только получатель TCP повторно собрал последовательность первоначально переданных октетов, он передает их принимающему приложению. Таким образом, TCP абстрагирует связь приложения от базовых сетевых деталей.
Но когда вы загружаете большой файл, браузер отслеживает, знает, сколько данных было отправлено, знает, как быстро они передаются и т.д. Как он узнает об этом, если передача еще не завершена и, следовательно, нет не были переданы на получение заявки?
Что мне здесь не хватает?