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