1. 개요
ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜)는 IP 네트워크에서 사용하는 가장 기본적인 프로토콜이며, 네트워크 제어를 위한 각종 메시지가 규정되어 있다.ICMP는 TCP/IP(전송계층)에서 IP패킷을 처리할 때 발생되는 문제(주로 정상적으로 패킷이 도달하였는지)를 알려주는 프로토콜이기도 하다.
2. 메시지 종류
ICMPv4[1] 기준이며, () 안은 실제 부여된 메시지 번호이다.- Echo request (8) : 해당 수신자가 이 메시지를 받으면 응답을 해 달라는 요청이다.
- Echo reply (0) : 'Echo request'를 받은 수신자가 보내주는 응답이다.
- Destination Unreachable (3) : 네트워크가 끊겨 있거나, 장비가 꺼져 있거나, 경로가 없는 등 여러 이유로 최종 목적지에 도달할 수 없을때 보내지는 메시지이다.
- Time Exceeded (11) : TTL 값이 감소하여 0 이 되었을때 이 메시지를 송신자에게 돌려주게 된다.
3. ICMPv6
IPv6 가 등장함에 따라 ICMP도 IPv6에 맞도록 새로 규정되었는데 이를 ICMPv6[2]이라고 한다.Echo Request. Echo Reply, Destination Unreachable, Time Exceeded 등 주로 쓰는 메시지는 그대로 이름을 이어 받았지만, 메시지 번호 등은 모두 새로 지정되었다.
또한, ARP 의 IPv6 버전인 NDP는 ICMPv6를 이용하여 동작한다.
4. 이를 사용하는 유틸리티
4.1. 핑(Ping)
해당 IP를 가진 장비에 접속 가능한지 확인하는 프로그램이다. 위에 언급한 echo request를 전송하고, 되돌려 받은 echo reply를 확인한다. 정상적으로 echo reply를 수신하는 경우 수신까지 걸릴 시간을 계산하여 해당 장비까지 회선 속도를 가늠해 볼 수 있다. 반대로 reply를 수신하지 못하거나, destination unreachable을 수신하게 되면 해당 장비에 도달할 수 없다는 것을 알 수 있다.4.2. 트레이스라우트(traceroute)
해당 장비까지 가는 경로를 추척하는 프로그램이다.간략히 설명하면 모든 라우터는 패킷을 수신하면 TTL을 1을 감소시키고 전달해야 하는데, 만약 TTL이 0 이 되면 패킷을 버리고, 대신 time exceeded 메시지를 송신측에게 돌려 주게 된다. 이런 특성을 이용해서 처음에는 TTL = 1 로 설정하고 패킷을 쏘면, 제일 처음 만나는 라우터가 time exceeded 메시지를 보내기에 이 라우터의 IP 주소를 알 수 있게 된다. 그 다음 TTL = 2 로 패킷을 쏘고, 그 다음에는 TTL = 3, 4, 5, 6 ... 으로 최종 목적지에 도달할 때까지 TTL을 증가시키며 패킷을 쏜다.
이를 이용하면 최종 목적지까지 가는 경로를 모두 확인해볼 수 있다.
5. 보안 문제
핑은 DDoS 공격 등을 하려 할때, 공격할 대상을 검색[3]하는 용도로 사용하거나, 아니면 대량의 핑 자체를 가득 이용해서 공격하는 용도로 사용하기도 한다. 이를 ICMP Flooding이라고 한다. 그래서 보안 관계로 대다수의 PC 등은 핑을 받아도 reply를 보내지 않는다. 상용 서버의 경우에도 보안을 위해서 핑에 응답하지 않는 경우가 많다.트레이스라우트(traceroute) 또한 공격 대상을 검색하려는 용도로 사용되기에, 이 역시 보안을 위해서 time exceeded 를 보내지 않도록 설정하는 경우가 많다. 이 경우 트레이스라우트에서는
* * *
등의 형태로 출력하며, 핑 타임아웃 처리[4]를 한다.
[1]
Internet Control Message Protocol version 4
[2]
Internet Control Message Protocol version 6
[3]
주로
DNS서버, L3
라우터 등. 목적지 서버의 IP는 traceroute를 하지 않아도 금방 알 수 있으니까.
[4]
Windows cmd의 tracert와 달리
리눅스 등을 기반으로 만들어진 다양한 traceroute 프로그램들은 핑 타임아웃과 핑 카운트 자체를 조절할 수도 있다.