핵심 인사이트 (3줄 요약)

  1. 본질: ARP 프레임은 IP 패킷의 도움 없이 2계층 이더넷 프레임 안에 직접 탑재(캡슐화)되는 28바이트 길이의 가벼운 탐문 전용 메시지다.
  2. Opcode (동작 코드): ARP 프레임 내부에는 이 메시지가 주소를 물어보는 **'요청(Request, Opcode 1)'**인지, 아니면 대답해 주는 **'응답(Reply, Opcode 2)'**인지를 구분하는 핵심 식별자가 존재한다.
  3. 헤더의 이중성: ARP Request를 보낼 때, 2계층 이더넷 헤더의 목적지 MAC은 브로드캐스트(FF:FF...)지만, ARP 프레임 내부의 타겟 MAC 주소 칸은 '아직 모르니까' 모두 00:00...으로 비워둔 채 전송한다는 점이 구조적 특징이다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

  • 개념: IP를 MAC으로 변환하기 위해 송수신자가 주고받는 ARP 메시지의 내부 규격과 필드 포맷.

  • 필요성: 컴퓨터가 "192.168.0.20 쓰는 사람 MAC 알려줘!"라고 방송할 때, 단순히 텍스트로 보낼 수는 없다. 스위치와 랜카드 칩셋이 해석할 수 있도록 "나는 ARP 프로토콜이고, 내가 보내는 사람 IP, 네가 받을 사람 IP, 그리고 빈칸으로 남겨둔 네 MAC 주소 칸"을 엄격한 바이트(Byte) 규칙에 맞춰 깎아놓은 틀이 필요했다.

  • 💡 비유: ARP 프레임은 경찰이 동네방네 뿌리는 **"현상수배 전단지"**와 같습니다. 전단지(프레임)에는 "찾는 사람 얼굴(Target IP)", "이 사람을 잡으면 연락할 경찰 번호(Sender MAC)", 그리고 "빈칸으로 둔 범인의 은신처 주소(Target MAC = 00:00...)" 양식이 정확히 인쇄되어 있습니다.

📢 섹션 요약 비유: ARP 프레임 구조는 주관식 **"설문지 양식"**입니다. 내 이름과 연락처는 꽉 채워 넣고, 네가 적어야 할 답변 칸(Target MAC)만 텅 비운 채로 동네 사람들에게 돌리는 종이 쪼가리입니다.


Ⅱ. ARP 메시지의 세부 필드와 동작 추적 (Deep Dive)

1. ARP 패킷은 3계층인가 2계층인가?

ARP는 목적이 "IP(3계층)를 이용해 MAC(2계층)을 찾는 것"이므로 논란이 있지만, 구조적으로 보면 이더넷 헤더 바로 뒤에 붙는 2.5계층 프로토콜에 가깝다. 이더넷 헤더의 Type 필드가 0x0806이면, "아, 내 뱃속에 든 건 IP 패킷이 아니라 ARP 프레임이구나!"라고 인식한다.

2. ARP 메시지 28바이트의 구조

ARP 헤더는 다음과 같이 철저히 규격화되어 있다.

  • Hardware Type (2B): 이더넷 환경이면 1.
  • Protocol Type (2B): 찾고자 하는 주소가 IPv4면 0x0800.
  • H/W Length (1B) & Proto Length (1B): MAC 길이는 6바이트, IP 길이는 4바이트.
  • Opcode (2B) ★핵심:
    • 1 = ARP Request (물어볼 때)
    • 2 = ARP Reply (대답할 때)
  • Sender MAC (6B): 질문하는 내 PC의 진짜 MAC.
  • Sender IP (4B): 질문하는 내 PC의 진짜 IP.
  • Target MAC (6B): 질문할 땐 00:00:00:00:00:00 (모르니까 0으로 채움). 대답할 땐 내 진짜 MAC을 채워 넣음.
  • Target IP (4B): 내가 찾고자 하는 김대리의 IP 주소.
 ┌─────────────────────────────────────────────────────────────┐
 │                ARP Request (요청) 메시지 생성 과정             │
 ├─────────────────────────────────────────────────────────────┤
 │                                                             │
 │   [ 내 PC: IP 1.1.1.1, MAC AA:AA ]                          │
 │   [ 타겟 : IP 1.1.1.2, MAC 모름! ]                            │
 │                                                             │
 │   1. 이더넷 봉투 (L2 헤더)                                      │
 │      - 목적지 MAC: FF:FF:FF:FF:FF:FF (브로드캐스트)            │
 │      - 출발지 MAC: AA:AA:AA:AA:AA:AA                          │
 │      - Type    : 0x0806 (ARP)                               │
 │                                                             │
 │   2. ARP 알맹이 (28 Bytes)                                    │
 │      - Opcode    : 1 (Request)                              │
 │      - Sender MAC: AA:AA:AA:AA:AA:AA                        │
 │      - Sender IP : 1.1.1.1                                  │
 │      - Target MAC: 00:00:00:00:00:00 (여기를 채워달라!)       │
 │      - Target IP : 1.1.1.2                                  │
 │                                                             │
 │   ▶ 타겟 PC는 이걸 받고, Opcode를 2로 바꾸고, 빈칸 00:00에 자기  │
 │     진짜 MAC을 적어서 나한테 유니캐스트로 던져준다!                 │
 └─────────────────────────────────────────────────────────────┘

3. 와이어샤크(Wireshark)에서 잡히는 모습

네트워크 문제 해결 시 와이어샤크로 패킷을 뜨면, 통신 극초반에 항상 노란색 박스로 된 두 줄이 뜬다.

  1. Who has 192.168.0.20? Tell 192.168.0.10 (이것이 Opcode 1, Request)
  2. 192.168.0.20 is at AA:BB:CC:DD:EE:FF (이것이 Opcode 2, Reply)

📢 섹션 요약 비유: ARP 프레임은 빈칸 채우기 **"시험지"**입니다. 선생님이 시험지를 복사해서 반 전체에 쫙 뿌리면(브로드캐스트), 자기 이름(Target IP)이 적힌 학생 한 명만 빈칸(Target MAC)에 자기 학번을 적어서 선생님께 개인적으로 제출(유니캐스트)합니다.