본문 바로가기

네트워크 끄적끄적

2023/01/11 ARP 프로토콜

ARP프로토콜

 

ARP가 하는일 

ARP프로토콜은 같은 네트워크 대역에서 통신을 하기위해 필요한 MAC주소를 IP주소를 이용해서 알아오는 프로토콜이다.

 

같은 네트워크 대역에서 통신을 한다고 해도 데이터를 보내기 위해서는 7계층부터 캡슐화를 통해 데이터를 보내기 때문에 IP주소와 MAC주소가 모두 필요하다. 이 때 IP주소는 알고 MAC주소는 모르더라도 ARP를 통해 통신이 가능하다.

 

 

ARP프로토콜 구조

 

Hardware type : 이더넷만 오기 때문에 16진수로 0001이온다
Protocol type : IPv4만 오기때문에 16진수로 0800이온다
Hardware Address Length : MAC주소 6바이트기때문에 06
Protocol Address Length : IP주소 4바이트이므로 04

Opcode는 물어볼때는 0001 응답할때는 0002이다

 

A가 C컴퓨터에 통신을 하려고 IP밖에 모르는 상태일 때 어떻게 통신을 할까

 

 

A컴퓨터가 상대방에게 ARP요청을 한다 이걸 보낼 때 인캡슐레이션해서 보낸다.

ARP가 3계층이기 때문에 2게층인 이더넷프로토콜을 앞에 붙여서 보낸다.

 

A컴퓨터가 인캡슐레이션

 

근데 여기서 이상한 점은  A가 C한테 요청을 보내는데 ARP구조를 살펴보면 출발지 MAC주소, 출발지 IP주소를 알고 목적지 MAC 주소, 목적지 IP주소를 알아야한다. 목적지 MAC주소를 몰라서 목적지 IP주소 가지고 아려고 하는것이다.

ARP는 그렇다 쳐도 이더넷 프로토콜 구조는 목적지 MAC주소, 출발지MAC주소, 상위프로토콜인데 목적지 맥주소를 모르는것이다. 그래서 일단 아래 사진처럼 한다.

 

 

입캡슐레이션

 

 

그리고 이더넷 프로토콜도 인캡슐레이션한다.

목적지 MAC주소를 모르기 때문에 아래 사진처럼 FF:FF:FF:FF:FF:FF로 꽉채우게 된다면, IP주소 뒷부분을 1로 꽉채우게 된다면 브로드 캐스트가 되는것 처럼 이 프로토콜을 작성해서 같은 네트워크에 있는 모두에게 보내게된다.

 

 

이더넷 프로토콜 인캡슐레이션

 

모두에게 보내고있다.

 

 

가운데있는 장비는 2계층 장비인 스위치이다.

2계층 장비이기 때문에 2게층 프로토콜까지만 확인한다.

 

디캡슐레이션

 

그리고 목적지 MAC주소가 브로드캐스니까 같은 네트워크에 있는 모두에게 보낸다.

 

모두에게 보낸다.

 

이걸 받은 모두는 인캡슐레이션 과정을 거친다.

목적지 MAC주소를 확인해보니 브로드캐스트라 본인에게 온건 맞으니 3계층까지 까보게된다. 그러면 본인의 IP와 목적지IP가 맞는 애가 있고 안맞는애가 있다.

 

IP주소

 

그렇게 되면 본인 IP랑 안맞는 애들은 패킷을 버리게된다.

 

맞는애만 가지고 안맞는 애들은 버린다.

 

그러면 C는 응답프로토콜을 만들고 마찬가지로 인캡슐레이션을 한다.

 

 

C가 인캡슐레이션

 

C가 인캡슐레이션

 

 

그렇게 보내게 된다면 2계층 장비인 스위치가 2계층까지 디캡슐레이션 해보고 A에게 보내는걸 알기 때문에 A에게 보낸다.

 

 

A가 받음

 

그럼 A는 그것을 디캡슐레이션 해보고 C의 MAC주소를 알게된다.

 

 

A의 디캡슐레이션

 

그리고 ARP 캐시 테이블이라는곳에 30번 IP를 쓰는 C의 컴퓨터 MAC주소를 등록한다.

 

 

ARP 캐시 테이블 등록

 

 

이것이 ARP프로토콜을 이용해서 상대방의 MAC주소를 알아내는 과정이다.

 

통신했던 컴퓨터들의 주소는 ARP 테이블에 남는다.

이 테블도 일정시간이 지난다면 없어지게 된다.

만약 다시 통신을 하려고 하면 ARP 프로토콜로 다시 알아야한다.

 

 

CMD에 arp -a를 치게되면 본인의 ARP 테이블을 확인할 수 있다.

내 컴퓨터의 ARP 테이블