1. 역할
ICMPv6를 간단히 설명하자면 IPv6에서 쓰이는 보조 프로토콜입니다. 사진을 보면 IPv4를 살펴보면 ICMP,IGMP,ARP와 같은 3가지 보조 프로토콜이 있었습니다. 하지만 IPv6에서는 이 기능을 ICMPv6가 모두 맡아 처리합니다. ipv4에서 3가지로 나뉘어졌던 보조 프로토콜을 ipv6에서는 icmpv6 하나로 통합했는데 icmpv6에서 type을 나눠서 NDP, MLD를 사용합니다. NDP는 neighbor discovery protocol의 약자로 ipv4의 arp의 업그레이드된 느낌이라 생각하시면 되고, MLD는 IGMP에서 쓸모없는 기능들을 없애서 나온 업그레이드 버전이라고 생각하시면 됩니다.
2. 구조
이 그림은 ipv6의 헤더와 icmpv6의 헤더구조입니다. 여기서 ipv6의 next header가 58이면 다음에 나오는 헤더는 icmpv6가 되겠습니다. icmpv6의 헤더는 type code checksum 그리고 padding으로 구성되어 있습니다. padding은 message body와 같은 겁니다. 보시다시피 0-7bit는 type 8부터 15까지는 code 16부터 31까지는 checksum이고 이 3부분을 icmp공통헤더라고 부릅니다. messgae body는 가변적입니다.
3. 기능
①. 에러 보고(Error Reporting)
에러 보고 항목에는 목적지 도달 불가. 패킷 크기 초과, 시간 초과, 파라미터 문제가 있습니다. 이중 시간초과와 파라미터 문제는 다루지 않겠습니다.
•Destination Unreachable(목적지 도달 불가)
- ICMP 에러 메세지 중 하나.(Type : 1)
- 도달 할 수 없는 목적지에 계속하여 패킷을 보내지 않
도록 송신측에 주의를 주는 ICMP 오류 보고 메세지
유형. (code 값에 의해 알 수 있음.)
이 오류 메시지를 분석하면 문제를 구체적으로 파악할 수 있습니다.
- ICMP 에러 메세시 중 하나(Type : 2)
- 또는 PMTUD(Path MTU Discovery)라고 함
- 목적지까지 가는 경로 중의 라우터에서 전송 가능한
데이터 링크 MTU 보다 큰 IP 데이터그램일 경우에,
발신지에게 IP 단편화하도록 알리는 ICMP 에러메세지
②. 상대측이 제대로 동작하는지 여부 확인(Ping)
- ICMP 메세지 중 하나.(Type : 128, 129)
- 인터넷상의 어떤 호스트가 제대로 동작하고 있는지 확인하기 위해 Echo Request 메세지를 보내면 해당 호스트는 이에 대한 응답으로 Echo Reply 메세지를 보냄
간단하게 다시 설명하자면,
라우터에서 수용 가능 MTU 보다 큰 IP 데이터그램을 받았을 때,
라우터가 이를 단편화 하지 않고, 이러한 사실을 발신지에게 ICMPv6를 통해 알리는 기능입니다.
PING 명령어를 사용할때 이 기능이 사용됨.
32비트 빈공간이 여기서도 사용됨.
메세지코드는 통상 0으로 셋팅.
ID는 IPv4에서 Fragmentation 할 때 ID를 붙이는 것과 같은 역할을 수행합니다.
순서번호는 단일 질의에 대하여, 여러번의 질의메세지를 보낼 때 이들에 대한 일련번호임.
선택적 데이터 항목은 송신측에서 의무적으로 데이터를 포함시키지 않아도 되지만 일단 포함시키면 수신측도 이 데이터를 포함시켜야함.
③. 이웃 탐색(NDP)
- ICMP 에러 메세시중 하나.(Type : 133 ~ 137)
- IPv6의 핵심적인 프로토콜로써, 로컬 네트워크 내 이웃 노드들의 탐색 등을 위한 프로토콜.
ND란 주변(인접) 노드들을 발견/탐색/변경검출/유지하기 위한 정보를 요청하거나 제공하는 기능입니다.
NDP는 어떤 네트워크에 새로운 장비가 추가될 때 주변 장비나 시스템 등을 서로 파악하는 프로토콜입니다.
아래 그림은 NDP가 어떻게 작동되는지 나타나 있는 그림이다.(출처: 한국인터넷진흥원)
IPv6에서 NDP의 용도는
ㅇ 동일 링크 상에 있는 라우터를 찾기 위함 (IRDP)
ㅇ 자신이 속한 네트워크의 IP 주소 프리픽스를 알기 위함 (IP Address Prefix)
ㅇ 동일 링크 상의 노드들의 데이터링크계층 주소를 알기 위함 (Address Resolution,
ARP)
ㅇ 동일 링크 상의 노드들의 데이터링크계층 주소의 변동사항을 검출하기 위함
ㅇ IPv6 주소 자동 설정을 수행하기 위함 (Address Autoconfiguration)
ㅇ IPv6 주소 자동 생성시에 충돌 도메인 내에 있는지 여부를 알기 위함
ㅇ 이웃 노드들의 생존 여부를 알기 위함
ㅇ 최적의 다음 홉(Next Hop)을 알기 위함
ㅇ 자신이 속한 링크의 네트워크 파라미터(IP Prefix,MTU 등)를 알려주기 위함
요약하자면 IPv4에서 개별적으로 존재하던 기능들을 한곳에 묶어놓아 효율적으로 처리 할 수 있도록 만든 프로토콜이라고 생각하시면 될 것 같습니다.
•Router Discovery (라우터 탐색)
NDP의 라우터 탐색에서 자주 쓰이는 메시지 패킷의 형태에 대해 알아보겠습니다.
RA와 RS 메시지는 동일 링크상의 라우터들을 찾기 위해서 쓰이지만 자신이 속한 링크의 네트워크 라라미터를 달려주기 위해서 쓰이기도 합니다. 지금부터 메시지 구조를 살펴볼게유
- RS (Router Solicitation, 라우터 간청) : type 133
- 호스트가 라우터에게 RA 메세지를 요청하기 위해 보내는 메세지
ㅇ 호스트 자신이 사용할 글로벌 주소(IPv6 Global Unicast Address)를 생성하기 위해,
- 호스트 자신의 링크 로컬 주소를 생성하고 난 뒤에,
- 현재 라우터가 사용하고 있는 네트워크의 IP 프리픽스가 무엇인지를 알려달라는 요청
. 이때의 호스트는 링크 상에 라우터 존재 조차도 모르고 있음
ㅇ RS 메세지에 포함되어 송출되는 주소
☞ 멀티캐스트 주소 참조
- 출발지 MAC 주소 : 호스트 자신의 MAC 주소
- 목적지 MAC 주소 : 3333 0000 0002
- 출발지 IPv6 주소 : 호스트 자신의 링크로컬주소 또는 미확정주소(::)
- 목적지 IPv6 주소 : FF02::2 (모든 라우터)
- RA (Router Advertisement, 라우터 알림) : type 134
라우터는 주기적으로 RA 메세지를 방송하거나,
RS에 대한 응답함.
RA 메세지 내에 해당 네트워크에 대한 정보를 담게됨
(Prefix,MTU,디폴트라우터 등).
RA 메세지 패킷 구조
ㅇ Hop Limit 필드
- IPv6 패킷의 홉 수의 제한
ㅇ M,O flag 필드
- `주소자동생성`과 관련된 플래그 필드
- M flag (Managed Address Configuration flag)
. DHCPv6로부터 Global Unicast Address를 할당되도록 원할 때 `1`로 셋팅
- O flag (Other Configuration flag)
. DHCPv6로부터 Global Unicast Address 이외에도 (DNS,TFTP 서버 IP주소)를 할당되도록 원할 때 `1`로 셋팅
ㅇ Router Lifetime 필드
- `0`이면, RA 메세지를 보낸 라우터를 Default Router List에서 제외
ㅇ Options 필드
- 라우터의 링크계층 주소, IP Prefix 정보, MTU 등
ㅇ RA 메세지에 포함되어 송출되는 주소
☞ IPv6 멀티캐스트 주소 참조
- 출발지 MAC 주소 : 라우터 자신의 MAC 주소
- 목적지 MAC 주소 : 3333 0000 0001
- 출발지 IPv6 주소 : 라우터 자신의 링크로컬주소
- 목적지 IPv6 주소 : FF02::1 (모든 호스트)
Icmpv4에서도 존재하며 solicitation 할때 주소가 다름 224.0.0.2 와 FF02::2
호스트가 IPv4의 [p2p type = "slug"값 = "what-is-local-area-network"] LAN 상의 라우터의 존재와 위치를 알아 내는 ICMP Router Discovery Protocol (IRDP) 은 호스트 가 First Hop Redundancy Protocol (FHRP) [/ p2p] 네트워크. IRDP는 라우팅 정보를 수동으로 구성 할 필요가 없습니다.
이때, 224.0.0.2는 IPv4 멀티캐스트 주소로 정해져 있는 주소이며, subnet에 있는 모든 라우터 그룹에게 메시지를 보낸다는 의미입니다.
- Stateless Auto Configuration
먼저 글로벌 주소를 생성하기 위하여 현재 라우터가 사용하고 있는 글로벌 prefix를 요청하는 메시지를 전송한다.
출발지 주소는 자신의 링크 로컬주소 혹은 미 확정주소 (::)를 이용하며 목적지 주소는 all router multicast 주소를 사용한다.
Stateless Auto Configuration은 DHCP와 같이 별도의 설정이 없더라도 라우터와의 상호 작용으로 자동으로 글로벌 주소를 획득할 수 있는 기능입니다.
RS메시지에 대한 응답 메시지로 라우터 인터페이스에 설정된 글로벌 /64의 prefix 정보를 포함한 정보들을 제공
출발지 주소는 자신의 링크 로컬 주소를 이용하며, 목적지 주소는 all node multicast 주소를 사용함
•Neighbor Discovery (이웃 탐색)
NS와 NA는 이웃 노드의 데이터링크 주소를 알기 위해 쓰이기도 하지만 이웃 노드들이 살아 있는지 죽어있는지 계속적으로 알아보는 기능도 수행합니다. 또한 ICMPv6에서 추가된 기능인 Duplicate Address Detection(중복 주소 검출)의 기능도 수행합니다. 이 DAD기능은 wireshark 분석 부분에서 설명하겠습니다.
- NS (Neighber Solicitation, 이웃 간청) : type 135
. IPv6 주소 (출발지 주소,source address)
.. 아직 정식 IPv6 주소가 없으므로, Unspecified Address가 기록됨
. IPv6 주소 (도착지 주소,destination address)
.. Solicited Node Multicast Address (FF02::1:FFXX:XXXX)
. IPv6 주소 (목적지 주소,target address)
.. 주소자동생성 기능에 의해 생성된 IPv6 주소
. type : 135
. code : (미사용) 0으로 셋팅
. Checksum : 16 비트짜리 체크섬 필드
----------------------------------------
NS는 NA에 대한 응답 메시지를 의미합니다.
. type : 136
. code : (미사용) 0으로 셋팅
. Checksum : 16 비트짜리 체크섬 필드
. 플래그 필드
.. R : 라우터 플래그 (1 비트)
.. C : 요청 플래그 (1 비트)
.. O : 덮어쓰기 플래그 (1 비트)
- NA (Neighber Advertisement, 이웃 알림) : type 136
- DAD (Duplicate Address Detection)
ICMPv6에서 추가된 기능으로 처음 인터페이스가 활성화된 호스트는 자신과 인접한 라우터의 존재 유무를 확인하고 해당 라우터와 통신하기 위해 스스로 링크 로컬주소를 생성합니다. 이때 호스트는 링크 상에 자신이 사용할 주소와 동일한 주소를 사용하는 장비가 존재하는지 확인하는 과정을 DAD 과정이라고 합니다.
ppt참조
호스트 A는 EUI-64포맷을 바탕으로 링크 로컬 주소를 생성하고 이 주소에 대한 DAD과정을 수행하기 위해 NS 메시지를 전송한다. 이때 NS 메시지의 출발지 IPv6는‘::’(미 확정 주소)를 사용하며, 목적지 주소는 자신이 부여할 FE80::2:260:8FF:FE52:F9D8를 기반으로 한 FF02::1:FF52:F9D8 solicited node multicast 주소를 보낸다.
링크 상에 동일한 주소를 사용하고 있는 장비가 없을 경우 응답 메시지가 전송되지 않으며, 동일 주소가 존재하는 장비가 있다면 NS 메시지에 대한 응답으로 NA 메시지를 전송한다.
- 잘못 설정된 디폴트 라우터를 올바르게 알려주기 위함.
- 동일 로컬 네트워크에 여러 라우터가 있을 경우에, 더 효율적인 다음 홉으로 가는 라우터를 알려줌
※ 라우터 측에서는 비효율적인 디폴트 라우터 주소를 갖는 해당 호스트에게
직접 유니캐스트(1:1) 전송을 하며 디폴트 라우터 주소를 바로 잡아줌
※ ICMPv4와 달리 ICMPv6 Redirect는 ICMP 오류메세지가 아닌 ICMP 정보성 메시지로
분류됨
ㅇ (예약됨) : 사용하지 않고 남겨둠
ㅇ 대상 주소 : 더 좋은 경로를 갖는 라우터 IP 주소
ㅇ 목적지 주소 : 비효율적 경로를 갖는 라우터 주소를 갖는 호스트 IP 주소
- 라우터는 이 IP 주소를 갖는 호스트에게 ICMPv6 Redirect 메세지를 유니캐스트로
전송함
④. 그룹 멤버십 관리(MLD)
MLD는 IPv4에서의 IGMP(internet group management)와 유사한 기능을 수행하는 프로토콜로서, 연결된 링크 상에 멀티캐스트 그룹에 소속되어 있는 호스트가 존재하는 지의 여부를 확인하거나, 멀티캐스트 그룹에 소속되어 있는 호스트들의 관리를 목적으로 사용합니다.
ppt 참조
요약하자면, MLQ는 라우터가 호스트에게 특정 그룹에 호스트가 참여하고 있는지 확인을 위해 보내주는 신호.
MLR은 호스트가 라우터에게 응답을 위해 가입하려고 하는 그룹의 멀티캐스트 주소를 밝혀주는 신호
MLD는 호스트가 라우터에게 더이상 보내지 말라고 말해주는 신호
의 여부를 확인하기 위한 ICMPv6 메시지
(TYPE : 130)
메시지 전송 시, 출발지 주소는 자신의 링크 로
컬 주소를 사용, 목적지는 all node multicast를
사용
- MLR : MLQ메시지를 받은 대상이 응답을 위해 사용하는 ICMPv6 메시지(TYPE : 131)
메시지 전송 시 출발지 주소는 자신의 링크 로
컬 주소를 사용, 목적지는 MLQ 메시지를 보낸
상대방의 링크 로컬 주소를 사용
게 보내는 ICMPv6메시지(TYPE : 132)
메시지 전송 시 출발지 주소는 자신의 링크 로컬
주소를 사용, 목적지는 all router multicast 주소
를 사용
- MLDv1 (RFC 2710) : IGMPv2와 유사
ㅇ 각 필드별 설명 (MLDv1)
- type (8 비트)
. Query (type 130), Report (131), Done (132)
- code (8 비트)
. '0'으로 셋팅됨. 아무런 의미 없음
- 체크섬 (16 비트)
- 최대응답지연(Maximum Response Delay) (16 비트)
. 라우터가 Query 메세지 보낸 후, 각 호스트가 이에 랜덤 지연 응답하는 시간
. 한꺼번에 모든 호스트가 응답하는 것을 가급적 피하기 위함
- 멀티캐스트 주소 (128 비트)
. General Query : 모두 `0`으로 셋팅됨
. Multicast Address Specific Query : 현재 수신 여부를 알고자하는 멀티캐스트
주소
. Report : 호스트가 수신 원하는 멀티캐스트 주소
. Done : 호스트가 그만 탈퇴하고 싶은 멀티캐스트
주소
결론
※ 기존의 IPv4에서는, ARP 등 다양한 프로토콜들에 의해 개별적으로 구현되던 기능이, IPv6에서는, NDP 기능으로 모두 통합시키고 향상 시킴
ICMPv4와 ICMPv6는 기본적으로 유사하나 구조적으로 달라진 점은 ARP,IGMP가 ICMPv6에 통합되었다는 것이고 RARP가 없어졌다는 것입니다. 기능적으로 달라진 부분은 Destination Unreachable, Echo Request와 같은 기본적인 error message는 type number가 바뀌었다는 것입니다. Neighbor Discovery와 관련 기능을 지원하기 위해 새로운 type과 code가 추가되었습니다.
ICMPv4 vs ICMPv6
5. 정리
[ex) PMTUD, MLD, NDP, DAD, Stateless Auto
Configuration]
6. WireShark 패킷 분석
'Network' 카테고리의 다른 글
[C Network Programming] Parity Code C코드 (0) | 2024.03.13 |
---|---|
[C Network Programming] Dijkstra's Routing Algorithm C code (0) | 2024.03.11 |
[C Network Programming] Stop&Wait ARQ Protocol (0) | 2024.03.10 |
[C Network Programming] Distance Vector Routing Algorithm C code (0) | 2024.03.10 |