tcpdump 로그 읽기
tcpdump 로그 읽기
tcpdump.org 페이지를 참조하여 예제를 읽어보자.
https://www.tcpdump.org/manpages/tcpdump.1.html
로그 해석
tcpdump를 떴을 때 아래와 같은 로그가 나왔을 경우에 대한 해석
로그
[1] IP rtsg.1023 > csam.login: Flags [S], seq 768512:768512, win 4096, opts [mss 1024][2] IP csam.login > rtsg.1023: Flags [S.], seq, 947648:947648, ack 768513, win 4096, opts [mss 1024][3] IP rtsg.1023 > csam.login: Flags [.], ack 1, win 4096 [4] IP rtsg.1023 > csam.login: Flags [P.], seq 1:2, ack 1, win 4096, length 1 [5] IP csam.login > rtsg.1023: Flags [.], ack 2, win 4096 [6] IP rtsg.1023 > csam.login: Flags [P.], seq 2:21, ack 1, win 4096, length 19 [7] IP csam.login > rtsg.1023: Flags [P.], seq 1:2, ack 21, win 4077, length 1 [8] IP csam.login > rtsg.1023: Flags [P.], seq 2:3, ack 21, win 4077, urg 1, length 1 [9] IP csam.login > rtsg.1023: Flags [P.], seq 3:4, ack 21, win 4077, urg 1, length 1
상세 읽기
[1] IP rtsg.1023 > csam.login: Flags [S], seq 768512:768512, win 4096, opts [mss 1024] 1) IP rtsg.1023 > csam.login:
- [from-rtsg:1023]부터 [to-csam.login]로, 2) Flags [S],
- Sync 플래그를 설정하여 3) seq 768512:768512
- 시퀀스 넘버는 768512
- seq [first:last] : => 송신 데이터의 시퀀스 넘버 시작과 끝이 768512로 동일하다 => 송신하는 데이터 사이즈가 0이다 => 데이터는 없고 단순히 SYN만 전송한다. 4) win 4096
- 윈도우 사이즈(수신 버퍼 사이즈) 4096이고 5) , opts [mss 1024]
- 최대 세그먼트 사이즈는 1024이다
- mss = max segment size 6) piggy back ack는 없다
[2] IP csam.login > rtsg.1023: Flags [S.], seq, 947648:947648, ack 768513, win 4096, opts [mss 1024] 1) IP csam.login > rtsg.1023: 2) Flags [S.],
- S[Syn].[ACK] 플래그를 설정. 3) seq, 947648:947648,
- seq number는 947648 3) ack 768513,
- ack number는 768513.
- 송신자가 다음에 보내야 하는 시퀀스 넘버
- =시퀀스 넘버까지 수신하였으며 다음 패킷부터 받아야 하므로 ack no = seq no + 1
- ack no = seq no + 1 = 768512 + 1 = 768513 4) , win 4096, opts [mss 1024]
- [1]과 동일 의미 5) 기타
- syn패킷에 ack를 같이 보내는, piggy back ack
[3] IP rtsg.1023 > csam.login: Flags [.], ack 1, win 4096
- csam의 syn[2]에 대한 ack 패킷
- 여기서부터 ack no가 1로 들어가는데 실제로는 [1]과 [2]의 seq no와 ack no는 절대값이지만 여기서부터는 상대값을 쓴다.
- rtsg가 csam의 syn을 받았으므로 ack no = 1, 즉, csam이 첫번째 바이트 보내면 된다고 알려줌
- tcpdump -S 옵션을 쓰면 상대 값이 아닌 절대 값을 출력 [4] IP rtsg.1023 > csam.login: Flags [P.], seq 1:2, ack 1, win 4096, length 1 [5] IP csam.login > rtsg.1023: Flags [.], ack 2, win 4096
- 특별히 패스
[6] IP rtsg.1023 > csam.login: Flags [P.], seq 2:21, ack 1, win 4096, length 19 1) IP rtsg.1023 > csam.login:
- 생략 2) Flags [P.],
- PUSH플래그+ack. 3) seq 2:21
- seq 2:21 -> 2~21바이트까지 19개의 바이트 송신 4) ack 1
- 5) win 4096, length 19
- 윈도우 사이즈 4096, 패킷 길이 19
[7] IP csam.login > rtsg.1023: Flags [P.], seq 1:2, ack 21, win 4077, length 1
- ack 21 => 다음 수신할 seq no가 21이다. => seq no를 20까지만 수신했다.(18바이트만 수신) => 하지만 송신자(rtsg)는 [6]의 seq no 21까지(19바이트) 송신했다. => 1바이트 수신 못함!!! => eX) 수신 버퍼 부족 등의 이유.
[8] IP csam.login > rtsg.1023: Flags [P.], seq 2:3, ack 21, win 4077, urg 1, length 1 => urg 1, 1바이트 urgent하게 보내주세요(rtsg의 seq no 21) [9] IP csam.login > rtsg.1023: Flags [P.], seq 3:4, ack 21, win 4077, urg 1, length 1 => urg 1, 1바이트 urgent하게 보내주세요(rtsg의 seq no 21)
기타
tcp flag
tcpdump : tcp flag
. : placeholder. no flag. s : syn. 연결 요청 ack : ack. 응답. 받은 패킷을 받았다고 응답함. f : fin. 정상 연결 종료 r : rst. 비정상 연결 종료 u : urg. 긴급한 데이터 p : push. 어플리케이션으로 데이터 바로 전달.
piggyback ack
- 수신 측에서 수신된 데이터에 대한 확인 응답을 즉시 보내지 않고
참조
[1] https://www.tcpdump.org/manpages/tcpdump.1.html [2] http://www.ktword.co.kr/test/view/view.php?m_temp1=3242