Tệp nén GZIP (.gz)
IETF Tiêu chuẩnGzip (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ữ 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 08BIỂU DIỄN ASCII: ..\x08
Tiêu chuẩn hóa: IETF RFC 1952
Thông số kỹ thuật
| Kiến trúc Container | Tiê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én | Thuật toán DEFLATE (cửa sổ trượt LZ77 + mã hóa Huffman) |
| Thứ tự byte | Các số nguyên trong tiêu đề và chân trang theo thứ tự byte nhỏ (little-endian) |
| Không gian màu | Không áp dụng (vùng chứa kho lưu trữ) |
| Kênh & Cấu trúc | Luồng byte nén của một tệp |
| Kích thước tối đa | Kí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ốt | Bả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ần | Phá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ật | GZ (Hiện tại) | BZ2 | BROTLI | ZSTD |
|---|---|---|---|---|
| Tốc độ giải nén | Nhanh (~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 web | 100% 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ệt | Hỗ trợ trình duyệt & máy chủ đang tăng |
| Đóng gói đa tệp | Yê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ỉnh | Yêu cầu vùng chứa TAR (.tar.zst) |
| Xác thực tổng kiểm tra | CRC 32-bit (CRC-32) | CRC 32-bit trên mỗi khối | Không có sẵn trong luồng | xxHash 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
Ư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.
Các cặp chuyển đổi GZ liên quan
Việc chuyển đổi tệp lưu trữ TAR thành tệp lưu trữ GZIP đóng gói một tập hợp tệp chưa nén thành một luồng nén duy nhất bằng thuật toán DEFLATE không mất dữ liệu, nhằm giảm đáng kể kích thước tệp.
Trích xuất dữ liệu TAR từ kho lưu trữ TAR được nén bằng GZIP, chẳng hạn .tar.gz hoặc .tgz.