Найти в Дзене

Как работает Zip-архив. Объясняю простыми словами

Оглавление

Если у вас есть компьютер (а у кого его нет), то вы наверняка сталкивались с архивами. И всегда было интересно, как это так – файл можно сжать, а потом распаковать в точности таким, каким он был, это как сжать машину, запихать ее в чемодан, а потом достать, «разжать» и поехать на ней. Так ведь не бывает!

Сегодня Игорь Позняев, автор канала «Блог системного администратора», будет объяснять, как работает магия, точнее, Zip-архивы. Заваривайте чай, будет интересно.

Сперва – зачем нам вообще архивы?

Если бы их не было, то отправлять файлы по почте было бы намного сложнее, так как пришлось бы отправлять их по одному, что долго и неудобно. Да и размер, в данном случае, имеет значение – сервера почтовых сервисов не резиновые, да и сетевая инфраструктура – тоже. Поэтому люди придумали оригинальное решение – сделать архивы.

Он позволяет, во-первых, сохранить иерархию папок и имен, но передать их одним файлом, то есть еще и объединяет все файлы, но с сохранением иерархии исходных, поэтому они так популярны в сети. Помимо этого, архивы позволяют сжимать данные, ну а если файл занимает меньше места – то и передается быстрее.

Как работает Zip-архив. Объясняю простыми словами
Как работает Zip-архив. Объясняю простыми словами

Недостаток только в том, что кодирование (упаковка) и декодирование (распаковка) происходят на компьютере пользователя, но если файл небольшой – то и процесс обычно недолгий.

Но как это работает?

Zip-архивы используют алгоритмы сжатия без потерь, то есть если вы упаковали файл, отправили его, другой человек получил файл и распаковал его – у него получится точно такой же файл, каким он был до архивации. Самый распространенный алгоритм сжатия, который используется в ZIP – это Deflate, и работает он несложно.

Первый этап – поиск повторяющихся участков данных и замена их на специальные коды. Например, в тексте «мама мыла раму, мама мыла пол», сочетание «мама мыла» повторяется дважды. Это значит, что можно закодировать его один раз, а потом просто вставлять код, который укажет, что здесь стоит точно такая же последовательность.

Затем данные кодируются по алгоритму Хаффмана. Это метод статистического сжатия, при котором часто повторяющиеся символы получают более короткие представления, а редкие – более длинные. При создании архива можно выбрать степень сжатия, чем она выше – тем дольше будет происходить упаковка и распаковка, но и тем меньше места будет занимать сам архив.

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

-2

В конце ZIP-архива находится центральный каталог. В нем содержится информация о всех файлах в архиве. Он нужен для того, чтобы программа-архиватор могла быстро получить список содержимого архива, не читая и не распаковывая весь файл.

А как происходит распаковка?

В целом, она не сложнее упаковки. Для начала, программа-архиватор считывает центральный каталог, чтобы понять – какие в нем файлы и где они расположены. Используя эту информацию, программа находит заголовки каждого файла в архиве и проверяет контрольную сумму. Если контрольная сумма совпадает с расчетной, файл считается целым.

Далее файл распаковывается тем же алгоритмом, который был применен при создании архива. По сути, при распаковке происходят те же действия, что и при сжатии, но в обратном порядке. В конце восстанавливаются исходные папки и их структура.

-3

При этом большие архивы могут быть разбиты на многотомные архивы – это когда один большой файл дробится на несколько архивов. Нужно это для того, чтобы можно было переносить его на носителях с ограниченной емкостью (если вы покупали игры или большие программы на CD в нулевые, то знаете, что у некоторых игр несколько установочных дисков – здесь примерно тот же принцип).

А еще ZIP-архивы могут быть защищены паролем. В этом случае программа-архиватор зашифрует содержимое архива, а для его распаковки потребуется пароль, соответственно, без пароля получить доступ к данным не получится. Раньше они шифровались алгоритмом ZipCrypto, который легко взламывался, но современные архивы используют куда более надежный AES (впрочем, если вам нужна безопасность, лучше использовать не ZIP, а 7z).

Что мы узнали?

Как видите, никакой магии здесь нет – только алгоритмы, притом не самые сложные. Хотя стоит помнить, что мы разобрали это на примере одного формата (помимо Zip, есть еще куча форматов архивов, например, вы, скорее всего, сталкивались с .7z), а алгоритмы сжатия не ограничиваются Deflate, хотя он и используется чаще всего.

Причем архивы развиваются и сегодня. Люди изобретают новые, более эффективные или быстрые реализации (вроде ZIP64), так что вполне возможно, мы еще увидим архивы на несколько терабайт, сжатые до размеров считанных мегабайт.

А как часто вы пользуетесь архивами?