IP 네트워크에서 IP 패킷의 전달 과정에서 발생한 오류나 네트워크 상태를 알리기 위한 인터넷 계층의 제어 메시지 프로토콜
ping과 같은 네트워크 진단 기능 제공→ 즉 IP의 전달 과정에서 발생한 상황을 알려주는 프로토콜
Protocol 필드 값 1로 ICMP임을 나타낸다(참고) IP 패킷의 페이로드에 실려 가지만 애플리케이션 데이터를 전달하는 것이 아니라 IP 통신 과정의 오류·상태를 알리는 역할을 하므로, TCP/UDP와 달리 IP와 같은 계층으로 분류한다. 그래서 ICMP에는 포트 번호가 없다. (호스트(IP)까지만 다룬다 → 호스트 안의 프로그램을 고를 일이 없다)

Protocol = 1은 무슨 역할인가?Protocol 필드가 "IP 패킷의 Payload가 어떤 상위 프로토콜의 데이터인지" 알려줘.→ Type은 어떤 오류 메시지인지를 구분하며, ****빈번하게 일어나는 3가지를 알아보겠다.
Destination Unreachable은 패킷을 목적지까지 전달할 수 없을 때 보내는 ICMP 오류 메시지다. (Type = 3)
패킷을 전달할 수 없는 구체적인 이유는 여러가지가 있을 수 있기 때문에 Code를 이용해 구체적인 원인을 구분한다.
(아래 표는 주요 코드 일부)

Time Exceeded는 IP 패킷의 TTL이 전달 과정에서 소진되었거나, IPv4 단편화된 패킷의 재조립 시간이 초과되었음을 알리는 ICMP 오류 메시지다. (Type = 11)
Time Exceeded의 Code는 두 가지가 있다.

실제로 네트워크 공부에서 가장 많이 접하는 것은 Code 0이다.
Code 0 : TTL exceeded in transit
예를 들어:

TTL이 소진되면 해당 라우터는 패킷을 버리고 원래 송신자에게 ICMP Time Exceeded를 보낼 수 있다.
( 송신자: 처음 패킷을 만든 Host A의 주소)
ICMP Redirect는 호스트에게 특정 목적지로 패킷을 보낼 때 더 적절한 다음 홉(next hop)을 사용하도록 알려주는 메시지다. (Type = 5)
Redirect가 발생하는 상황

Host A의 기본 게이트웨이가 Router B라고 하자.
그런데 Host A가 Router B에게 패킷을 보냈더니 Router B가 판단하기에:
Host A → Router B → Router A → 목적지
보다
Host A → Router A → 목적지
로 바로 보내는 것이 적절할 수 있다.
그러면 Router B는 패킷 자체는 정상적으로 전달하면서 Host A에게:
"이 목적지로 갈 때는 Router A를 next hop으로 사용해라."
라는 ICMP Redirect를 보낼 수 있다.
Redirect 구조도

ping [IP 주소] → 엔터ping 8.8.8.8로 실제 ICMP 메시지 형태를 확인 가능