📚 네트워크 · 패킷 분석 › 03. Wireshark 패킷 분석 — 116편
이전 글: 115. IP 헤더 분석 — TTL·Flags·Fragment·Checksum 필드 읽는 법 · 다음 글: 117. ICMP 패킷 분석 — Type·Code와 오류 메시지 속 원본 헤더 읽기
IPv6 주소 체계, 40바이트 고정 헤더, NDP·SLAAC, 터널 필터는 09. IPv6 기초 — 관제에서 놓치기 쉬운 두 번째 주소 체계에서 다뤘습니다. 이 글은 Wireshark에서 IPv6 패킷 한 개를 필드 단위로 읽는 방법에 집중합니다. IPv4 편(115. IP 헤더 분석 — TTL·Flags·Fragment·Checksum 필드 읽는 법)과 같은 순서로 비교하며 봅니다.
| 헤더 항목 | Wireshark 필드 | IPv4 대응 필드 | 읽을 때 주의점 |
|---|---|---|---|
| Version | ipv6.version | ip.version | 항상 6 |
| Traffic Class | ipv6.tclass (ipv6.tclass.dscp, ipv6.tclass.ecn) | ip.dsfield | QoS 표시 |
| Flow Label | ipv6.flow | 없음 | 같은 흐름 식별용. 0이거나 연결마다 다른 값 |
| Payload Length | ipv6.plen | ip.len | 헤더 40바이트 제외 길이 (IPv4는 헤더 포함) |
| Next Header | ipv6.nxt | ip.proto | 상위 프로토콜 또는 확장 헤더 번호 |
| Hop Limit | ipv6.hlim | ip.ttl | 의미는 TTL과 같음 |
| Source / Destination | ipv6.src, ipv6.dst, ipv6.addr | ip.src, ip.dst, ip.addr | 128비트, 축약 표기로 표시 |
IPv4에 있던 헤더 체크섬과 ID·Flags·Fragment Offset 필드는 IPv6 기본 헤더에 없습니다.
IPv6는 부가 기능을 확장 헤더로 이어 붙이고, 각 헤더의 Next Header가 다음 헤더를 가리킵니다. Wireshark Details에서도 이 순서대로 트리가 펼쳐집니다.
Ethernet II eth.type = 0x86dd
↓
IPv6 기본 헤더 ipv6.nxt = 0
↓
Hop-by-Hop Options (0) 다음 = 58 ← 예: MLD 메시지의 Router Alert
↓
ICMPv6 (58) icmpv6.type = 143 (MLDv2 Report)
또는
IPv6 기본 헤더 ipv6.nxt = 44
↓
Fragment (44) offset·more·ident → Wireshark가 재조립
↓
UDP (17) / TCP (6) ... ← 첫 조각에만 상위 헤더가 있음
| Next Header 값 | 의미 | 필터 |
|---|---|---|
| 0 | Hop-by-Hop Options | ipv6.hopopts |
| 43 | Routing | ipv6.routing |
| 44 | Fragment | ipv6.fraghdr |
| 60 | Destination Options | ipv6.dstopts |
| 6 / 17 / 58 | TCP / UDP / ICMPv6 | tcp, udp, icmpv6 |
| 59 | No Next Header | 뒤에 아무것도 없음 |
ipv6.nxt는 기본 헤더의 값만 뜻합니다. 확장 헤더가 끼면 ipv6.nxt == 6으로는 TCP를 모두 찾지 못하므로, 상위 프로토콜은 tcp, udp처럼 프로토콜 이름으로 필터링합니다.
IPv4 필터가 IPv6를 잡지 못하는 점이 분석에서 가장 흔한 누락 원인입니다.
| 의도 | IPv4만 보는 필터 | IPv6까지 포함 |
|---|---|---|
| 특정 호스트 | ip.addr == 192.168.10.20 | 호스트의 IPv6 주소도 확인 후 ipv6.addr == ... 추가 |
| 경로 거리 | ip.ttl < 10 | ip.ttl < 10 or ipv6.hlim < 10 |
| 전체 IP 트래픽 | ip | ip or ipv6 |
| 연결 단위 | tcp.stream eq 3 | 그대로 사용 가능 (IP 버전 무관) |
주소 형태로 알 수 있는 단서입니다(09. IPv6 기초 — 관제에서 놓치기 쉬운 두 번째 주소 체계의 주소 유형과 함께 보기).
| 주소 형태 | 해석 |
|---|---|
fe80:: 로 시작 | 링크 로컬. 라우터를 넘지 않으므로 같은 링크의 통신 |
인터페이스 ID 가운데 ff:fe (예: …:20c:29ff:fe3a:4b5c) | MAC 기반 EUI-64 주소일 가능성. MAC 추정 가능 (U/L 비트 반전 주의) |
| 인터페이스 ID가 무작위, 시간이 지나며 바뀜 | 임시(Privacy) 주소. 같은 단말이 여러 주소로 보임 |
ff02::1, ff02::2, ff02::1:ff… | 링크 로컬 멀티캐스트 (전체 노드, 전체 라우터, Solicited-Node) |
Wireshark는 버전에 따라 EUI-64 주소에서 추정한 MAC을 [Source SLAAC MAC: …] 같은 계산 필드로 보여 주기도 합니다.
실습 예시 — 본인 소유 VM에서 IPv6 트래픽을 만들고 필드를 추출합니다. 명령과 출력은 예시(값은 환경마다 다름)입니다.
# Rocky/Ubuntu 공통: 링크 로컬 전체 노드로 ping (응답하는 이웃 확인)
ping -6 -c 3 ff02::1%ens33
sudo tcpdump -i ens33 -nn -w /tmp/v6.pcapng ip6
# 기본 헤더 필드
tshark -r /tmp/v6.pcapng -Y ipv6 -T fields -E header=y \
-e frame.number -e ipv6.src -e ipv6.dst -e ipv6.nxt -e ipv6.hlim -e ipv6.plen -e ipv6.flow
# 확장 헤더가 있는 패킷과 Fragment 헤더 값
tshark -r /tmp/v6.pcapng -Y 'ipv6.hopopts or ipv6.routing or ipv6.dstopts' -T fields -e ipv6.src -e ipv6.dst
tshark -r /tmp/v6.pcapng -Y 'ipv6.fraghdr' -T fields \
-e ipv6.src -e ipv6.fraghdr.ident -e ipv6.fraghdr.offset -e ipv6.fraghdr.more
기본 헤더 추출 결과의 형식 예시입니다.
frame.number ipv6.src ipv6.dst ipv6.nxt ipv6.hlim ipv6.plen ipv6.flow
1 fe80::20c:29ff:fe3a:4b5c ff02::1 58 1 64 0x0a1b2
2 fe80::250:56ff:fedd:eeff fe80::20c:29ff:fe3a:4b5c 58 64 64 0x00000
| 확인 포인트 | 읽는 법 |
|---|---|
1번 ipv6.hlim = 1 | 링크 로컬 멀티캐스트 ping은 Hop Limit 1로 나가 라우터를 넘지 않음 |
ipv6.plen = 64 | ICMPv6 헤더 8 + 데이터 56. 전체 IP 패킷은 40 + 64 = 104바이트 |
2번 응답의 hlim = 64 | Linux 계열 기본값과 일치 (Windows는 보통 128) |
📷 [실습 화면 삽입 위치] IPv6 패킷의 Details에서 Traffic Class·Flow Label·Payload Length·Next Header·Hop Limit를 펼친 화면
📷 [실습 화면 삽입 위치] Hop-by-Hop Options 확장 헤더가 포함된 MLD 패킷의 Details 트리 (Next Header 체인 확인)
ipv6.routing.type == 0 패킷은 정상 통신에서 기대하기 어렵습니다.| 흔적 위치 | 확인할 수 있는 것 |
|---|---|
| 패킷 캡처 | eth.type == 0x86dd 비율, 확장 헤더, 글로벌 주소 통신 여부 |
| 방화벽·IDS | IPv6 정책·룰 적용 여부, IPv6 세션 로그 존재 여부 |
| DNS 로그 | AAAA 질의·응답 (단말이 IPv6 목적지를 선택했는지) |
| 호스트 | 인터페이스의 IPv6 주소, 임시 주소 사용 여부 |
관제자가 확인할 질문
ip만으로 작성되어 누락되지 않았는가?오탐 주의: 임시 주소 때문에 같은 단말이 여러 IPv6 주소로 보이는 것은 정상이며, MLD·NDP의 Hop-by-Hop 헤더와 ff02:: 멀티캐스트도 일상적인 트래픽입니다. 단말 식별은 MAC·DHCPv6·NDP 기록과 함께 합니다(113. MAC Address 분석).
ipv6.*(plen, nxt, hlim, flow, tclass)이며, ipv6.plen은 헤더 40바이트를 제외한 길이입니다.ipv6.nxt 대신 tcp·udp·icmpv6로 찾습니다.ipv6.fraghdr.ident·offset·more로 읽고, 상위 헤더는 첫 조각에만 있습니다.ip 기반 필터는 IPv6를 포함하지 않으므로 ip or ipv6, ipv6.hlim 등을 함께 씁니다.