[들어가며]
같은 네트워크 안에서는 어떻게 최종 목적지 장비에게 데이터를 전달할까요? 이때 필요한 것이 바로 물리적인 주소(MAC 주소)입니다. 그런데 우리는 보통 같은 네트워크 안에서도 MAC을 쓰기보다는 IP 주소를 많이 사용합니다. 따라서 ARP(Address Resolution Protocol)는 IP 주소를 이용해서 같은 네트워크 대역에 있는 상대방의 MAC 주소를 알아내는 중요한 역할을 합니다.
1. ARP는 왜 필요할까요?
- 핵심 역할: 같은 네트워크 대역 안에서, 통신하려는 상대방의 IP 주소는 알지만 MAC 주소를 모를 때, IP 주소를 이용해 MAC 주소를 물어보고 알아내는 프로토콜.
- LAN에서도 IP를 쓰는 이유?
- 우리가 사용하는 대부분의 애플리케이션과 운영체제는 통신 대상을 식별할 때 IP 주소를 기본으로 사용합니다. 목적지가 같은 네트워크에 있든 다른 네트워크에 있든 일관된 방식으로 주소를 사용하기 위함이죠.
- 최종적으로 같은 네트워크 안에서 데이터를 직접 전달하려면 물리적인 주소(MAC)가 필요한데, 이 변환 과정을 ARP가 담당합니다.
- MAC 주소만으로 P2P 통신은 불가능할까?
- 이론적으로는 가능합니다. 아주 낮은 레벨에서 특정 프로토콜을 사용하면 MAC 주소 기반 통신을 구현할 수 있습니다 (일부 네트워크 관리 도구나 특수 프로토콜).
- 하지만 우리가 일반적으로 사용하는 인터넷 통신(웹 서핑, 파일 전송 등)은 IP 주소 기반의 경로 설정, 포트 번호 기반의 서비스 구분 등 상위 계층 프로토콜과의 연동이 필수적이므로, MAC 주소만으로는 현실적으로 어렵습니다.
2. ARP 프로토콜 구조: 무엇을 물어보고 답하는가?
ARP 메시지 자체에도 정해진 형식이 있습니다. 주요 필드는 다음과 같습니다.
- Hardware type (2바이트): 어떤 종류의 2계층 프로토콜(하드웨어)을 사용하는지 표시. (예: 이더넷 = 0x0001)
- Protocol type (2바이트): 어떤 종류의 3계층 프로토콜 주소를 사용하는지 표시. (예: IPv4 = 0x0800)
- Hardware address length (1바이트): MAC 주소의 길이 (바이트 단위). (예: 이더넷 MAC 주소는 6바이트이므로 0x06)
- Q: 이더넷은 6바이트 고정인데 왜 필요할까?
- A: ARP는 이더넷 외 다른 종류의 네트워크에서도 사용될 수 있도록 설계되었기 때문에, 유연성을 위해 길이를 명시합니다.
- Protocol address length (1바이트): IP 주소의 길이 (바이트 단위). (예: IPv4 주소는 4바이트이므로 0x04)
- Q: IPv4는 4바이트 고정인데 왜? IPv6 대비?
- A: 마찬가지로 다른 프로토콜(IPv4 외)에서도 사용될 가능성을 열어둔 설계입니다.
- 참고: IPv6는 주로 NDP라는 다른 메커니즘을 사용합니다.
- Opcode (2바이트): ARP 메시지의 종류를 구분.
- 1: ARP 요청 (Request) - "이 IP 주소 쓰는 사람, MAC 주소 좀 알려줘!"
- 2: ARP 응답 (Reply) - "내가 그 IP 주소 쓰고, 내 MAC 주소는 이거야!"
- Source hardware address (6바이트): 송신자(물어보는 사람)의 MAC 주소.
- Source protocol address (4바이트): 송신자(물어보는 사람)의 IP 주소.
- Destination hardware address (6바이트): 수신자(찾고 있는 대상)의 MAC 주소.
- Q: 이걸 알려고 ARP 쓰는 건데, 보낼 땐 어떻게?
- A: ARP 요청(Request) 시에는 이 필드를 모르므로 보통 전부 0 (00:00:00:00:00:00)으로 채워서 보냅니다. ARP 응답(Reply) 시에는 알아낸 상대방의 MAC 주소를 채워 넣습니다.
- Destination protocol address (4바이트): 수신자(찾고 있는 대상)의 IP 주소.
- 이 IP 주소에 해당하는 MAC 주소를 찾는 것이 목표!
3. MAC 주소를 알아내는 과정: 질문과 답변
- (질문 준비) ARP 요청 생성:
- 컴퓨터 A가 같은 네트워크의 컴퓨터 B (IP: 192.168.0.10)와 통신하려고 하는데, B의 MAC 주소를 모릅니다.
- A는 ARP 요청(Request) 메시지를 만듭니다.
- Opcode: 1 (요청)
- Source MAC/IP: A 자신의 MAC/IP 주소
- Destination IP: 192.168.0.10
- Destination MAC: 00:00:00:00:00:00 (모르니까 0으로 채움)
- (질문 외치기) 브로드캐스트 전송:
- A는 이 ARP 요청 메시지를 이더넷 프레임에 담습니다.
- 이더넷 헤더의 목적지 MAC 주소: FF:FF:FF:FF:FF:FF (브로드캐스트 주소). "이 네트워크에 있는 모두 들어라!"
- 이더넷 헤더의 출발지 MAC 주소: A 자신의 MAC 주소.
- 프레임을 네트워크로 전송합니다. 스위치는 이 브로드캐스트 프레임을 자신에게 연결된 모든 포트(A가 보낸 포트 제외)로 전달합니다.
- (나에게 온 질문인가?) 수신 및 확인:
- 네트워크 내의 모든 장비는 이 브로드캐스트 프레임을 받습니다.
- 각 장비는 프레임 안의 ARP 요청 메시지를 확인하고, 'Destination protocol address (찾는 대상 IP)'가 자신의 IP 주소와 일치하는지 확인합니다.
- 컴퓨터 B는 자신의 IP 주소(192.168.0.10)와 일치하므로 응답을 준비합니다. 다른 장비들은 자신과 관련 없는 요청이므로 무시합니다.
- (답변 준비) ARP 응답 생성:
- 컴퓨터 B는 ARP 응답(Reply) 메시지를 만듭니다.
- Opcode: 2 (응답)
- Source MAC/IP: B 자신의 MAC/IP 주소
- Destination MAC/IP: A의 MAC/IP 주소 (ARP 요청 메시지에 들어있었음)
- 컴퓨터 B는 ARP 응답(Reply) 메시지를 만듭니다.
- (콕 집어 답변) 유니캐스트 전송:
- B는 이 ARP 응답 메시지를 이더넷 프레임에 담습니다.
- 이더넷 헤더의 목적지 MAC 주소: A의 MAC 주소 (이제 A의 MAC 주소를 알기 때문에 직접 보낼 수 있음 - 유니캐스트).
- 이더넷 헤더의 출발지 MAC 주소: B 자신의 MAC 주소.
- 프레임을 네트워크로 전송합니다. 스위치는 목적지 MAC 주소(A의 MAC)를 보고 해당 포트로만 프레임을 전달합니다.
- (기억해두자!) ARP 캐시 테이블 저장:
- A는 B로부터 ARP 응답을 받고, B의 MAC 주소(192.168.0.10 -> B의 MAC 주소)를 자신의 ARP 캐시 테이블에 저장합니다.
- 이제 A는 B와 통신할 때마다 ARP 요청을 보낼 필요 없이, 캐시 테이블을 참조하여 B의 MAC 주소를 바로 사용할 수 있습니다. (캐시에는 유효 시간이 있어서 일정 시간이 지나면 다시 ARP 요청을 통해 갱신합니다.)
[궁금할 수 있는 포인트 🤔]
- Q: "결국 같은 네트워크 안에서 통신하는데 왜 이렇게 복잡하게 IP 주소와 MAC 주소를 둘 다 쓰나요?"
- A: 애플리케이션 레벨에서는 IP 주소로 통신 대상을 지정하는 것이 일반적이고 편리합니다. ARP는 이 IP 주소를 실제 하드웨어(MAC 주소)와 연결해주는 '번역기' 역할을 함으로써, 상위 계층은 IP 주소만 신경 쓰고 하위 계층은 MAC 주소로 실제 전달을 담당하는 계층적 역할 분담을 가능하게 합니다.
- Q: "ARP 요청은 왜 브로드캐스트로 보내나요?"
- A: 요청하는 시점에는 상대방의 MAC 주소를 모르기 때문에, 네트워크 상의 누가 해당 IP 주소를 가지고 있는지 알 수 없습니다. 그래서 "이 IP 가진 사람 누구야?"라고 네트워크 전체에 외치는 방식(브로드캐스트)을 사용하는 것입니다.
- Q: "ARP 캐시는 계속 유지되나요?"
- A: 아닙니다. ARP 캐시에는 유효 시간(TTL - Time To Live)이 있어서 일정 시간이 지나면 해당 항목이 삭제됩니다. 왜냐하면 네트워크 환경은 변할 수 있고 (예: 장비 교체, IP 주소 변경 - 특히 DHCP 환경), 오래된 정보는 통신 오류를 유발할 수 있기 때문입니다. 필요할 때 다시 ARP 요청을 통해 최신 정보로 갱신합니다.
- Q: "ARP 구조에 길이 필드가 왜 필요한지 아직도 좀 애매해요."
- A: ARP 프로토콜 자체는 특정 하드웨어(이더넷)나 특정 프로토콜(IPv4)에만 종속되지 않고 다양한 환경에서 사용될 수 있도록 설계되었습니다. 미래에 다른 길이의 주소를 사용하는 기술이 나오더라도 ARP 프로토콜 구조 변경 없이 적용할 수 있도록 유연성을 확보하기 위한 설계라고 이해할 수 있습니다.
[마무리하며]
ARP는 보이지 않는 곳에서 IP 주소와 MAC 주소 사이의 중요한 연결고리 역할을 수행합니다. 브로드캐스트 요청과 유니캐스트 응답, 그리고 캐싱을 통해 같은 네트워크 내 장비들이 서로를 찾아 효율적으로 통신할 수 있도록 돕는 핵심 프로토콜입니다.
'네트워크 > 네트워크 기초' 카테고리의 다른 글
4계층 (전송 계층): 컴퓨터의 프로세스끼리는 이렇게 데이터를 주고받는다 (0) | 2025.04.09 |
---|---|
3계층 ②: 멀리 있는 컴퓨터와 통신하는 방법 (IPv4, ICMP, 라우팅) (0) | 2025.04.09 |
3계층 (네트워크) 개요: 다른 동네까지 길 찾아가기 (IP 주소, 라우팅) (0) | 2025.04.08 |
2계층 (데이터 링크): 바로 옆 장비와 통신하는 방법 (이더넷, MAC 주소) (0) | 2025.04.08 |
네트워크 모델와 데이터 단위 (TCP/IP 모델, OSI 7계층, 패킷, PDU) (0) | 2025.04.08 |