2

Насколько я понимаю, когда вы открываете tcp-соединение для отправки данных, tcp-уровень на принимающей стороне удерживает весь пакет до завершения передачи, а затем отправляет все данные в приложение.

Из википедии по tcp:

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

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

Что мне здесь не хватает?

1 ответ1

1

Что вам не хватает, так это то, что для этого не требуется, чтобы все данные были получены до передачи их в принимающее приложение. Это просто требует, чтобы он собрал последовательность данных до сих пор.

Другими словами, если в нем отсутствует сегмент или сегмент поврежден, он запросит повторную передачу этого сегмента и будет ждать его получения, прежде чем передавать данные.

Проще говоря, представьте, если мой компьютер запрашивает данные, которые будут поступать в 10 сегментов. Он получает сегменты следующим образом: 1, 2, 3, 5, 6, 7, 4, 8, 10.

Получив сегменты, он может пройти 1-3 непосредственно к приложению. Так как 4 не в порядке, он должен ждать 5-7, пока не получит 4. Затем он может пройти по 8, но он не получает 9 (или поврежден), поэтому должен подождать, чтобы пройти по 10, пока он не запросит повторную передачу сегмента 9 и не получит его.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .