[인터넷 프로토콜] 3.ARP
개념
- 주소 결졍 프로토콜
- IP 주소를 입력으로 하여 그 해당 MAC 주소를 결정해주는 프로토콜.
- 커널에 구현되어 있음 (커널 마다 상세 구현 조금씩 다를 수 있음.)
라우팅 테이블 => 다음 홉 IP 주소를 알아냄 (3계층)
ARP 캐시 => 다음 홉 IP주소에 해당하는 MAC 주소를 알아냄. (2계층)
한 홉 건너기 동작 개요
1. 컴퓨터/라우터에서 목적지 IP로 라우팅 테이블 검색
매칭된 열에서
(1) 인터페이스 : 어떤 인터페이스로 나가야 되는지
(2) 게이트웨이 : 다음 홉 IP 주소 (연결됨으로 표시된 케이스라면 다음홉 IP = 최종 목적지)
* 인터페이스가 점대점 (p2p) 로 다음홉에 연결되어 있다면 다음홉 IP 주소 및 arp 필요 없음. 그냥 그 문으로 나가면 다음 홉 도달 가능.
2. 다음 홉 IP 주소를 MAC 주소로 변환
(1) 일단 arp 캐시에서 검색
- 여기 초록색 인터페이스 (나가는 문) 리스트가 있다는 것은, 해당 인터페이스를 통해 연결된 데이터링크가 공유형 이라는 것.
(2) 매핑 정보가 없으면
ARP 프로토콜을 동작시켜 MAC 주소 찾고, 캐싱
필요한 IP주소 매핑값이 ARP 캐시에 이미 있는 경우 => 해당 정보 사용.
없다면 => ARP 프로토콜 (3계층) 동작하여 MAC 주소 알아냄.
- IP 데이터그램은 MAC 주소 알아낼 때까지 커널에서 대기
3. 찾은 MAC 주소를 데이터 링크 계층 프레임에 넣고, 커널에서 대기하고 있던 IP 데이터그램을 담아 링크 계층으로 전송.
- 2계층이 다음 홉으로 배달
ARP 프로토콜 동작 방식 비유
- 호텔 복도 = 2계층 shared medium
- IP 주소 = 이름
- MAC 주소 = 호텔 방번호
- 모든 방에서 ARP가 지르는 소리를 듣지만, 자기와 상관 있는 방에서만 대답.
ARP 패킷 형식
질문 (op=1)
2계층 type (Ethernet) |
3계층 type (IPv4) |
2계층 주소 길이 (MAC 주소 byte) | 3계층 주소 길이 (IPv4 byte) | operation (질문) |
보내는 쪽 MAC 주소 |
보내는 쪽 IP 주소 |
대답하는 쪽 MAC 주소 (모름) |
대답하는 쪽 IP 주소 |
1 | 08-00 | 6 | 4 | 1 | 58-00-e3-66-a0-65 | 172.30.1.59 | 00-00-00-00-00-00 | 172.30.1.254 |
- 링크 상에 있는 모든 인터페이스가 들을 수 있도록, 링크 계층 브로드캐스트를 통해 전송
- 이 데이터링크에 (이를테면 이더넷)에 연결된 모든 인터페이스가 ARP 요청을 듣고 자기한테 온 요청인지 (자기 IP=노랑색) 확인하려 면 일단 모두가 이 이더넷 프레임을 읽어들여야 함.
- 따라서 ARP를 실은 프레임 MAC 주소는 ff-ff-ff-ff-ff-ff 로 설정 (브로드캐스트 주소)
- Sender의 주소는 굳이 왜 보내는가? => 응답할 때 오버헤드 줄이려고.
응답 (op=2)
2계층 type | 3계층 type | 2계층 주소 길이 | 3계층 주소 길이 | operation | Sender 2계층 주소 |
Sender 3계층 주소 |
Target 2계층 주소 |
Target 3계층 주소 |
1 | 08-00 | 6 | 4 | 2 | 00-07-89-82-0d-aa | 172.30.1.254 | 58-00-e3-66-a0-65 | 172.30.1.59 |
- Target과 Sender 위치가 바뀜
- 응답할 때는 브로드캐스트 주소가 아닌 유니캐스트 주소(58-00-e3-66-a0-65)
ARP 캐시 업데이트 규칙
Host A : Mb를 물어본 쪽
Host B : 대답한 쪽
Host C : 질문 브로드캐스팅을 들은 다른 호스트
라고 하자.
1. A
응답받은 (B, Mb)로 캐시 업데이트
2. B
질문할 때 온 (A, Ma)정보로 캐시 업데이트
3. C
A가 질문할 때 들은 (A,Ma) 정보에서 기존에 A에 대한 엔트리가 있는 경우에만 덮어쓰기.
- NIC 교체 등 A의 맥주소가 달라졌을 수 있으므로.
특수한 ARP
1. Gratuitous ARP
- Target Ip = Sender Ip로 세팅한 질문(op=1) 패킷 전송.
- 자신의 (IP, MAC 주소) 매핑이 변경되었다는 것을 공표. 브로드캐스팅
사용하는 케이스
- 하드웨어 NIC 교체
- 백업 서버 자동 교체
- 와이파이 접속을 위해 P라는 AP를 썼다가, Q라는 AP로 바꾸게 될 때 등..
- 컴퓨터가 리부트 되었을 때, 링크가 끊어졌다가 다시 연결되었을 때 (=인터페이스 UP될 때) 자동 전송
- DAD (duplicate address detection. IP 주소 중복 할당 탐지)
ㄴ 이 질문에 응답자가 있다는 것은 IP가 중복 할당되었다는 것 알려줌.
(심화) ARP 캐시 오염
1) 실수로 오염되는 케이스를 개선 : DAD를 개선한 ACD(address conflict detection)
DAD로 인한 오염 시나리오)
어떤 호스트 C가 실수로 자신의 IP주소를 A로 잘 못 설정함.
C 부팅할 때 (A, Mc)로 gratuitous ARP 브로드캐스팅.
이걸 들은 제3자들이 캐시 잘못 업데이트.
당분간 제3자들은 A에게 보낼 IP 메세지를 C에게 잘못 전송.
ACD 동작 방식)
1단계. ACD Probe (탐색)
- Source IP = 0.0.0.0으로 세팅하고 질문 브로드캐스팅
- 제3자들은 이걸 들어도 캐시 업데이트 x (기존에 이 Ip로 캐시 엔트리가 있을리 없으니)
2단계. ACD Annoucnement (공표)
- 1단계를 거치며 자기가 쓰고 싶은 IP를 남이 사용하지 않았다는 것을 확인. (1단계에서 응답 없었다면)
- Sender IP = Target IP = 확인한 IP로 세팅해 전송. 공표.
2) 고의적인 공격 : ARP 스푸핑
해커 호스트 C가 고의적으로 gratuitous ARP or ACD 공표를 통해
다른 pc의 arp 캐시 매핑을 (A, Mc), (B, Mc)로 덮어씀.
A, B로 가야할 패킷을 C가 가로채서 몰래 들여다 볼 수 있게 됨.
=> arp는 아주 오래전에 개발되어 보안이 매우 취약한 특성이 있다.
- 이걸 보완하기 위해 최근 라우터는 아주 자주 자신의 매핑이 정확한지 체크 (= 모든 매핑에 대해 수 십초 간격으로 계속 ARP 요청을 보냄)
- 정당한 IP 소유자와 악성 행위자가 매핑을 뺏고 빼앗으면 어떤 데이터그램은 A로, 어떤 것은 C로 가는 현상.
(A 사용자 입장에서는 인터넷이 되었다 안되었다 하는 느낌)
2. Proxy ARP
- 모바일 IP를 위한 용도
3. Directed ARP
- 브로드캐스트가 아닌 유니캐스트 질문 요청.
- 캐시 엔트리 1200초 다되어 Expire 되기 전에 연장해도 되는지 묻기 (polling)