본문 바로가기

[+] Information/[-] Network

TCP 헤더 flag에 관하여..

* TCP 헤더 공부 중에 궁금한 점이 있어서 구글링 한 것을 다시 한번 정리하기 위하여 작성!



SIS 공부하면 무조건 공부해야 하는 필수항목 중 하나가 있다.

바로 tcpdump!!! 이 툴 실습을 해보지 않으면 필기에서는 몇문제 정도 틀리고 실기에서는 실무형이나 서술형에서 크나큰 점수를 잃을 수 있기 때문에 SIS 시험을 공부하는 사람이라면 대부분 한번쯤은 다뤄보는 툴이다.

인터넷에 있는 tcpdump 명령어들을 보면 tcp[13] == 2 이러한 명령라인을 봤을 것이다.

난 SIS 시험이 끝났을 때도 이 의미를 모르고 있었다(실기시험에 문제가 안나와서 다행 ㅠㅠ)

하지만 이번에 port scanner 프로젝트를 혼자 진행하면서 TCP 헤더에 대해서 다시 공부하게 되었고, 위 명령어의 의미를 알게 되었다.

일단 저 명령어의 의미는 SYN flag를 뜻한다는 것을 밝혀두고 왜 그런지 한번 알아보도록 하겠다.

아래는 TCP 헤더의 추상적 그림이다.

  
TCP 헤더 그림을 보면 byte offset이 있다. tcp[13]에서 13이란 byte offset을 뜻하는 것이다.

첫번째 source port 영역은 0 ~ 3 offset 이고,

두번째 SequenceNumber 영역은 4 ~ 7 offset 이고,

세번째 Ack Number 영역은 8 ~ 11 offset 이고,

네번째가 12 ~ 15 offset으로 flag가 있는 영역이다.

12 ~ 15 offset 중 13 offset이 TCP flag에 해당하는 번호인 것이다.


tcp[13]을 다시 해석하자면 tcp offset 13번을 뜻하는 것이다.

이제 왜 2가 SYN flag인지 보면, 그림에도 나와있지만 번호가 2로 정해져있다.

이 번호들에 계산방식은 아래와 같다.

그림을 보면 flag들이 C E U A P R S F 순서로 되어 있는데 이 순서는 다음과 같다.

C  E  U  A  P  R  S  F
7   6  5   4  3   2  1  0 


여기서 SYN flag를 선택하면 00000010이 되어 16진수로 바꾸면 2가 되는 것이다.

만약 SYN/ACK flag를 원하면 

00010010이 되어 16진수로 바꾸면 12가 되는 것이다.

결론적으로 tcp[13] == 2는 우리말로 풀어쓰면 아래와 같다.

"tcp헤더의 13 offset에서 SYN flag를 "

해당 그림에도 flag별 번호가 나와 있으니 참고하면 좋겠다.

시험때는 외워가는 것이 남는 것이기 때문에 외워두면 tcpdump 명령어를 보고 어떠한 패킷을 스니핑 하고 싶은지 금방 파악 할 수 있을 것이다.