3

Чтобы четко показать мой вопрос, я собираюсь использовать довольно большие цифры. Файловый сервер подключен к Интернету через линию 1 Гбит / с. Сервер отправляет клиенту файл размером 100 ГБ. Файл фрагментируется на пакеты и отправляется со скоростью 1 Гбит / с клиентам интернет-провайдера. Клиент, однако, подключен к провайдеру с линией 1 Мбит / с. Это будет означать, что интернет-провайдеру придется сохранять / кэшировать все данные, отправляемые ему с файлового сервера, до тех пор, пока все они не будут получены клиентом.

Это так, или сервер каким-то образом отправляет пакеты с той же скоростью, что и самая медленная линия между сервером и клиентом?

2 ответа2

11

Интернет не использует только один протокол. Он даже не использует только один протокол за раз: он на самом деле использует сразу несколько, которые накладываются друг на друга, чтобы делать разные вещи. Если мы немного упрощаем вещи, можно сказать, что они используют четыре.

  • Канальный уровень: протокол, который позволяет передавать сигнал по проводам (или радиоволнам, или вспышкам света, или что-то еще) на другую машину на другом конце. Примеры включают в себя PPP, WiFi и Ethernet.
  • Сетевой уровень: протокол, который позволяет передавать сигнал по цепочке машин, чтобы вы могли получать данные между машинами, которые не подключены напрямую. Здесь живут IP и IPv6.
  • Транспортный уровень: протокол, который позволяет вам разобраться в этом сигнале. Некоторые, например TCP, устанавливают "виртуальные соединения" между двумя машинами, как если бы между ними был прямой провод. Другие, такие как UDP, просто передают биты данных с одного компьютера на другой. Разные протоколы имеют свои сильные и слабые стороны, поэтому их так много.
  • Уровень приложений: это то, что мы обычно называем "протоколами". Они специализируются на определенных типах данных, предназначенных для определенных целей. Некоторые примеры включают FTP, HTTP и BitTorrent, которые все передают файлы.

Те протоколы передачи файлов, о которых я упоминал, как правило, накладываются поверх TCP (который сам накладывается поверх IP), и именно здесь мы подходим к вашему конкретному вопросу. TCP старается изо всех сил работать как провод по прямой между машинами: когда сервер отправляет пакет, он может быть уверен, что клиент получил его, и он может быть уверен, что клиент получил свои пакеты в том же порядке, что сервер отправил их. Отчасти это происходит потому, что каждый пакет, который отправляет сервер, должен быть подтвержден клиентом: он посылает небольшой сигнал обратно: «Хорошо, я получил этот пакет, который вы отправили; я готов к следующему». Если сервер не получает это подтверждение, он продолжает отправлять пакеты до тех пор, пока не получит (или решит, что это никогда не сработает, и сдается).

Это ключ к ответу на ваш вопрос. Сервер не может отправить Пакет 2, пока он не узнает, что Пакет 1 прошел, что не может произойти, пока Пакет 1 не будет подтвержден, и это не может произойти, пока Пакет 1 действительно не будет завершен. Серверы в середине цепочки не должны кэшировать какие-либо данные (не более одного пакета за раз, во всяком случае), потому что к тому времени, когда машина даже видит Пакет 2, она знает, что ей больше не нужен Пакет 1 ,

Последний пункт: технически это означает, что Интернет не должен кэшировать данные так, как вы говорите. Если кто-то действительно хочет кэшировать все эти данные, он может; в протоколах нет ничего, что могло бы остановить это. Но Интернет не нуждается в этих кешах для работы.

2

Большинство серверов (Web, FTP, что у вас есть) используют регулирование пропускной способности, чтобы избежать того, что один компьютер перегружает всю доступную пропускную способность. Каждое соединение может быть ограничено определенной скоростью, так что несколько клиентов могут подключаться и не подвержены замедлению. По крайней мере, слишком много. Помните, что ваше соединение ограничено самой медленной связью в вашей цепочке.

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