ICMPv6

위키백과, 우리 모두의 백과사전.
둘러보기로 가기 검색하러 가기

ICMPv6(Internet Control Message Protocol version 6)은 IPv6(인터넷 프로토콜 버전 6)용 인터넷 제어 메시지 프로토콜(ICMP) 구현체이다. IPCMv6는 RFC 4443에 정의되어 있다.[1] ICMPv6는 IPv6의 중요한 부분이며 오류 보고와 진단 기능(예: )을 수행하고, 앞으로의 변경사항을 구현할 확장기능을 위한 프레임워크를 가지고 있다.

새로운 ICMPv6 메시지 타입을 정의하는 여러 확장기능들과 기존 ICMPv6 메시지 타입을 위한 새로운 옵션들이 게시되고 있다. 이웃 탐색 프로토콜(NDP)은 IPv6의 노드 탐색 프로토콜이며 ARP의 기능을 대체하고 강화한다.[2] 안전 이웃 탐색(Secure Neighbor Discovery, SEND)은 추가 보안을 제공하는 NDP의 확장이다. 멀티캐스트 리스너 디스커버리(MLD)는 직접 부착된 링크 위의 멀티캐스트 리스너를 IPv6 라우터가 탐색하기 위해 사용되며 이는 마치 IPv4에서 인터넷 그룹 관리 프로토콜(IGMP)을 사용하는 것과 같다. 멀티캐스트 라우터 디스커버리(MRD)는 멀티캐스트 라우터의 탐색을 허용한다.

메시지 타입과 포맷[편집]

ICMPv6 메시지들은 오류 메시지와 정보 메시지로 분류할 수 있다. ICMPv6 메시지들은 IPv6 패킷에 의해 전달되며 이 패킷 안의 IPCMv6의 IPv6 넥스트 헤더 값은 값 58로 설정된다.

ICMPv6 메시지는 헤더와 프로토콜 페이로드로 구성된다. 헤더에는 오직 3개의 필드만을 담고 있다: type (8비트), code (8비트), checksum (16비트). type은 메시지의 타입을 지정한다. 0~127 사이(high-order 비트는 0)의 값은 오류 메시지를 나타내는 반면, 128~255 사이의 값(high-order 비트는 1)은 정보 메시지를 의미한다. code 필드의 값은 메시지의 타입에 따라 달라지며 메시지의 세부 수준을 제공한다. checksum 필드는 ICMP 메시지의 최소한의 수준의 무결성 확인을 제공한다.

ICMPv6 패킷
비트 오프셋 0–7 8–15 16–31
0 Type Code Checksum
32 메시지 본문

타입[편집]

컨트롤 메시지는 type 필드의 값에 의해 식별된다. code 필드는 메시지의 추가 문맥 정보를 제공한다. 일부 메시지들은 ICMP 메시지 타입과 동등한 역할을 수행한다.

타입 코드
의미 의미
ICMPv6 오류 메시지
1 목적지 도달 불가 0 목적지로의 루트가 없음
1 목적지와의 통신이 관리적인 측면에서 금지됨
2 원본 주소 범위 초과
3 주소 도달 불가
4 포트 도달 불가
5 원본 주소가 정책의 ingress/egress를 실패함
6 목적지로의 루트 거부
7 원본 라우팅 헤더의 오류
2 패킷이 너무 큼 0
3 시간 초과 0 전송 시 홉 제한 도달
1 조각 재조합(fragment reassembly) 시간 초과
4 파라미터 문제 0 문제가 있는 헤더 필드 확인
1 인식할 수 없는 넥스트 헤더 타입 확인
2 인식할 수 없는 IPv6 옵션 확인
100 비공개 실험
101 비공개 실험
127 ICMPv6 오류 메시지를 위한 확장을 위해 예약됨
ICMPv6 정보 메시지
128 0
129 0
130 멀티캐스트 리스너 쿼리 (MLD) 0

멀티캐스트 리스너 쿼리 메시지에는 2가지 하위 타입이 있다:

  • 일반 쿼리(General Query): 어느 멀티캐스트 주소들이 부착 링크에서 리스너를 갖고 있는지 알아내기 위해 사용된다.
  • 멀티캐스트 주소 특화 쿼리(Multicast-Address-Specific Query): 특정 멀티캐스트 주소가 부착 링크의 리스너를 가지고 있는지의 여부를 알아내기 위해 사용된다.

이 두 하위 타입들은 멀티캐스트 주소 필드의 내용에 따라 달라지며 이는 RFC 2710 의 3.6항에 기술되어 있다

131 멀티캐스트 리스너 리포트 (MLD) 0
132 멀티캐스트 리스너 던 (MLD) 0
133 Router Solicitation (NDP) 0
134 Router Advertisement (NDP) 0
135 Neighbor Solicitation (NDP) 0
136 Neighbor Advertisement (NDP) 0
137 리다이렉트 메시지 (NDP) 0
138 라우터 리넘버링 0 라우터 리넘버링 커맨드
1 라우터 리넘버링 결과
255 시퀀스 번호 리셋
139 ICMP 노드 정보 쿼리 0 데이터 필드는 이 쿼리의 주제인 IPv6 주소를 포함한다.
1 데이터 필드는 이 쿼리의 주제인 이름을 포함하며 NOOP의 경우 비어있다.
2 데이터 필드는 이 쿼리의 주제인 IPv4 주소를 포함한다.
140 ICMP 노드 정보 응답 0 응답 성공. 응답 데이터 필드는 비어있을 수도, 비어있지 않을 수도 있다.
1 응답자가 답변 제공을 거부한다. 응답 데이터 필드는 비어있게 된다.
2 응답자에 대한 쿼리의 Qtype을 알 수 없다. 응답 데이터 필드는 비어있게 된다.
141 Inverse Neighbor Discovery Solicitation Message 0
142 Inverse Neighbor Discovery Advertisement Message 0
143 Multicast Listener Discovery (MLDv2) 리포트 (RFC 3810)
144 Home Agent Address Discovery Request Message 0
145 Home Agent Address Discovery Reply Message 0
146 Mobile Prefix Solicitation 0
147 Mobile Prefix Advertisement 0
148 Certification Path Solicitation (SEND)
149 Certification Path Advertisement (SEND)
151 Multicast Router Advertisement (MRD)
152 Multicast Router Solicitation (MRD)
153 Multicast Router Termination (MRD)
155 RPL 컨트롤 메시지
200 비공개 실험
201 비공개 실험
255 ICMPv6 정보 메시지를 위한 확장을 위해 예약됨

위의 표는 완전하지 않으며, 할당된 IPCMv6 타입의 완전한 목록은 이 링크에서 볼 수 있다: IANA: ICMPv6 Parameters.

체크섬[편집]

ICMPv6는 헤더에 16비트 체크섬을 포함시킴으로써 최소한의 수준의 메시지 무결성 확인을 제공한다. 체크섬은 IPv6 표준에 의거하여 IPv6 헤더의 의사 헤더로 시작하여 계산되며[3] 원본과 도착 주소, 패킷 길이와 넥스트 헤더 필드로 구성되며 후자의 경우 58이라는 값으로 설정된다. 이 의사 헤더 뒤에 체크섬은 IPCMv6 메시지와 함께 계속해나간다. 체크섬 계산은 인터넷 프로토콜 표준에 따라 수행된다.[4] ICMP의 IPv4의 계산 방식과는 차이가 있으나 TCP에서 수행되는 계산 방식과 비슷하다.

ICMPv6 의사 헤더
비트 오프셋 0 – 7 8–15 16–23 24–31
0 원본 주소
32
64
96
128 도착 주소
160
192
224
256 ICMPv6 길이
288 제로(0) 넥스트 헤더

메시지 처리[편집]

IPCMv6 노드가 패킷을 수신하면 메시지의 타입에 의존하는 조치에 착수해야 한다. ICMPv6 프로토콜은 네트워크 부하를 피하기 위해 동일 도착지로 전송되는 오류 메시지의 수에 제한을 두어야 한다. 이를테면 노드가 오류가 있는 패킷의 포워드를 계속하는 경우 ICMP는 최초 패킷에 오류 신호를 보내고 주기적으로 이 작업을 수행하며, 여기에는 최소한의 고정 주기라든지 고정된 네트워크 최대 부하가 설정된다. ICMP 오류 메시지는 다른 ICMP 오류 메시지에 대한 응답에 대해 송신해서는 안 된다.

각주[편집]

  1. RFC 4443, Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification
  2. RFC 3315, § 3
  3. RFC 2460, Internet Protocol, Version 6 (IPv6) Specification, Section 8.1 (Upper-Layer Checksum), S. Deering, R. Hinden (December 1998)
  4. RFC 1071, Computing the Internet Checksum, R. Braden, D. Borman, C. Partridge (September 1988)

외부 링크[편집]