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