ICMP(Internet Control Message Protocol)
ICMP(Internet Control Message Protocol)는 IP 네트워크에서 오류 보고와 상태 확인을 위해 사용되는 제어용 프로토콜이다. 핵심은 데이터 전송이 아니라 “통신이 제대로 되고 있는지 알려주는 역할”을 한다는 점이다.
IP는 패킷을 목적지까지 전달하려고만 할 뿐, 중간에 문제가 생겨도 스스로 알려주지 않는다. 그래서 네트워크 장비나 호스트가 “이 패킷은 전달할 수 없다”, “경로에 문제가 있다” 같은 정보를 보내기 위해 ICMP를 사용한다. ICMP는 TCP나 UDP처럼 포트 개념이 없고, IP 위에서 직접 동작하는 네트워크 계층 프로토콜이다.
가장 대표적인 ICMP 기능은 핑(ping)이다. ping 명령은 ICMP Echo Request를 보내고, 상대방이 Echo Reply를 정상적으로 돌려주는지를 확인함으로써 네트워크 연결 상태를 점검한다. 단순하지만 매우 중요한 진단 도구다.
ICMP에는 여러 메시지 타입이 있다. 예를 들어 목적지에 도달할 수 없을 때는 Destination Unreachable, 패킷의 TTL(Time To Live)이 0이 되면 Time Exceeded 메시지가 발생한다. 이 Time Exceeded 메시지를 이용해 네트워크 경로를 추적하는 것이 traceroute다. 즉, traceroute도 내부적으로는 ICMP를 사용한다.
보안 관점에서는 ICMP가 자주 공격에 악용된다. Smurf 공격은 ICMP Echo Request를 브로드캐스트 주소로 보내 트래픽을 증폭시키는 DoS 공격이다. Ping Flood는 대량의 ICMP 요청을 보내 대상 시스템의 자원을 소모시키는 공격이다. 또한 ICMP를 이용해 내부 네트워크 정보를 수집하거나, 방화벽 우회를 시도하는 경우도 있다.
그래서 실무에서 중요한 포인트는 ICMP를 무조건 차단해서는 안 되지만, 필요 없는 ICMP는 제한해야 한다는 점이다. 일부 ICMP 메시지는 정상적인 네트워크 동작에 필수적이기 때문이다.
정리하면, ICMP는
네트워크 오류 및 상태 제어용 프로토콜이고,
ping과 traceroute의 기반이며,
DoS 공격과 정보 수집에 악용될 수 있다.