2014년 1월 15일 수요일

패킷 저장시 용량을 줄이기 위한 고민

패킷 저장시 늘어만 가는 크기에 고민을 해본적이 있을것입니다. 무작정 큰 파일로 저장하기에도 용량 측면에서 문제가 있고 해당 파일을 열어보기에도 쉽지가 않습니다. 그러므로 패킷을 덤프하는 경우 그 이유가 명확해야 범위를 결정지을 수 있고, 얼마나 덤프를 해야하고 용량은 어느정도 까지 해야 하는지 대략 산출이 됩니다.

무조건 많이 패킷을 저장한다고 해서 얻을 수 있는 것이 많아진다고도 볼 수 없습니다.  패킷을 덤프하는 범위와 목적 그리고 환경적 요인에 따라 이것은 다 달라지기 때문에 어떻게 하시라고 딱 정해드리기는 어렵습니다.  다만 다음과 같은 부분을 고려한다면 패킷파일의 크기를 줄일 수 있으리라 생각됩니다.

1. 패킷 파일 저장시 범위를 명확히 하기

특정IP , 포트번호와 같이 무엇인가 범위를 잡을 수 있는 것이 있다면 범위 지정이 필요합니다.

2. 얼마나 오랜시간동안 저장할 것인가?

패킷 분석 목적에 따라서 달라지지만 얼마동안 저장하느냐에 따라 패킷크기가 크게 달라집니다.  무조건 오래하는 것이 좋은것은 아닙니다. 우선 짧은 시간 패킷을 저장해 보고 대략 패킷파일이 늘어나는 속도와 그 내용을 한번 보고서 시간을 결정하는 것도 좋습니다.  패킷덤프할 시간이 결정되면 파일의 적정크기도 판단하셔서 특정 크기 이상이 되면 다른 파일로 저장되도록 하는 것이 분석시에 편리합니다. 물론 하나의 파일로 모으는 경우가 필요할 경우도 있을것 같습니다. 만약 파일을 저장시에 분할한다면 와이어샤크에서는 패킷 덤프시 옵션을 지정할 수 가 있고, 큰 패킷로 저장을 하였다면 추후에 Split 를 하여 적정 크기로 만들어 분석을 할 수 있습니다. 패킷 분할과 관련해서는 블로그에서 검색해 보시면 몇 가지 방법들이 나옵니다.

3. 패킷저장 포맷 - Pcap vs Pcap-ng

오랜시간동안 패킷을 저장한다면 저장 포맷도 고려해볼 필요가 있습니다. 와이어샤크 최근 버전에서는 기본 포맷이 pcap 에서 pcap-ng 로 변경이 되었습니다. 비교적 최신 버전의 와이어샤크를 사용하신다면 본인도 모르게 패킷파일이 pcap-ng 로 저장되고 있는 것입니다. 가끔 전달받는 패킷의 포맷을 보면 과거보다 확실히 pcap-ng 포맷이 증가된걸 느낄 수 있습니다. pcap-ng 포맷은 pcap 보다 포맷구조가 더 유연해 졌으며 저장되는 내용도 더 많습니다.  최근 포스팅한 pcap-ng 포맷 구조 글을 참고해 보시면 이유를 아실 수 있습니다. 이러한 이유로 부가적인 정보가 더 기록이 되기 때문에 특별히 pcap-ng 포맷이 필요하지 않다면 용량적인 측면에서도 pcap 포맷으로 저장하는 것이 더 유리합니다.

다음의 경우를 한번 살펴보겠습니다. test.pcap 파일은 pcap-ng 포맷파일입니다.
$ file test.pcap
test.pcap: pcap-ng capture file - version 1.0

이 test.pcap 파일은 대략 크기가 2.6 기가 정도가 되는데 pcap 포맷으로 변경하여 한번 비교해 보도록 하겠습니다.

$ editcap -F libpcap -T ether  test.pcap convert.pcap

아래와 같이 pcap 포맷으로 변경하여 보면 약 300 메가 정도의 차이를 보입니다.

-rwxr-xr-x 1 root    root    2.6G Dec 12 16:09 test.pcap
-rw-rw-r-- 1 root     root    2.3G Dec 20 18:00 convert.pcap

만약 여러분이 상당히 오랜시간 패킷파일을 저장한다면 저장되는 패킷 포맷 방식에 따라 파일 크기가 커질 수 있다는 점입니다.

4. 패킷을 다 들여다 볼 것인가?

보통 패킷 덤프시 큰 용량을 차지하는 부분이 패킷의 페이로드 부분입니다. 헤더만 놓고 본다면 그 자체는 크지 않지만 데이터가 들어가면 이게 큰 부분을 차지합니다.  전체 패킷을 다 볼 필요가 없고 일부만 저장해도 된다고 할 경우에는 snaplen 크기를 지정하여 제한할 수가 있습니다. tcpdump 를 사용한다면 -s 를 통해 이 크기를 제한할 수 있습니다. 만약 -s 100 이 된다고 가정하면 패킷당 100 바이트 까지만 저장이 된다는 것이죠. 그렇다면 헤더 정보와 일부 페이로드만이 약간 포함될 것입니다. 물론 데이터를 전체 못 본다는 것은 있지만 여러분들의 필요에 따라 제한하여 저장해도 괜챦다면 이 방법은 패킷파일 크기를 줄이는데 큰 도움을 줄 것입니다.

와이어샤크에서는 캡쳐옵션에서 Limit each packet to "xxx" bytes 옵션을 통해 조정할 수 있습니다.

5. 압축으로 크기를 줄이자

패킷파일은 압축을 할 경우 용량 절약을 크게 볼 수 있는 경우가 많습니다. 저장해서 일정기간 동안 보관해야 하는 경우라면 압축을 해서 보관하는 것이 좋습니다. 물론, 패킷파일이 큰 경우에는 압축을 하고 해제하는데 많은 시간이 소요될 수 있다는 점도 알아두세요!

이상으로 패킷파일 크기를 줄이기 위한 몇 가지 방법을 적어 보았습니다.  패킷파일 저장시 한번쯤 참고해 보셨으면 합니다.

From Rigel