티스토리 뷰

시리즈/Network

[인터넷 프로토콜] 3.ARP

빅또리 2023. 11. 5. 18:42

 

개념

- 주소 결졍 프로토콜

- IP 주소를 입력으로 하여 그 해당 MAC 주소를 결정해주는 프로토콜.

- 커널에 구현되어 있음 (커널 마다 상세 구현 조금씩 다를 수 있음.)

 

라우팅 테이블 => 다음 홉 IP 주소를 알아냄 (3계층)
ARP 캐시 => 다음 홉 IP주소에 해당하는 MAC 주소를 알아냄. (2계층)

 

 

 

한 홉 건너기 동작 개요

1. 컴퓨터/라우터에서 목적지 IP로 라우팅 테이블 검색

 

매칭된 열에서

(1) 인터페이스어떤 인터페이스로 나가야 되는지

(2) 게이트웨이 : 다음 홉 IP 주소 (연결됨으로 표시된 케이스라면 다음홉 IP = 최종 목적지)

 

* 인터페이스가 점대점 (p2p) 로 다음홉에 연결되어 있다면 다음홉 IP 주소 및 arp 필요 없음. 그냥 그 문으로 나가면 다음 홉 도달 가능.

 

 

 

2. 다음 홉 IP 주소를 MAC 주소로 변환

(1) 일단 arp 캐시에서 검색

- 여기 초록색 인터페이스 (나가는 문) 리스트가 있다는 것은, 해당 인터페이스를 통해 연결된 데이터링크가 공유형 이라는 것.

정적 - 운영체제가 넣어둔 것 / 동적 - 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)

댓글
공지사항
최근에 올라온 글