1. 개요
- ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜)는 IP 네트워크에서 사용하는 가장 기본적인 프로토콜이며, 네트워크 제어를 위한 각종 메시지가 규정되어 있다.
- TCP/IP(전송계층)에서 IP패킷을 처리할 때 발생되는 문제(주로 정상적으로 패킷이 도달하였는지)를 알려주는 프로토콜이다.
2. 메시지 종류
ICMPv4 기준이며, () 안은 실제 부여된 메시지 번호이다.- Echo request (8) : 해당 수신자가 이 메시지를 받으면 응답을 해 달라는 요청이다.
- Echo reply (0): Echo request 를 받은 수신자가 보내주는 응답.
- Destination Unreachable (3) : 네트워크가 끊겨 있거나, 장비가 꺼져 있거나, 경로가 없거나 등 여러 이유로 최종 목적지에 도달할 수 없을때 보내지는 메시지이다.
- Time Exceeded (11) : TTL 값이 감소하여 0 이 되었을때 이 메시지를 송신자에게 돌려 준다.
3. ICMPv6
Internet Control Message Protocol version 6IPv6 가 등장함에 따라 ICMP 도 IPv6 에 맞도록 새로 규정되었다.
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 공격등을 하려 할때, 공격할 대상을 검색[1]하는 용도로 사용하거나, 아니면 대량의 핑 자체를 듬뿍 이용해서 공격에 사용하기도 한다. 이를 ICMP Flooding이라고 한다. 그래서, 보안 관계로 대다수의 PC 등은 핑을 받아도 reply 를 보내지 않는다. 상용 서버의 경우에도 보안을 위해서 핑에 대해서 응답하지 않는 경우가 많다.트레이스라우트(traceroute) 또한 공격 대상을 검색하려는 용도로 사용되기에, 이 역시 보안을 위해서 time exceeded 를 보내지 않도록 설정하는 경우가 많다. 이 경우 트레이스라우트에서는
* * *
등의 형태로 출력하며, 핑 타임아웃 처리[2]를 한다.[1] 주로 DNS서버, L3 라우터 등. 목적지 서버의 IP는 traceroute를 하지 않아도 금방 알 수 있으니까.[2] Windows cmd의 tracert와 달리 리눅스 등을 기반으로 만들어진 다양한 traceroute 프로그램들은 핑 타임아웃과 핑 카운트 자체를 조절할 수도 있다.