Media Access Control Address(MAC Address)

네트워크 장비를 식별하기 위한 고유한 하드웨어 주소.

구조

48비트(6바이트) 길이의 주소로, 16진수 형식으로 표현된다.
주로 6개의 2자리 16진수 그룹으로 표시되며, 콜론(:), 하이픈(-), 또는 점(.)으로 구분된다.

1
2
3
4
5
class MACAddress:
	def __init__(self, address):
		# MAC 주소 예시: "00:1A:2B:3C:4D:5E"
		self.oui = address[:8]        # 조직 고유 식별자 (앞 3바이트)
		self.nic = address[9:]        # 네트워크 인터페이스 식별자 (뒤 3바이트)
  • MAC 주소의 첫 24비트(3바이트)는 OUI(Organizationally Unique Identifier)로, IEEE에서 제조업체에 할당하는 고유 번호
  • 나머지 24비트는 제조업체가 각 장치에 할당하는 고유 번호.

용도

  • 로컬 네트워크 내에서 장치를 고유하게 식별한다.
  • 데이터 링크 계층(OSI 모델의 2계층)에서 사용된다.
  • 네트워크 통신에서 데이터 패킷의 송신자와 수신자를 식별한다.

특징

  • 제조업체에 의해 할당되며, 전 세계적으로 고유하다.
  • 하드웨어에 고정되어 있어 일반적으로 변경할 수 없다.
  • LAN 환경에서 장치 간 통신에 사용된다.

IP 주소와의 차이

  • MAC 주소는 물리적 주소로, 로컬 네트워크 내에서만 사용된다.
  • IP 주소는 논리적 주소로, 인터넷 상에서 전역적으로 사용된다.

기능

  • 네트워크 진단 및 문제 해결에 사용된다.
  • 네트워크 보안(MAC 주소 필터링 등)에 활용될 수 있다.

MAC 주소의 종류

유니캐스트 주소

특정 단일 장치를 위한 주소.

1
2
3
4
def send_unicast():
    # 특정 장치로만 전송
    target_mac = "00:1A:2B:3C:4D:5E"
    send_to_specific_device(target_mac, data)

멀티캐스트 주소

특정 그룹의 장치들을 위한 주소.

1
2
3
4
def send_multicast():
    # 첫 번째 옥텟의 최하위 비트가 1
    multicast_mac = "01:00:5E:00:00:01"
    send_to_group(multicast_mac, data)

브로드캐스트 주소

네트워크의 모든 장치를 위한 주소.

1
2
3
4
def send_broadcast():
    # 모든 비트가 1
    broadcast_mac = "FF:FF:FF:FF:FF:FF"
    send_to_all(broadcast_mac, data)

MAC 주소의 실제 활용

  1. 네트워크 스위칭:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    def switch_operation():
        # MAC 주소 테이블 관리
        mac_table = {}
    
        def learn_mac_address(mac, port):
            mac_table[mac] = port
    
        def forward_frame(dest_mac):
            if dest_mac in mac_table:
                return mac_table[dest_mac]
            else:
                return "flood"  # 모든 포트로 전송
    
  2. 보안 필터링:

    1
    2
    3
    4
    5
    
    def mac_filtering():
        allowed_macs = ["00:1A:2B:3C:4D:5E", "AA:BB:CC:DD:EE:FF"]
    
        def check_access(mac):
            return mac in allowed_macs
    

MAC 주소와 관련된 주요 개념

  1. MAC 주소 테이블:
    네트워크 스위치가 유지하는 MAC 주소와 포트 매핑 정보.

  2. ARP(Address Resolution Protocol):
    IP 주소를 MAC 주소로 변환하는 프로토콜.

    1
    2
    3
    4
    5
    6
    7
    8
    
    def arp_process():
        # IP 주소로 MAC 주소 찾기
        def get_mac_by_ip(ip_address):
            if ip_in_arp_table(ip_address):
                return arp_table[ip_address]
            else:
                send_arp_request(ip_address)
                return wait_for_arp_reply()
    

MAC 주소의 한계와 해결방안

  1. 규모 확장성:
    MAC 주소는 평면적인 주소 체계로, 대규모 네트워크에서는 비효율적일 수 있다.
    이를 해결하기 위해 계층적인 IP 주소 체계와 함께 사용된다.

  2. 보안 문제:
    MAC 주소는 위조가 가능하므로, 추가적인 보안 메커니즘이 필요하다:
    - 802.1X 인증
    - MAC 주소 필터링
    - 포트 보안

MAC 주소는 현대 네트워크의 기초가 되는 중요한 요소이다.
특히 로컬 네트워크에서 장치들을 식별하고 통신하는데 핵심적인 역할을 한다.

MAC Address의 유일성

MAC 주소의 유일성은 다음과 같은 방식으로 보장된다:

  1. IEEE(Institute of Electrical and Electronics Engineers)에서 제조업체에 MAC 주소 범위를 할당한다. 각 제조업체는 자사 제품에 고유한 MAC 주소를 부여할 수 있다.
  2. MAC 주소는 48비트로 구성되며, 앞 24비트는 제조업체 식별자(OUI), 뒤 24비트는 제조업체가 할당한 고유 식별자이다.
  3. 제조업체는 할당받은 범위 내에서 각 장치에 고유한 MAC 주소를 부여한다.
  4. 하지만 완벽한 유일성은 보장되지 않습니다. 제조업체의 실수나 의도적인 재사용으로 인해 중복된 MAC 주소가 존재할 수 있다.
  5. 실제로는 지리적으로 멀리 떨어진 곳에 같은 MAC 주소를 가진 장치를 배포하여 충돌 가능성을 최소화한다.
  6. 로컬 네트워크에서 MAC 주소 충돌이 발생하면 통신에 문제가 생기므로, 네트워크 관리자가 이를 해결해야 한다.

따라서 MAC 주소의 유일성은 IEEE의 할당 체계와 제조업체의 관리를 통해 높은 수준으로 유지되지만, 완벽한 유일성을 보장하지는 않다.

MAC 주소가 데이터 전송에 중요한 이유

  1. 고유한 장치 식별: MAC 주소는 각 네트워크 장치를 고유하게 식별한다. 이를 통해 로컬 네트워크 내에서 정확한 데이터 전송이 가능해진다.
  2. 로컬 네트워크 통신: MAC 주소는 로컬 영역 네트워크(LAN) 내에서 장치 간 직접적인 통신을 가능하게 한다.
  3. 데이터 패킷 주소 지정: 데이터 링크 계층에서 MAC 주소를 사용하여 데이터 패킷의 출발지와 목적지를 지정한다.
  4. 홉 간 전달: MAC 주소는 네트워크에서 다음 홉으로 데이터를 전달하는 데 사용된다. 이는 IP 주소가 처리하는 종단 간 전달과 구별된다.
  5. ARP 프로토콜 사용: Address Resolution Protocol(ARP)은 IP 주소를 MAC 주소로 변환하여 로컬 네트워크에서의 통신을 가능하게 한다.

MAC 주소는 로컬 네트워크 내에서 데이터가 정확한 장치에 도달할 수 있도록 보장하는 중요한 역할을 한다.


참고 및 출처