MAC 주소 조회는 48비트와 6개의 옥텟에서 시작하며, 거의 모든 실수는 첫 번째 옥텟 안의 두 비트를 무시하는 데서 비롯됩니다. I/G 비트는 프레임이 유니캐스트인지 멀티캐스트인지를 나타냅니다. U/L 비트는 접두사가 전역적으로 할당되었는지 로컬에서 관리되는지를 나타냅니다. 이 비트들을 잘못 해석하면 벤더 조회는 자신 있게 엉터리 결과를 내놓습니다.
이 가이드는 바이트 구조, 사람들을 헷갈리게 만드는 비트 번호 매기기, 최신 기기가 주소를 무작위화하는 이유, 48비트 주소가 IPv6 링크 로컬용 EUI-64 인터페이스 식별자가 되는 방법, 그리고 조회 도구가 추측 대신 표시해야 하는 오류들을 다룹니다. 어떤 주소가 실제 기기에 속한다고 주장하지 않습니다. 여기 있는 도구들은 합성 값을 파싱하고 생성합니다.
48비트 구조
MAC-48 주소는 6개의 옥텟, 즉 48비트이며 보통 6개의 16진수 쌍으로 표기됩니다. 처음 세 옥텟은 IEEE가 제조사에 할당하는 OUI(Organizationally Unique Identifier)입니다. 마지막 세 옥텟은 해당 제조사가 할당하며, 실제로는 많은 벤더가 일련번호나 무작위 소스에서 이를 도출합니다.
텍스트 형식에서는 16진수 숫자가 최상위부터 먼저 표기되지만, IEEE는 전송 시 각 옥텟을 최하위 비트부터 전송합니다. 이러한 불일치 때문에 첫 번째 옥텟만이 모든 사람을 혼란스럽게 만드는 비트 번호 매기기의 유일한 지점이 됩니다. 표준에서 비트 0은 문자열의 가장 왼쪽 비트가 아니라, 표기된 첫 번째 옥텟의 최하위 비트를 의미합니다.
- 전체 길이: 48비트, 6옥텟, 12개의 16진수 숫자
- OUI: 처음 24비트, IEEE가 할당
- NIC 부분: 마지막 24비트, OUI 보유자가 할당
- 텍스트 형식: 각 옥텟 내에서 최상위 니블부터 먼저
- 전송 순서: 각 옥텟은 최하위 비트부터 전송
첫 번째 옥텟: I/G 및 U/L
첫 번째 옥텟의 두 비트가 의미를 지닙니다. 비트 0은 Individual/Group 비트입니다. 0은 하나의 인터페이스에 대한 유니캐스트 주소를, 1은 그룹 또는 멀티캐스트 주소를 의미합니다. 비트 1은 Universal/Local 비트입니다. 0은 주소가 OUI에 따라 전역적으로 관리됨을, 1은 일반적으로 소프트웨어에 의해 로컬에서 할당되었음을 의미합니다.
16진수 숫자는 4비트이므로, 이 두 비트는 항상 첫 번째 옥텟의 마지막 16진수 숫자에 인코딩됩니다. 그래서 유니캐스트 주소의 경우 첫 번째 옥텟의 두 번째 문자가 항상 짝수이고 멀티캐스트 주소의 경우 홀수이며, 02, 06, 0A, 0E, 12 및 유사한 패턴의 로컬 관리 유니캐스트 주소가 무작위화된 Wi-Fi 주소의 첫 번째 옥텟으로 나타나는 이유이기도 합니다.
| 첫 번째 옥텟 | 2진수 | I/G | U/L | 의미 |
|---|---|---|---|---|
| 00 | 0000 0000 | 0 유니캐스트 | 0 전역 | 일반적인 OUI 할당 인터페이스 |
| 02 | 0000 0010 | 0 유니캐스트 | 1 로컬 | 로컬 관리, 종종 무작위화됨 |
| 01 | 0000 0001 | 1 멀티캐스트 | 0 전역 | 표준 멀티캐스트 그룹 |
| 03 | 0000 0011 | 1 멀티캐스트 | 1 로컬 | 로컬 범위 멀티캐스트 |
| 33 | 0011 0011 | 1 멀티캐스트 | 1 로컬 | IPv6 멀티캐스트 MAC, 33:33 접두사 |
| FF | 1111 1111 | 1 멀티캐스트 | 1 로컬 | 브로드캐스트 프레임 |
OUI, EUI-48, 그리고 전역/로컬 구분
OUI는 24비트 할당입니다. U/L 비트가 0이면 처음 세 옥텟이 할당 대상을 식별하며, IEEE 레지스트리에 대한 조회가 의미를 가집니다. U/L 비트가 1이면 처음 세 옥텟은 기기나 운영 체제가 선택한 것이므로, 접두사가 아무리 그럴듯해 보여도 레지스트리 항목이 존재할 수 없습니다.
IEEE는 또한 MA-S 레지스트리 아래 36비트 할당을 발급하는데, 이는 다른 할당 대상과 처음 24비트를 공유하고 세 번째 옥텟에 4비트를 더 추가합니다. 처음 세 옥텟만 확인하는 조회는 해당 주소를 잘못된 보유자에게 귀속시킵니다. 정확성이 중요하다면 벤더 이름을 신뢰하기 전에 할당 크기를 확인하세요.
- 24비트 MA-L: 고전적인 OUI, 3옥텟, 일반적인 경우
- 28비트 MA-M: 다른 할당 대상과 24비트 블록 공유
- 36비트 MA-S: 24비트 블록을 공유하고 세 번째 옥텟의 4비트 추가
- U/L 비트 설정됨: 레지스트리를 완전히 건너뛰세요, 할당 대상이 없습니다
무작위화된 주소와 조회가 이제 실패하는 이유
최신 운영 체제는 Wi-Fi 주소를 순환합니다. iOS와 macOS는 네트워크별로 개인 주소를 사용하고, Android는 SSID별로 무작위화하며, Windows는 무작위 하드웨어 주소를 제공합니다. 이들 모두는 U/L 비트를 설정하는데, 이는 접두사가 벤더 할당이 아님을 나타내는 정직한 신호입니다. 이 비트를 무시하는 조회는 아무에게도 할당된 적 없는 접두사에 대해 벤더 이름을 생성합니다.
무작위화는 네트워크 제어의 가정도 깨뜨립니다. MAC 필터는 인증이 아닙니다. 대부분의 플랫폼에서 주소는 소프트웨어로 설정되기 때문입니다. 같은 속성 때문에 MAC 주소는 분석에서 안정적인 기기 식별자로 쓸모가 없습니다. 제품이 라이선스나 기기 레코드를 MAC 주소로 키잉한다면, 주소를 순환하는 모든 네트워크에서 파편화되고 쉽게 스푸핑될 수 있습니다.
- 무작위화된 주소: U/L 비트 설정됨, 접두사는 로컬에서 선택됨
- 네트워크별 순환은 값이 안정적인 기기 ID가 아님을 의미
- MAC 필터링은 우회하기 쉽고 접근 제어가 아닙니다
- 가상 머신과 컨테이너는 종종 로컬 접두사를 상속하거나 생성합니다
- 벤더 레지스트리를 호출하기 전에 항상 비트를 파싱하세요
EUI-64와 IPv6 링크 로컬 인터페이스 식별자
EUI-64는 세 단계로 48비트 주소를 64비트로 변환합니다. OUI와 NIC 부분을 분할하고, 그 사이에 FF:FE를 삽입하고, U/L 비트를 뒤집습니다. 삽입은 16비트의 추가 길이를 제공하고, 뒤집힌 비트는 64비트 형식에서도 전역/로컬 의미를 일관되게 유지하는데, 이것이 결과를 수정된 EUI-64라고 부르는 이유입니다.
결과는 일반적으로 IPv6 링크 로컬 주소의 인터페이스 식별자로 사용되며, 이는 항상 fe80::/10에 속하고 연결할 때 항상 스코프 ID와 같은 존 인덱스가 필요합니다. 프라이버시 확장은 전역 주소에 대해 이 식별자를 무작위 값으로 대체하지만, 파생된 형식은 여전히 문서, 랩 설정, 기기 인벤토리에 나타납니다.
| 단계 | 값 | 설명 |
|---|---|---|
| 시작 MAC | 00:1A:2B:3C:4D:5E | 48비트 EUI-48 |
| FF:FE 삽입 | 00:1A:2B:FF:FE:3C:4D:5E | 64비트 EUI-64 |
| U/L 비트 뒤집기 | 02:1A:2B:FF:FE:3C:4D:5E | 첫 번째 옥텟 00이 02가 됨 |
| IPv6로 형식 지정 | fe80::21a:2bff:fe3c:4d5e | 해당 인터페이스 ID를 가진 링크 로컬 |
텍스트 형식과 파싱 방법
동일한 48비트가 최소 네 가지 표기법으로 나타납니다. Unix와 Windows는 콜론으로 구분된 쌍을 사용합니다. Windows는 때때로 하이픈을 사용합니다. Cisco는 점으로 구분된 4개의 16진수 숫자 그룹 세 개를 사용합니다. 일부 도구는 대문자를, 일부는 소문자를 출력하며, 일부는 구분 기호를 완전히 제거합니다. 파서는 이들 모두를 정규화하고 정확히 48비트가 아닌 것은 거부해야 합니다.
정규화는 비교에는 중요하지만 원본 저장에는 중요하지 않습니다. 소문자 콜론 표기가 가장 이식성이 좋은 표준 형식입니다. 12자리 16진수 문자열을 그대로 허용한다면 명시적으로 하세요. 조용히 허용하면 사용자가 MAC 주소가 아닌 16자리 16진수 식별자를 붙여넣을 수 있기 때문입니다.
| 스타일 | 예시 | 일반적인 출처 |
|---|---|---|
| 콜론 | 00:1a:2b:3c:4d:5e | Linux, macOS, 대부분의 API |
| 하이픈 | 00-1a-2b-3c-4d-5e | Windows, 일부 네트워크 장비 |
| Cisco 점 표기 | 001a.2b3c.4d5e | IOS 및 관련 CLI |
| 순수 16진수 | 001a2b3c4d5e | 로그 및 CSV, 모호함 |
| 대문자 | 00:1A:2B:3C:4D:5E | 문서, 라벨 |
조회가 보고해야 하는 오류
좋은 조회는 "형식이 잘못됨"과 "로컬에서 관리됨"과 "이 접두사는 유효하지만 할당 대상이 로컬 레지스트리에 없음"을 구분합니다. 이 세 가지를 모두 "알 수 없음"으로 합치면 호출자의 시간을 낭비합니다. 수정 방법이 완전히 다르기 때문입니다.
길이 오류가 가장 흔합니다. 5옥텟, 7옥텟, 또는 64비트 EUI-64를 48비트 필드에 붙여넣는 경우입니다. 다음은 문자 오류로, 보통 OCR에서 0 대신 O나 1 대신 I가 나오는 경우입니다. 그다음은 논리적 경우입니다. 멀티캐스트 주소, 브로드캐스트 주소, 로컬 관리 접두사는 각각 구문적으로 유효하지만 의미상 특별합니다.
| 증상 | 원인 | 올바른 처리 |
|---|---|---|
| 5옥텟 | 잘린 붙여넣기 | 길이 오류로 거부 |
| O 또는 I 포함 | OCR 또는 수동 오타 | 유효하지 않은 16진수로 거부 |
| U/L 비트 설정됨 | 무작위 또는 로컬 할당 | 레지스트리 건너뛰기 |
| I/G 비트 설정됨 | 그룹 주소 | 기기 주소가 아님 |
| FF:FF:FF:FF:FF:FF | 브로드캐스트 | 인터페이스 주소로 거부 |
| 16자리 16진수 | EUI-64 제공됨 | 거부하거나 명시적으로 변환 |
충돌할 수 없는 MAC 픽스처 생성
테스트 데이터의 경우 항상 로컬 관리 유니캐스트 주소를 생성하세요. 첫 번째 옥텟을 02로 설정하고 I/G 비트를 0으로 유지합니다. 이 조합은 어떤 벤더에도 속하지 않음이 보장되므로, 픽스처가 실제 기기로 오인될 수 없고, 조회 도구는 제조사를 지어내는 대신 접두사가 로컬이라고 올바르게 표시합니다.
사이트의 MAC 도구는 48비트 구조에서 작동하며 실제 하드웨어를 식별한다고 주장하지 않습니다. 비트를 파싱하고, OUI를 벤더 보증이 아닌 비트로 표시하며, EUI-64 형식을 도출할 수 있습니다. 사이트는 Bluetooth 기기 주소나 이더넷 스타일 MAC 도구 외의 다른 48비트 식별자를 생성하지 않으며, 일련번호는 전혀 생성하지 않습니다.
- 합성 유니캐스트 주소에는 첫 번째 옥텟으로 02 사용
- 실제 벤더 OUI와 무작위 NIC 부분을 절대 함께 생성하지 마세요
- 픽스처를 문서화된 접두사에 유지하여 검색 가능하게 하세요
- 테스트에서도 MAC 주소를 안정적인 기기 식별자로 사용하지 마세요
질문
- 48비트, 6옥텟이며 보통 6개의 16진수 쌍으로 표기됩니다. EUI-64는 FF:FE를 삽입하고 U/L 비트를 뒤집어 같은 체계를 64비트로 확장합니다.
- 낮은 비트가 I/G 비트이므로, 짝수 두 번째 문자는 유니캐스트를, 홀수는 멀티캐스트를 의미합니다. 그다음 비트가 U/L 비트이며, 이것이 02가 로컬 관리 주소를 나타내는 이유입니다.
- 주소가 무작위화되었을 가능성이 높습니다. 최신 운영 체제는 개인 Wi-Fi 주소에 U/L 비트를 설정하며, 로컬 접두사에는 어떤 벤더도 할당되지 않습니다.
- 아니요. 대부분의 플랫폼에서 소프트웨어로 설정되고, 휴대폰과 노트북에서는 네트워크별로 순환하며, 스푸핑하기 쉽습니다. 라이선스나 분석의 키로 사용하지 마세요.
- 아니요. 구조와 비트를 파싱하며, 레지스트리 조회는 접두사 할당만 반영할 뿐 기기가 존재하는지는 알 수 없습니다. 사이트는 하드웨어를 검증하지 않습니다.
MAC 주소에는 몇 비트가 있나요?+
첫 번째 옥텟의 두 번째 문자는 무엇을 알려주나요?+
내 기기에 대해 벤더 조회가 아무것도 반환하지 않는 이유는 무엇인가요?+
MAC 주소는 신뢰할 수 있는 기기 식별자인가요?+
도구가 MAC 주소가 실제인지 알려줄 수 있나요?+
예시는 합성 데이터입니다. 생성된 주소를 신원 확인, 계정 등록 또는 배송에 사용하지 마세요.