HOME > GZIP 파일의 구조

 

GZIP 파일의 구조

 

 

참고 자료

 

GZIP 파일의 기본 포맷

 

@ 작은 박스 하나가 한 바이트를 의미한다.


반드시 들어가야 하는 부분

ID1

ID2

CM

FLG

 

MTIME

 

 

XFL

OS

 

FLG.FEXTRA가 세팅된 경우

XLEN

 

XLEN byte of extra field

 

FLG.FNAME이 세팅된 경우

Original filename, zero-terminated

 

FLG.FHCRC가 세팅된 경우

CRC16

 

 

반드시 들어가야 하는 부분

압축된 내용(Blocks)

 

반드시 들어가야 하는 부분

CRC32

 

 

 

ISIZE

 

 

 

 

 

 

Member header와 trailer – 예제 보기

 

1. ID1과 ID2

 

 

파일의 포맷을 알려주는 부분이다.
GZIP 파일의 경우 ID1과 ID2는 정해진 값을 31과 139를 갖는다.
16진수로는 0x1f, 0x8b이다.

 

2. CM (Compression Method)

 

 

GZIP 파일의 경우 8로 세팅한다.

8은 ZLIB의 deflate 압축 방법을 의미한다.

 

3. FLG

 

 

 

Bit 0

FTEXT

Bit 1

FHCRC

Bit 2

FEXTRA

Bit 3

FNAME

Bit 4

FCOMMENT

Bit 5

Reserved

Bit 6

Reserved

Bit 7

Reserved


(1) FTEXT

FTEXT가 세팅되면 ASCII 형식의 파일이라는 것을 알려준다.
세팅되지 않은 경우에는 Binary 파일로 인식한다.
하지만 있어도 되고 없어도 되는 옵션이므로 중요하지 않다.

(2) FHCRC

FHCRC가 세팅되면 기본 헤더 뒤에 CRC16 정보가 붙는다.
이는 압축된 내용 다음에 붙는 CRC32정보와는 다르다.

즉, 이 CRC16은 헤더 파일에 대한 것이고 뒤에 붙는 CRC32는 원본파일과 압축된 파일에 대한 것이다.

 

(3) FEXTRA

필요에 따라 추가 정보를 제공하기 위한 필드일 뿐이다.

(4) FNAME

FNAME이 세팅되면 ‘\0’로 끝나는 원본 파일의 이름이 추가된다.
이 때 파일 이름은 ISO-8859-1(LATIN-1)형식으로 표현해야 한다.
LATIN-1은 영어처럼 유럽에서 사용하는 1바이트 문자를 나타낸다.

(5) FCOMMENT

FCOMMENT가 세팅되면 ‘\0’으로 끝나는 간단한 설명이 들어간다.
옵션일 뿐이다.

 

4. MTIME (Modification TIME)

 

 

압축 파일이 생성된 시간이 들어간다.
유닉스에서 사용하는 시간 형태로 1970년 1월 1일 00:00:00 이후의 시간을 초로 계산한 값이 들어간다. (흔히 UNIXSTAMP라고 부른다.)

MTIME=0은 Modificaton이 이용 가능하지 않다는 뜻이다.

 

5. XFL (eXtra Flags)

 

 

CM = 8 인 경우에는 XFL은 2 또는 4의 값을 갖는다.

XFL=2 è 속도가 느린 대신 압축률이 가장 높은 Deflate

XFL=4 è 속도가 가장 빠르나 압축률이 가장 낮은 Deflate

 

 

6. OS (Operating System)

 

 

압축이 일어난 파일 시스템을 알려준다.
텍스트 파일의 End-of-Line을 구별하는 데에 유용하다.

0

FAT file system (MS-DOS, OS/2, NT/Win32)

1

Amiga

2

VMS or Open VMS

3

Unix

4

VM/CMS

5

Atari TOS

6

HPFS file system (OS/2, NT)

7

Macintosh

8

Z-System

9

CP/M

10

TOPS-20

11

NTFS file system (NT)

12

QDOS

13

Acorn RISCOS

255

unknown

 

 

 

7. CRC32

 

 

ISO 3309에 기술된 CRC-32 algorithm을 사용한다.
헤더에 대한 정보를 포함하는 CRC16과는 다르다는 점에 유의한다.

 

8. ISIZE(Input Size)

 

 

압축되기 전의 파일 사이즈를 기록한다.