개요

ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜)는 인터넷 프로토콜 스위트에 기록된 주요 프로토콜 가운데 하나이다. 네트워크 컴퓨터 위에서 돌아가는 운영체제에서 오류 메시지(Requested service is not available 등)를 전송받는 데 주로 쓰이며 인터넷 프로토콜의 주요 구성원 중 하나로 인터넷 프로토콜에 의존하여 작업을 수행한다. 프로토콜 번호 1로 할당되고 시스템 사이에 데이터를 교환하지 않거나 최종 사용자에 적용되지 않는다는 점에서 TCPUDP와는 다르다.(ping 이나 traceroute 같은 몇몇 진단 프로그램 제외) 인터넷 프로토콜 버전 4(IPv4) 용 ICMP는 ICMPv4로 알려져 있고, 유사하게 IPv6은 ICMPv6이다.

메시지 종류

ICMPv4 기준이며, () 안은 실제 부여된 메시지 번호이다.

  1. Echo request (8) : 해당 수신자가 이 메시지를 받으면 응답을 해 달라는 요청이다.
  2. Echo reply (0): Echo request 를 받은 수신자가 보내주는 응답.
  3. Destination Unreachable (3) : 네트워크가 끊겨 있거나, 장비가 꺼져 있거나, 경로가 없거나 등 여러 이유로 최종 목적지에 도달할 수 없을때 보내지는 메시지이다.
  4. Time Exceeded (11) : TTL 값이 감소하여 0 이 되었을때 이 메시지를 송신자에게 돌려 준다.

이를 사용하는 유틸리티

핑(Ping)

해당 IP 를 가진 장비에 접속 가능한지 확인하는 프로그램이며 위에 언급한 echo request 를 던지고, 이로 부터 받은 echo reply 를 확인한다. 정상적으로 echo reply 를 수신하는 경우 수신까지 걸릴 시간을 계산하여 해당 장비까지 회선 속도를 가늠해 볼 수 있다. 반대로 reply 를 수신하지 못하거나, destination unreachable 을 수신하게 되면 해당 장비에 도달할 수 없다는 것을 알 수 있다.

>>ping google.com

트레이스라우트(traceroute)

해당 장비까지 가는 경로를 추척하는 프로그램이다.

간략히 설명하면 모든 라우터는 패킷을 수신하면 TTL 을 1을 감소시키고 전달해야 하는데, 만약 TTL 이 0 이 되면 패킷을 버리고, 대신 time exceeded 메시지를 송신측에게 돌려 주게 된다. 이런 특성을 이용해서 처음에는 TTL = 1 로 설정하고 패킷을 쏘면, 제일 처음 만나는 라우터가 time exceeded 메시지를 보내기에 이 라우터의 IP 주소를 알 수 있게 된다. 그 다음 TTL = 2 로 패킷을 쏘고, 그 다음에는 TTL = 3, 4, 5, 6 ... 으로 최종 목적지에 도달할 때까지 TTL 을 증가시키며 패킷을 쏜다.

이를 이용하면 최종 목적지까지 가는 경로를 모두 확인 할 수 있다.

>>traceroute naver.com

보안 문제

핑은 DDOS 공격등을 하려 할때 대상을 검색하는 용도로 사용하거나, 아니면 핑 자체를 이용해서 공격에 사용하기도 한다. 그래서, 보안 관계로 대다수의 PC 등은 핑을 받아도 reply 를 보내지 않는다. 상용 서버의 경우에도 보안을 위해서 핑에 대해서 응답하지 않는 경우가 많다.

트레이스라우트 또한 공격 대상을 검색하려는 용도로 사용되기에, 이 역시 보안을 위해서 time exceeded 를 보내지 않도록 설정하는 경우가 많다. 이 경우 트레이스라우트에서는 * * * 을 출력하며 타임아웃 처리를 한다.

>>ping naver.com => 응답없음