ICMPv6

IP스택 섬네일 **ICMPv6**(Internet Control Message Protocol version 6)은 IPv6(인터넷 프로토콜 버전 6)용 인터넷 제어 메시지 프로토콜(ICMP) 구현체이다. IPCMv6는 RFC 4443에 정의되어 있다.RFC 4443, *Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification* ICMPv6는 IPv6의 중요한 부분이며 오류 보고와 진단 기능(예: 핑)을 수행하고, 앞으로의 변경사항을 구현할 확장기능을 위한 프레임워크를 가지고 있다. 새로운 ICMPv6 메시지 타입을 정의하는 여러 확장기능들과 기존 ICMPv6 메시지 타입을 위한 새로운 옵션들이 게시되고 있다. 이웃 탐색 프로토콜(NDP)은 IPv6의 노드 탐색 프로토콜이며 ARP의 기능을 대체하고 강화한다.RFC 3315, § 3 안전 이웃 탐색(Secure Neighbor Discovery, SEND)은 추가 보안을 제공하는 NDP의 확장이다. 멀티캐스트 리스너 디스커버리(MLD)는 직접 부착된 링크 위의 멀티캐스트 리스너를 IPv6 라우터가 탐색하기 위해 사용되며 이는 마치 IPv4에서 인터넷 그룹 관리 프로토콜(IGMP)을 사용하는 것과 같다. 멀티캐스트 라우터 디스커버리(MRD)는 멀티캐스트 라우터의 탐색을 허용한다.
# 메시지 타입과 포맷
ICMPv6 메시지들은 오류 메시지와 정보 메시지로 분류할 수 있다. ICMPv6 메시지들은 IPv6 패킷에 의해 전달되며 이 패킷 안의 ICMPv6의 IPv6 넥스트 헤더 값은 값 58로 설정된다. ICMPv6 메시지는 헤더와 프로토콜 페이로드로 구성된다. 헤더에는 오직 3개의 필드만을 담고 있다: *type* (8비트), *code* (8비트), *checksum* (16비트). *type*은 메시지의 타입을 지정한다. 0~127 사이(high-order 비트는 0)의 값은 오류 메시지를 나타내는 반면, 128~255 사이의 값(high-order 비트는 1)은 정보 메시지를 의미한다. *code* 필드의 값은 메시지의 타입에 따라 달라지며 메시지의 세부 수준을 제공한다. *checksum* 필드는 ICMP 메시지의 최소한의 수준의 무결성 확인을 제공한다. {| class="wikitable" |+ICMPv6 패킷 |- ! 비트 오프셋 !! colspan="8" width="22%" | 0–7 !! colspan="8" width="22%" | 8–15 !! colspan="16" width="44%"| 16–31 |- | **0** || colspan="8"| Type || colspan="8"| Code || colspan="16"| Checksum |- | **32** || colspan="32"| 메시지 본문 |- |}
## 타입
컨트롤 메시지는 *type* 필드의 값에 의해 식별된다. *code* 필드는 메시지의 추가 문맥 정보를 제공한다. 일부 메시지들은 ICMP 메시지 타입과 동등한 역할을 수행한다. {| class="wikitable" ! colspan="2" align="center"| 타입 ! colspan="2" align="center"| 코드 |- ! 값 !! 의미 !! 값 !! 의미 |- ! colspan="4" align="center"| ICMPv6 오류 메시지 |- |rowspan=8| 1 |rowspan=8| 목적지 도달 불가 | 0 | 목적지로의 루트가 없음 |- | 1 | 목적지와의 통신이 관리적인 측면에서 금지됨 |- | 2 | 원본 주소 범위 초과 |- | 3 | 주소 도달 불가 |- | 4 | 포트 도달 불가 |- | 5 | 원본 주소가 정책의 ingress/egress를 실패함 |- | 6 | 목적지로의 루트 거부 |- | 7 | 원본 라우팅 헤더의 오류 |- | 2 || 패킷이 너무 큼 || 0 |- |rowspan=2| 3 |rowspan=2| 시간 초과 | 0 | 전송 시 홉 제한 도달 |- | 1 | 조각 재조합(fragment reassembly) 시간 초과 |- |rowspan=3| 4 |rowspan=3| 파라미터 문제 | 0 | 문제가 있는 헤더 필드 확인 |- | 1 | 인식할 수 없는 넥스트 헤더 타입 확인 |- | 2 | 인식할 수 없는 IPv6 옵션 확인 |- | 100 || 비공개 실험 || || |- | 101 || 비공개 실험 || || |- | 127 || ICMPv6 오류 메시지를 위한 확장을 위해 예약됨 || || |- ! colspan="4" align="center"| 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 || |- |rowspan=3| 138 |rowspan=3| 라우터 리넘버링 | 0 | 라우터 리넘버링 커맨드 |- | 1 | 라우터 리넘버링 결과 |- | 255 | 시퀀스 번호 리셋 |- |rowspan=3| 139 |rowspan=3| ICMP 노드 정보 쿼리 | 0 | 데이터 필드는 이 쿼리의 주제인 IPv6 주소를 포함한다. |- | 1 | 데이터 필드는 이 쿼리의 주제인 이름을 포함하며 NOOP의 경우 비어있다. |- | 2 | 데이터 필드는 이 쿼리의 주제인 IPv4 주소를 포함한다. |- |rowspan=3| 140 |rowspan=3| 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 헤더의 의사 헤더로 시작하여 계산되며RFC 2460, * Internet Protocol, Version 6 (IPv6) Specification*, Section 8.1 (*Upper-Layer Checksum*), S. Deering, R. Hinden (December 1998) 원본과 도착 주소, 패킷 길이와 넥스트 헤더 필드로 구성되며 후자의 경우 58이라는 값으로 설정된다. 이 의사 헤더 뒤에 체크섬은 IPCMv6 메시지와 함께 계속해나간다. 체크섬 계산은 인터넷 프로토콜 표준에 따라 수행된다.RFC 1071, *Computing the Internet Checksum*, R. Braden, D. Borman, C. Partridge (September 1988) ICMP의 IPv4의 계산 방식과는 차이가 있으나 TCP에서 수행되는 계산 방식과 비슷하다. {| class="wikitable" |+ICMPv6 의사 헤더 |- ! 비트 오프셋 ! colspan="8" width="22%"| 0 – 7 ! colspan="8" width="22%"| 8–15 ! colspan="8" width="22%"| 16–23 ! colspan="8" width="22%"| 24–31 |- ! 0 | colspan="32" rowspan="4"| 원본 주소 |- ! 32 |- ! 64 |- ! 96 |- ! 128 | colspan="32" rowspan="4"| 도착 주소 |- ! 160 |- ! 192 |- ! 224 |- ! 256 | colspan="32"| ICMPv6 길이 |- ! 288 | colspan="24"| 제로(0) | colspan="8"| 넥스트 헤더 |- |}
# 메시지 처리
IPCMv6 노드가 패킷을 수신하면 메시지의 타입에 의존하는 조치에 착수해야 한다. ICMPv6 프로토콜은 네트워크 부하를 피하기 위해 동일 도착지로 전송되는 오류 메시지의 수에 제한을 두어야 한다. 이를테면 노드가 오류가 있는 패킷의 포워드를 계속하는 경우 ICMP는 최초 패킷에 오류 신호를 보내고 주기적으로 이 작업을 수행하며, 여기에는 최소한의 고정 주기라든지 고정된 네트워크 최대 부하가 설정된다. ICMP 오류 메시지는 다른 ICMP 오류 메시지에 대한 응답에 대해 송신해서는 안 된다.