'tcpdump'에 해당되는 글 1건

  1. 2013.05.16 tcpdump 결과물 해석하기
IT 이야기2013. 5. 16. 05:10

Tcpdump는 네트워크 관리자에게 있어 상당히 유용한 툴이고 wireshark와 같은 GUI버전보다 활용도도 높고 검색도 용이한 면이 있다. 또한 wireshark도 tcpdump엔진을 사용하고 있으니 tcpdump를 공부해 놓는것이 많은 도움이 될 것이다.

일반적인 통신과 다른 여러 형태의 통신을 비교함으로 상대 호스트의 상태를 알 수 있다.


1. 일반적인 통신


TCP/IP는 일반적으로 3-way handshake 방식으로 연결을 통해 통신을 시작하게 된다.

아래의 결과값은 


#tcpdump -nn host 192.168.2.165 and port 23


을 통해 얻어진 결과물이다.


20:06:32.845356 192.168.2.10.1249 > 192.168.2.165.23:S 3263977215:3263977215(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)

위에서 보면 192.168.2.10 호스트가 192.168.2.165 로 telnet(23)을 요청한 것을 알 수 있다. SYN으로 통신을 요청하였고 initial sequence number는 3263977215이다.


20:06:32.845725 192.168.2.165.23 > 192.168.2.10.1249: S48495364:48495364(0) ack 3263977216 win 32120 <mss 1460,nop,nop,sackOK> (DF)

telnet서버는 ICN에 +1을 해서 ACK를 보낸다. 또한 다시 SYN을 보내서 응답을 요청한다. (이래서 혹 4-way handshake라고 부르는 사람들도 있다.)


20:06:32.845921 192.168.2.10.1249 > 192.168.2.165.23: . ack 1 win 17520(DF)

초기에 전송요청을 했던 응답자가 ACK 를 보냄으로써 연결은 성립되게 된다.


2. 연결을 끊을 경우


일반적으로 세션을 끊을 때는 서버쪽에서 먼저 끊게된다.


20:07:32.916410 192.168.2.165.23 > 192.168.2.10.1249: F 147:147(0) ack56 win 32120 (DF)

192.168.2.165 에서 FIN을 요청하였고,


20:07:32.928907 192.168.2.10.1249 > 192.168.2.165.23: F 56:56(0) ack 148 win 17374 (DF)

클라이언트는 ACK로 응답하면서 FIN을 요청한다. 


20:07:32.929121 192.168.2.165.23 > 192.168.2.10.1249: . ack 57 win 32120(DF)

그러면 서버쪽에서는 ACK로 응답하면서 정상적인 세션을 종료하게 된다.


3. telnet 포트가 closed된 상태


일반적으로 해당 포트가 열려져 있지 않은 경우에는 서버는 RST로 응답하고 통신을 중지한다. 반면 클라이언트는 3번에 걸쳐서 연결을 시도하고 실패하면 연결시도를 그만두게 된다.


05:28:00.080798 192.168.2.10.1063 > 192.168.2.165.23:S 3034008467:3034008467(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)


05:28:00.080979 192.168.2.165.23 > 192.168.2.10.1063: R 0:0(0) ack 3034008468 win 0


05:28:00.579420 192.168.2.10.1063 > 192.168.2.165.23: S 3034008467:3034008467(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)


05:28:00.579524 192.168.2.165.23 > 192.168.2.10.1063: R 0:0(0) ack 1 win 0


05:28:01.080114 192.168.2.10.1063 &glt; 192.168.2.165.23: S 3034008467:3034008467(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)


05:28:01.080225 192.168.2.165.23 > 192.168.2.10.1063: R 0:0(0) ack 1 win 0


4. telnet 연결 거부 (tcp wrapper)


tcp wrapper나 방화벽에 시스템이 막혀 있을 때는 다음과 같은 결과값을 가지게 된다.


05:40:39.838710 192.168.2.10.1064 > 192.168.2.165.23: S 3223709294:3223709294(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)


05:40:39.839045 192.168.2.165.23 > 192.168.2.10.1064: S 063202536:2063202536(0) ack 3223709295 win 32120 <mss 1460,nop,nop,sackOK> (DF)


05:40:39.839295 192.168.2.10.1064 > 192.168.2.165.23: . ack 1 win 17520 (DF)


05:40:44.852844 192.168.2.165.23 > 192.168.2.10.1064: F 1:1(0) ack 1 win 32120 (DF)

이때 서버는 FIN을 보내면서 연결을 일방적으로 중지하게 된다.


05:40:44.853137 192.168.2.10.1064 > 192.168.2.165.23: . ack 2 win 17520 (DF)

클라이언트는 다시 ACK를 보내게 된다.


05:40:44.855050 192.168.2.10.1064 > 192.168.2.165.23: F 1:1(0) ack 2 win 17520 (DF)


05:40:44.855176 192.168.2.165.23 > 192.168.2.10.1064: . ack 2 win 32120 (DF)


서버와의 통신이 이루어지지 않을때 여러가지 경우의 수를 생각할 수 있지만 tcpdump를 통해서 원인을 찾아낸다면 문제해결 시간을 많이 단축할 수 있을 것이다.

Posted by 구텐모르겐