ICMP

 

1. 개요
2. 메시지 종류
3. ICMPv6
4. 이를 사용하는 유틸리티
4.1. (Ping)
4.2. 트레이스라우트(traceroute)
5. 보안 문제


1. 개요


Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜
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 6
IPv6 가 등장함에 따라 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]하는 용도로 사용하거나, 아니면 대량의 핑 자체를 듬뿍 이용해서 공격에 사용하기도 한다. 그래서, 보안 관계로 대다수의 PC 등은 핑을 받아도 reply 를 보내지 않는다. 상용 서버의 경우에도 보안을 위해서 핑에 대해서 응답하지 않는 경우가 많다.
트레이스라우트(traceroute) 또한 공격 대상을 검색하려는 용도로 사용되기에, 이 역시 보안을 위해서 time exceeded 를 보내지 않도록 설정하는 경우가 많다. 이 경우 트레이스라우트에서는 * * * 등의 형태로 출력하며, 핑 타임아웃 처리[2]를 한다.

[1] 주로 DNS서버, L3 라우터 등. 목적지 서버의 IP는 traceroute를 하지 않아도 금방 알 수 있으니까(...).[2] windows의 cmd의 tracert 달리, 리눅스 등을 기반으로 만들어진 다양한 traceroute프로그램들은 핑 타임아웃과 핑 카운트 자체를 조절할 수도 있다.