Tệp nén GZIP (.gz)

IETF Tiêu chuẩn

Gzip (GZ) là tiện ích nén và định dạng tệp chuẩn của GNU, được triển khai rộng rãi trên các hệ điều hành Unix và máy chủ HTTP trên internet để nén tệp và tài nguyên web nhanh chóng.

Chuyển đổi TAR sang GZ

Trình chuyển đổi từ TAR sang GZ miễn phí trên trình duyệt. Chuyển đổi tệp ngay lập tức trên thiết bị của bạn.

Kiểm tra & Siêu dữ liệu

Các hệ điều hành và trình phân tích tệp nhận dạng tệp GZ bằng cách kiểm tra chuỗi byte nhị phân đầu tệp:

Chọn hoặc thả tệp vào đây

Riêng tư - tệp không bao giờ rời khỏi thiết bị của bạn

Hoặc dán Ctrl+V
Cam kết bảo vệ quyền riêng tư, không truyền dữ liệu qua mạng: 0 byte được tải lên máy chủ bên ngoài. Toàn bộ quá trình xử lý diễn ra cục bộ trong hộp cát trình duyệt của bạn.

Chữ ký ở đầu tệp (mẫu byte nhận diện)

Các hệ điều hành và trình phân tích tệp nhận dạng tệp GZ bằng cách kiểm tra chuỗi byte nhị phân đầu tệp:

CHỮ KÝ HEX (OFFSET 0):

1F 8B 08

BIỂU DIỄN ASCII: ..\x08

Tiêu chuẩn hóa: IETF RFC 1952

Thông số kỹ thuật

Kiến trúc ContainerTiêu đề 10 byte (magic 0x1F 0x8B, phương pháp 8, cờ, mtime, hệ điều hành), tiếp theo là luồng DEFLATE và chân trang 8 byte
NénThuật toán DEFLATE (cửa sổ trượt LZ77 + mã hóa Huffman)
Thứ tự byteCác số nguyên trong tiêu đề và chân trang theo thứ tự byte nhỏ (little-endian)
Không gian màuKhông áp dụng (vùng chứa kho lưu trữ)
Kênh & Cấu trúcLuồng byte nén của một tệp
Kích thước tối đaKích thước không nén được ghi theo modulo 2^32 (hỗ trợ luồng dài không giới hạn)
Độ trong suốtBảo toàn dữ liệu không mất dữ liệu, khớp chính xác từng bit
Truyền phát & Tăng dầnPhát truyền một lượt tuần tự qua pipe và mạng HTTP

Ma trận so sánh kỹ thuật: GZ so với các đối thủ

Thuộc tính kỹ thuậtGZ (Hiện tại)BZ2BROTLIZSTD
Tốc độ giải nénNhanh (~300 MB/s)Chậm (~40 MB/s)Rất nhanh (~400 MB/s)Cực nhanh (>1,5 GB/s)
Được sử dụng rộng rãi trên web100% tất cả trình duyệt & máy chủKhông hỗ trợ trình duyệt webĐược hỗ trợ qua HTTPS trong mọi trình duyệtHỗ trợ trình duyệt & máy chủ đang tăng
Đóng gói đa tệpYêu cầu vùng chứa TAR (.tar.gz)Yêu cầu vùng chứa TAR (.tar.bz2)Luồng thô hoặc vùng chứa tùy chỉnhYêu cầu vùng chứa TAR (.tar.zst)
Xác thực tổng kiểm traCRC 32-bit (CRC-32)CRC 32-bit trên mỗi khốiKhông có sẵn trong luồngxxHash 64-bit

Các dạng hỏng thường gặp và hướng dẫn khôi phục bằng mã hex

Lỗi giải nén: 'gzip: stdin: unexpected end of file'.

Nguyên nhân gốc rễ: Việc truyền tệp kết thúc sớm làm cắt đứt luồng DEFLATE hoặc chân trang CRC32 8-byte.

Khắc phục: Giải nén các phần nội dung bằng 'gzip -d --keep broken.gz' hoặc Trình trích xuất Gzip File2File.app.

Phân tích bảo mật và các đường tấn công nhằm vào bộ phân tích cú pháp

Trình phân tích cú pháp Gzip xử lý các tiêu đề do người dùng kiểm soát và các luồng bit DEFLATE cần được bảo vệ chống lại bom giải nén.

Các véc-tơ tấn công đã biết

  • Bom giải nén (zip bomb) mở rộng hàng megabyte dữ liệu Gzip thành hàng trăm gigabyte dung lượng đĩa.
  • Tràn bộ đệm khi đọc chuỗi tên tệp gốc tùy chọn từ tiêu đề.
  • Tràn số nguyên trong quá trình so sánh kiểm tra CRC 32-bit.

Biện pháp phòng thủ tốt nhất: Áp dụng hạn mức giải nén nghiêm ngặt và giới hạn trần bộ nhớ trong các dịch vụ tiếp nhận tự động.

Nguồn gốc lịch sử và các cột mốc

1996IETF chính thức hóa thông số kỹ thuật định dạng tệp Gzip thành RFC 1952.
1993Được Dự án GNU áp dụng để thay thế tiện ích 'compress' độc quyền của Unix (tệp .Z).
1992Jean-loup Gailly và Mark Adler tạo ra Gzip như một công cụ nén không có bằng sáng chế cho phong trào phần mềm tự do.

Ưu điểm & Lợi ích chính

  • Tiêu chuẩn chung cho nén HTTP internet ('Content-Encoding: gzip') được hỗ trợ bởi 100% khách hàng web.
  • Bảo lưu dấu thời gian sửa đổi tệp gốc và tên tệp gốc tùy chọn bên trong tiêu đề 10-byte.
  • Mức tiêu thụ CPU nhẹ trong quá trình giải nén, chạy mượt mà trên các thiết bị di động công suất thấp và bộ định tuyến.

Hạn chế & Nhược điểm kỹ thuật

  • Chỉ nén tệp đơn: không thể nén nhiều tệp hoặc thư mục mà không gom chúng vào vùng chứa TAR trước.
  • Tỷ lệ nén thấp hơn các thuật toán hiện đại như Brotli và Zstandard trên văn bản web hiện đại.
  • Trường kích thước chưa nén ở cuối tệp lưu kích thước theo modulo 2^32 trên 32 bit, gây ra lỗi hiển thị khi giá trị quay vòng trên các tệp lớn hơn 4 GB.

Thông tin kỹ thuật thú vị

  • Các byte nhận dạng 0x1F 0x8B được chọn vì lịch sử 0x1F là byte đầu tiên của các tệp 'compress' trên Unix, trong khi 0x8B nhận dạng Gzip.
  • Hơn 80% tổng số trang web trên internet sử dụng tính năng nén Gzip để phân phối các trang web đến trình duyệt.
  • Jean-loup Gailly viết mã nén trong khi Mark Adler viết mã giải nén (inflate); cả hai đều nhận được Giải thưởng Hệ thống Phần mềm ACM.

Các câu hỏi kỹ thuật thường gặp

Tại sao tôi không thể nén một thư mục bằng Gzip?

Gzip được thiết kế để nén một luồng byte đơn lẻ. Để nén một thư mục, các hệ thống Unix trước tiên gộp thư mục thành một tệp .tar duy nhất, sau đó nén nó bằng Gzip để tạo thành tệp .tar.gz.

Sự khác biệt giữa .gz và .zip là gì?

.zip là một định dạng lưu trữ đóng gói nhiều tệp lại với nhau kèm theo mục lục thư mục. .gz chỉ nén một tệp duy nhất và thường được kết hợp với tar trên các hệ thống Unix.

Làm cách nào để giải nén tệp .gz trên Windows hoặc Mac?

Hãy sử dụng File2File.app để giải nén tức thì các tệp .gz trực tiếp trên trình duyệt web của bạn mà không cần cài đặt bất kỳ phần mềm nào.