ICMP Internet Control Message Protocol
- update date : 2020.06.28
- 본 포스팅은 고려대학교 컴퓨터학과 김효곤 교수님의 2020년 1학기 Internet Protocol을 수강하고 이를 바탕으로 작성했습니다. 수업 내용 복습을 목적으로 작성하였기 때문에 내용 중 부족한 점이 있을 수 있습니다.
1. Introduction
네트워크의 상태, 정확하게는 특정 ip 주소에 도달할 수 있는지, 시간은 얼마나 걸리는지 확인하기 위해 사용하는 명령어 중 ping
이 있다. ping으로 하버드 대학 홈페이지에 접근할 수 있는지 확인하면 아래와 같이 가능하다는 것을 알 수 있다.
이때 어떤 프로토콜이 사용되는지 wire shark로 확인해보면 다음과 같이 ICMP라는 것을 알 수 있다.
ping을 비롯하여 네트워크의 상태를 확인하고 네트워크에 어떤 문제가 발생했을 때 알리기 위해 사용하는 프로토콜이 ICMP이다.
2. ICMP, Internet Control Message Protocol
ICMP는 아래와 같이 두 가지 목적을 가지고 있다.
- IP delivery failure report
- Informational/Diagnosis
쉽게 말해 인터넷 상에서 어떤 패킷을 전송하는 것이 실패했거나, 지금 네트워크의 상태에 문제가 있는지 여부를 확인하기 위해 사용되는 프로토콜이라는 것이다.
ICMP for error messaging
네트워크 전송 중에 패킷이 죽은 경우 죽은 패킷의 일부를 source로 보내어 문제를 해결할 수 있도록 하는데에 ICMP가 사용된다. 동일한 문제로 패킷이 죽는 것을 방지하는 것이 목표이므로 source에서 고칠 수 있는 문제가 아니라면 ICMP error message도 보내지 않게 된다. 전송에 실패했음에도 ICMP error message를 보내지 않는 경우로는 대표적으로 다음과 같은 것들이 있다.
- ICMP error message가 source로 가는 도중 죽은 경우
- checksum error
- multicast/broadcast
- from 0.0.0.0
error messaging의 대표적인 것이 TCP에서 경로 상의 PMTU를 확인할 때이다. MTU보다 큰 사이즈의 패킷을 받게 되면 라우터는 source에 적절한 MTU 사이즈를 ICMP error message에 담아 알려준다.
ICMP for probing network state
Introduction에서 보았던 ping과 더불어 tracert / tracerouter
가 대표적이다. 패킷이 해당 ip 주소까지 도달할 수 있는지, 도달하는 과정에서 병목이 되는 라우터는 무엇인지 확인하기 위해 주로 사용하며, 이를 통해 round-trip time, time to live, loss rate 등을 확인할 수 있다.
ping이 특정 host에 접근이 가능한지 확인하기 위해 사용되는 것이었다면 traceroute는 목적 host에 도달하기 위해 거쳐야 하는 라우터들 각각에 대한 정보를 확인하기 위해 사용된다. 이를 통해 어떤 라우터가 병목인지 알 수 있다. 참고로 mac을 비롯한 linux 계열에서는 traceroute를 사용하고 Windows에서는 tracert를 사용한다.
ICMP with IPv6
IPv4에서 IPv6으로 넘어가며 여러 프로토콜로 나누어 수행되던 작업들이 하나의 프로토콜로 합쳐 수행하게 되었다. 대표적인 것이 ARP, IGMP로 이들이 맡고 있던 기능들은 IPv6에서는 ICMP가 모두 담당하게 되었다. ARP를 대신하기 위해 IPv6에서는 SNM(Solicitated Node Multicast) address로 연결된 node들에 ICMP Neighbor Solicitation을 통해 알리고, 그에 대한 response로 IPv6에 맞는 MAC주소를 ICMP Neighbor Advertisement를 수신하게 된다.
또한 ICMPv6에서는 더 이상 라우터에서 fragmentation을 수행하지 않으므로 PMTU size를 맞추어 패킷을 보내는 것이 더욱 중요해졌다. 따라서 ICMP MTU error message가 보다 빈번하게 사용된다.