본문 바로가기

arp 프로토콜

arp 프로토콜은 네트워크 계층인 3계층 프로토콜중 하나이다.

 

컴퓨터는 통신을 위해 고유 식별값인 MAC주소를 필요로 하게 된다. IP주소가 있는데 왜 MAC주소가 필요할까?

사실 반대의 질문이 더 그럴듯한 질문이다. MAC주소가 있는데 왜 IP주소가 필요할까? 프로토콜의 설계를 떠나, 고유 식별값인 MAC주소를 사용하기만 해도 논리적으론 통신이 될것 같다. 하지만 우리는 통신을 위해 MAC주소와 IP 주소를 사용한다.

 

MAC주소에는 체계가 없다. MAC주소의 절반은 랜카드 회사와 관련이 있긴 하지만, MAC주소 자체가 어떠한 체계를 가지진 않는다. 그러한 MAC주소만 가지고 네트워크의 네트워크인 인터넷에서 통신을 하기란 여간 어려운것이 아닐것이다. 이러한 점을 해결하기위해 IP 프로토콜이 나오게 되었다.

 

컴퓨터는 통신을 위해 MAC주소를 필요로 하게 되고, arp 프로토콜은 IP주소를 통해 MAC 주소를 얻기위한 프로토콜이다. 

 

그럼 arp 프로토콜은 어떻게 동작하게 될까

 

아래는 A호스트 (192.168.0.38)이 B호스트 (192.168.0.200)에 통신하기 위해 arp를 통해 mac주소를 얻는 과정이다.

 

통신을 하고자 하는 호스트(이하 A호스트, 192.168.0.38)는 우선 자신의 arp 테이블을 참조하게 된다.

아래 명령을 통해 해당 테이블을 확인할 수 있다.

arp -an

arp 테이블

우선 통신을 위해 누군가에게 물어본다는것 자체가 통신이다. 하지만 누가 누구인지 모르는 A호스트는 어떻게 질의를 날리게 될까?

컴퓨터는 브로드캐스팅을 통해 네트워크 전체에 질의를 날리게 된다.

 

이후 과정은 아래 명령을 통해 확인할 수 있다.

tcpdump -i {네트워크 인터페이스} arp -vvv -nex

arp Request 패킷

**:**:**:**:**:**(A호스트의 mac주소) > ff:ff:ff:ff:ff:ff

내가 네트워크 전체에 브로드 캐스팅을 한다.

 

Request who-has 192.168.0.200 tell 192.168.0.38

192.168.0.200이 누구인지 192.168.0.38(자신) 에게 알려줘.

 

네트워크 내에 B호스트(192.168.0.200)가 존재한다면 자신의 mac주소를 알려준다.

그외 나머지 호스트들은 해당 패킷을 파기한다.

 

**:**:**:**:**:**(B호스트의 mac주소) > **:**:**:**:**:**(A호스트의 mac주소)

B가 A에게 보낸다.

 

Reply 192.168.0.200 is-at **:**:**:**:**:**

192.168.0.200의  mac주소는 **야

 

이렇게 A호스트는 B호스트의 mac주소를 알게되고, 해당 주소를 자신의 arp 테이블로 기록하게 된다.

 

192.168.0.200(B호스트)가 추가된 arp테이블

이후 A호스트는 B호스트와 통신을 하기 위해 자신의 arp 테이블을 확인하여 통신하게된다.