인터넷 제어 메시지 프로토콜
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
인터넷 제어 메시지 프로토콜(ICMP)은 RFC 792에 정의된 인터넷 프로토콜 모음 중 하나로, IP 동작의 진단, 제어, 오류 응답에 사용된다. ICMP 메시지는 IP 패킷 내에 포함되며, TTL 초과, 목적지 도달 불가 등의 오류를 보고하거나 핑(ping) 유틸리티와 같은 네트워크 도구에 활용된다. ICMP는 네트워크 계층 프로토콜이며, ICMP 헤더는 타입, 코드, 검사 합계, 나머지 헤더로 구성된다. ICMP 메시지 종류에는 에코 요청, 에코 응답, 목적지 도달 불가능, 시간 초과 등이 있으며, 일부 메시지는 사용 중단되었다. ICMP는 확장 개체를 통해 추가 정보를 전달할 수 있으며, 관련 RFC를 통해 자세한 내용을 확인할 수 있다.
더 읽어볼만한 페이지
- 인터넷 계층 프로토콜 - IPv6
IPv6는 IPv4 주소 고갈 문제를 해결하고자 개발된 차세대 인터넷 프로토콜로, 128비트 주소 체계를 통해 사실상 무한대에 가까운 IP 주소를 제공하며, 주소 자동 설정, 패킷 처리 효율성 향상, 보안 기능 강화 등의 특징을 갖는다. - 인터넷 계층 프로토콜 - IPv4
IPv4는 인터넷을 가능하게 하는 인터넷 프로토콜 제품군의 핵심 프로토콜로, 32비트 주소 체계를 사용하며 주소 낭비 문제 해결을 위해 CIDR 방식이 도입되었고, IPv4 주소 고갈 문제의 장기적인 해결책으로 IPv6가 개발되었다. - 네트워크 계층 프로토콜 - IPv6
IPv6는 IPv4 주소 고갈 문제를 해결하고자 개발된 차세대 인터넷 프로토콜로, 128비트 주소 체계를 통해 사실상 무한대에 가까운 IP 주소를 제공하며, 주소 자동 설정, 패킷 처리 효율성 향상, 보안 기능 강화 등의 특징을 갖는다. - 네트워크 계층 프로토콜 - X.25
X.25는 CCITT가 1970년대 중반에 개발한 패킷 교환 데이터 통신 표준으로, 가상 회선 서비스 기반의 3계층 구조를 가지며 공중 데이터망의 기반이 되었으나 1990년대 초부터 프레임 릴레이와 TCP/IP로 대체되기 시작하여 현재는 일부 시스템 및 아마추어 무선 분야에서 사용된다. - 인터넷 표준 - DNSSEC
DNSSEC는 DNS의 보안 취약점을 개선하기 위해 도메인 정보에 디지털 서명을 추가하여 응답 레코드의 무결성을 보장하고 DNS 위장 공격을 막는 기술로, RRSIG, DNSKEY 등 다양한 리소스 레코드 유형을 사용하여 인증 체인을 구성하며 공개 키 암호 방식을 활용한다. - 인터넷 표준 - IPv6
IPv6는 IPv4 주소 고갈 문제를 해결하고자 개발된 차세대 인터넷 프로토콜로, 128비트 주소 체계를 통해 사실상 무한대에 가까운 IP 주소를 제공하며, 주소 자동 설정, 패킷 처리 효율성 향상, 보안 기능 강화 등의 특징을 갖는다.
인터넷 제어 메시지 프로토콜 | |
---|---|
개요 | |
종류 | 네트워크 프로토콜 |
계층 | 인터넷 계층 |
기능 | 네트워크 장비 간 제어 메시지 교환 오류 보고 |
상세 정보 | |
개발 | DARPA |
최초 설계 | 1981년 |
RFC | RFC 792 (ICMPv4) RFC 4443 (ICMPv6) |
OSI 모델 계층 | 네트워크 계층 |
기술 정보 | |
프로토콜 종류 | ICMPv4 ICMPv6 |
사용 목적 | IPv4 지원 프로토콜 |
관련 프로토콜 | IPv4, IPv6 |
설명 | 네트워크 진단 및 오류 보고에 사용 ping 및 traceroute 같은 네트워크 유틸리티에서 활용 |
기타 | |
특징 | 연결 지향적이지 않음 (connectionless) 신뢰성 보장 안 함 |
2. 상세 기술 정보
인터넷 제어 메시지 프로토콜(ICMP)은 RFC 792에서 정의한 인터넷 프로토콜 모음의 핵심적인 부분이다.[1] ICMP 메시지는 주로 IP 통신 과정에서 발생하는 문제를 진단하거나 제어 목적으로 사용되며, 오류가 발생했을 때 그에 대한 응답으로 생성된다(RFC 1122 규정).[1] 발생한 ICMP 오류 메시지는 원래 데이터그램을 보낸 출발지 IP 주소로 전송된다.[1]
ICMP 패킷은 IPv4 패킷 내부에 캡슐화되어 전송된다.[1] 즉, 네트워크를 통해 데이터가 전달될 때 MAC 헤더와 IP 헤더 다음에 ICMP 관련 정보가 위치하게 된다.
예를 들어, IP 데이터그램을 전달하는 모든 네트워크 장비(중간 라우터 등)는 데이터그램 헤더의 타임 투 리브(TTL) 값을 1씩 감소시킨다. 만약 이 TTL 값이 0이 되면 해당 데이터그램은 폐기되고, '시간 초과'(Time Exceeded) ICMP 메시지가 데이터그램의 원래 발신지 IP 주소로 보내진다.[1]
ICMP 메시지는 표준 IP 패킷 안에 포함되어 전송되지만, 일반적인 IP 데이터 처리 과정과는 구분되어 특별하게 취급된다. 많은 경우, ICMP 메시지의 내용을 검사하여, 메시지 발생을 유발한 원본 IP 패킷을 보낸 응용 프로그램에 적절한 오류 정보를 전달해야 한다.
흔히 사용되는 여러 네트워크 유틸리티가 ICMP 메시지를 기반으로 동작한다. 예를 들어, 트레이스라우트(traceroute) 명령어는 특수하게 조작된 TTL 값을 가진 IP 데이터그램을 전송하고, 경로상의 라우터들로부터 반환되는 '시간 초과' ICMP 메시지와 최종 목적지로부터 오는 '목적지 도달 불가'(Destination Unreachable) 메시지를 분석하여 네트워크 경로를 추적한다. 이와 유사하게 핑(ping) 유틸리티는 ICMP의 '에코 요청'(Echo Request) 메시지를 보내고 상대방으로부터 '에코 응답'(Echo Reply) 메시지를 받아 네트워크 연결 상태와 응답 시간을 확인한다.
ICMP는 네트워크 계층 프로토콜로 분류된다. 이는 7계층 OSI 모델에서는 3계층에 해당하며, TCP/IP 모델에서는 인터넷 계층 프로토콜에 속한다. 전송 계층에서 사용하는 TCP 또는 UDP 포트 번호와는 관련이 없으므로, ICMP 패킷에는 포트 번호가 존재하지 않는다.[2][13]
3. ICMP 패킷 구조
```text
+------------+-----------+-------------+---------------+
| MAC 헤더 | IP 헤더 | ICMP 헤더 | ICMP 데이터 |
+------------+-----------+-------------+---------------+
```
ICMP 패킷 자체는 크게 헤더(Header)와 데이터(Data) 두 부분으로 구성된다. ICMP 헤더는 IPv4 헤더 바로 뒤에 위치하며, IP 프로토콜 번호 '1'로 식별된다. 모든 ICMP 패킷의 헤더는 8 옥텟(바이트)의 고정된 크기를 가지며, 그 뒤에는 가변적인 크기의 데이터 영역이 따른다. 헤더의 처음 4바이트는 모든 ICMP 메시지에서 동일한 형식을 갖지만, 나머지 4바이트는 해당 ICMP 메시지의 종류(타입과 코드)에 따라 내용이 달라진다. 데이터 영역의 구조 역시 ICMP 메시지의 타입에 따라 결정된다.
3. 1. ICMP 헤더
ICMP 헤더는 IPv4 헤더 뒤에 위치하며, IP 프로토콜 번호 목록에서 프로토콜 번호 '1'로 식별된다.[3] 모든 ICMP 패킷은 8바이트 헤더와 가변 크기의 데이터 섹션으로 구성된다. 헤더의 처음 4바이트는 고정된 형식을 가지며, 나머지 4바이트는 ICMP 패킷의 타입과 코드에 따라 내용이 달라진다.[1]
- 타입 (Type): 8비트 필드로, ICMP 메시지의 종류를 나타낸다. (제어 메시지 참조)
- 코드 (Code): 8비트 필드로, ICMP 메시지의 세부 타입을 나타낸다. (제어 메시지 참조)
- 체크섬 (Checksum): 16비트 필드로, ICMP 헤더와 데이터 전체에 대한 오류 검사를 위한 값이다. 계산 시 이 필드 자체는 0으로 간주하며, 인터넷 체크섬 방식을 사용한다(RFC 1071).
- 나머지 헤더 (Rest of Header): 32비트 필드로, ICMP 타입과 코드에 따라 내용이 달라진다. 예를 들어, 에코 요청/응답 메시지에서는 식별자와 순서 번호가 이 필드에 포함될 수 있다.
ICMP 데이터 부분의 첫 번째 옥텟은 ICMP 타입 필드 값에 따라 형식이 결정된다. "미사용"으로 표시된 필드는 향후 확장을 위해 예약되어 있으며, 전송 시 0으로 채워야 한다. 체크섬은 ICMP 헤더 시작(타입 필드)부터 데이터 끝까지 16비트 단위로 계산하며, 체크섬 필드 자체는 계산 시 0으로 간주한다. 전체 바이트 수가 홀수이면 마지막에 0 바이트가 있는 것으로 간주하여 계산한다.
일부 ICMP 메시지 타입은 오류를 유발한 원본 데이터그램의 IP 헤더와 데이터 일부(최소 8바이트)를 포함하여 전송한다. 초기 RFC 792에서는 이 데이터 크기를 8바이트로 규정했으나, 이후 RFC 1812(IPv4)와 RFC 4443(IPv6)에서는 최소 MTU 크기(IPv4: 576바이트, IPv6: 1280바이트)까지 포함할 수 있도록 확장되었다. RFC 4884에서 길이 필드가 추가되어, 이 가변 길이 영역의 길이를 32비트 단위로 기술하게 되었다.
ICMP 메시지는 일반적인 IP 헤더를 사용하여 전송된다. 특별히 명시되지 않는 한, ICMP 메시지를 감싸는 IP 헤더의 주요 필드 값은 다음과 같다.
- 버전 (Version): 4 (IPv4)
- IHL (Internet Header Length): IP 헤더의 길이를 32비트 워드 단위로 나타낸다.
- 서비스 유형 (Type of Service): 0
- 전체 길이 (Total Length): IP 헤더와 데이터(ICMP 메시지 포함)의 전체 길이를 옥텟 단위로 나타낸다.
- 생존 시간 (Time to Live, TTL): 데이터그램이 네트워크에서 살아남을 수 있는 최대 시간 또는 홉(hop) 수. 라우터를 거칠 때마다 1씩 감소한다.
- 프로토콜 (Protocol): 1 (ICMP)
- 헤더 체크섬 (Header Checksum): IP 헤더의 오류 검사를 위한 값.
- 송신자 주소 (Source Address): ICMP 메시지를 생성한 게이트웨이 또는 호스트의 IP 주소. 일반적으로 게이트웨이 주소가 된다.
- 수신자 주소 (Destination Address): ICMP 메시지를 수신할 게이트웨이 또는 호스트의 IP 주소.