[네트워크/Network] 링크 계층 주소체계(MAC Address)와 ARP

kindof

·

2021. 11. 18. 23:43

0. 들어가면서

아래 포스팅에서 라우터의 입력 포트 처리 및 목적지 기반 전달 개념에 대해 공부를 했었습니다.

 

[네트워크/Network] 라우터의 입력 포트 처리 및 목적지 기반 전달

💡0. 들어가면서 이전 포스팅에서 OSI 7계층에 대해 공부했었습니다. [네트워크/Network] 네트워크의 기본: OSI 계층 구조와 캡슐화 🤔 0. 개요 "OSI 7계층이 무엇인가요?" "컴퓨터 네트워크를 왜 7계층

studyandwrite.tistory.com

 

이전에 살펴본 것처럼, 호스트와 라우터들은 네트워크 계층 주소(IP)를 가지고 있었는데요. 그런데 사실 호스트와 라우터들은 네트워크 계층 주소 뿐만 아니라 링크 계층의 주소도 가집니다. 

 

그런데 왜 네트워크 계층 주소와 링크 계층 주소가 모두 필요할까요? 이번 포스팅에서는 링크 계층 주소가 왜 필요하며, IP 주소를 링크 계층 주소로 변환하는 ARP(Address Resolution Protocol)에 대해 살펴보겠습니다.

 

내용이 꽤 길고 어려울 수 있지만, 천천히 읽어보시면 이해하기 어려운 내용은 아니라고 생각합니다. 다만, IP 주소나 라우터, 인터페이스 등의 개념에 대해 모르시는 분은 이전 포스팅을 꼭 읽고 이해해주세요.

 

그럼 시작하도록 하겠습니다.

 

 

1. MAC 주소(링크 계층 주소)

실제로 링크 계층 주소를 가진 것은 호스트나 라우터가 아닌 호스트나 라우터의 어댑터(네트워크 인터페이스)인데요. 여기서 어댑터(네트워크 인터페이스)란 우리가 흔히 알고 있는 랜(LAN)카드를 의미합니다.

 

네트워크 인터페이스

따라서 다수의 네트워크 인터페이스를 갖고 있는 호스트나 라우터는 같은 서브넷 안에 여러 개의 링크 계층 주소를 갖게 됩니다. 하지만 링크 계층 스위치는 호스트나 라우터를 연결해주는 인터페이스에 링크 계층 주소를 할당받지 않았는데요. 그 이유는 링크 계층 스위치는 호스트와 라우터 간에 데이터그램을 전달하는 일만을 하기 때문입니다. 

 

아래 그림을 보시면, 스위치에는 링크 계층 주소가 할당되어 있지 않고 각 호스트나 라우터에만 링크 계층 주소가 할당되어 있는 것을 보실 수 있습니다.

 

랜에 연결된 각 어댑터는 유일한 MAC 주소를 갖는다.

한편, 지금까지 계속 이야기해온 링크 계층 주소를 흔히 랜 주소 혹은 MAC 주소(MAC Address)라고 합니다. 대부분의 랜의 경우 MAC 주소의 길이가 6바이트이며, 따라서 2^48개만큼의 사용 가능한 랜 주소가 존재합니다. 위의 그림처럼 6바이트의 주소는 주로 16진수 표기법으로 표시되고, 주소의 각 아비트는 2개의 16진수로 표현됩니다. 

 

한편, MAC 주소의 흥미로운 점은 어떤 어댑터도 동일한 주소를 갖지 않는다는 점입니다.

 

이는 IEEE가 MAC 주소 공간을 관리하기 때문인데요. 어떤 회사에서 어댑터를 제조하려면 2^24개의 주소로 이루어진 주소 영역을 구매해야 합니다. 그리고 IEEE에서는 MAC 주소의 첫 24비트를 고정하고, 나머지 24비트는 회사로 하여금 각 어댑터에게 유일하게 부여하는 방식으로 2^24개 주소를 할당하는 것이죠.

 

또한, 어댑터의 MAC 주소는 평면 구조를 가지고 있어 어댑터의 위치에 따라 변경되지 않습니다. 즉, 이더넷 카드가 있는 휴대용 컴퓨터는 어디에 있든지 항상 동일한 MAC 주소를 갖는다는 뜻이 되는데요. 이에 반해 IP 주소는 계층 구조를 가지게 되어 호스트의 IP 주소는 호스트가 이동하면 변경되어야 합니다.

 

즉, 어댑터의 MAC 주소는 사람의 주민등록번호와 같은 느낌이며 IP 주소는 사람이 살고 있는 우편 주소와 유사한 느낌을 주죠. 우편 주소와 주민등록번호 두 가지를 다 가지는 것이 사람을 찾는 데 유용한 것처럼, 호스트와 라우터 인터페이스 역시 네트워크 계층 주소와 MAC 주소를 모두 가지는 것이 유용합니다.

 

어댑터가 프레임을 목적지 어댑터로 전송할 때, 송신 어댑터는 프레임에 목적지 어댑터의 MAC 주소를 넣고 그 프레임을 랜(LAN)상으로 전송합니다. 그런데 이 과정에서 스위치는 프레임을 자신의 모든 인터페이스로 브로드캐스팅하는데요. 이로 인해 어댑터는 자신을 목적지로 하지 않는 프레임을 수신할 수도 있게 됩니다.

 

이를 해결하기 위해 프레임을 수신한 어댑터는 프레임 안의 목적지 MAC 주소가 어댑터 자신의 MAC 주소와 일치하는지를 검사합니다. 만약 일치하면, 어댑터는 프레임에 포함된 데이터그램을 추출하고 그 데이터그램을 프로토콜 스택의 위쪽으로 전달하는 것이죠. 

 

하지만, 때때로 어떤 어댑터들은 랜상의 다른 모든 어댑터가 자신이 전송한 프레임을 수신하고 처리하기를 원할 수 있습니다. 이 경우에 송신 어댑터는 프레임의 목적지 주소 필드에 특수한 MAC 브로드캐스트 주소(Broadcast Address)를 넣는데요. 6바이트 주소를 사용하는 랜에서 브로드캐스트 주소는 48개의 1로 된 비트열(FF-FF-FF-FF-FF-FF)입니다. 이 브로드캐스트 주소는 아래에서 설명할 ARP의 리퀘스트 패킷에서 유용하게 사용될 예정입니다.

 

 

2. 왜 MAC 주소가 필요한가

위에서 송신자는 MAC 주소를 프레임에 넣고 랜 상으로 전송하며, 수신자는 해당 MAC 주소와 자신의 MAC 주소가 일치할 때만 해당 프레임을 상위 계층(네트워크 계층)으로 전달한다고 했습니다.

 

이를 조금만 자세히 설명해보겠습니다.

 

예를 들어 IP 주소 222.222.222.220을 가진 호스트가 호스트 222.222.222.222로 IP 데이터그램을 전송한다고 해보겠습니다.

 

그런데 이전에 CIDR 주소 체계 기법에 대해 설명했던 것처럼, 여기 출발지와 목적지 두 호스트는 사실 동일한 서브넷에 있습니다.

 

따라서 더 이상의 CIDR 주소체계 방식을 기반으로 데이터그램을 라우팅하는 것이 아니라, '정확히 내가 원하는' 목적지로 보내기 위해 자신의 어댑터에게 IP 데이터그램 뿐만 아니라 목적지를 고유하게 식별해주는 MAC 주소도 주어야 하는 것이죠.

 

만약 MAC 주소가 없다면 해당 서브넷에 존재하는 노드들은 동일한 브로드캐스트 랜 상에서 다른 호스트로 가는 모든 프레임들을 인터럽트 하게 됩니다. 그리고 이는 결국 자신이 원하는 목적지가 아니라 그 주변에 있는 모든 노드에게 전송한 데이터가 도착해버리는 결과를 낳게 되죠.

 

이해가 되셨나요?

 

그러면 이제 다시 돌아가서, 어떻게 송신자는 수신자의 IP 주소만을 가지고 프레임에 수신자의 MAC 주소도 같이 써 넣을 수 있을까요? 아래에서 IP 주소와 MAC 주소 간의 주소 변환을 위한 ARP에 대해 공부해보겠습니다.

 

 

3. ARP(Address Resolution Protocol)

한편, 네트워크 계층 주소(IP 주소)와 링크 계층 주소(MAC 주소)는 둘 사이에 주소 변환이 필요합니다. 인터넷에서는 이를 ARP(Address Resolution Protocol)에서 해주는데요.

 

ARP 프로토콜이 어떻게 동작하는지, 그리고 ARP를 통해 어떻게 원하는 MAC 주소로 데이터그램을 전달하는지 두 가지 상황을 나누어서 살펴보겠습니다. 각 설명에 번호를 부여했으니 번호를 따라 순서대로 이해해보시면 좋을 것 같습니다😀

 

3-1. 같은 서브넷에 있는 노드로의 데이터그램 전송

 

랜의 각 인터페이스는 IP 주소와 MAC 주소를 가진다

위 그림의 상황에서 IP 주소 222.222.222.220을 가진 호스트가 동일한 서브넷에 존재하는 호스트 222.222.222.222로 IP 데이터그램을 전송한다고 해보겠습니다. 


데이터그램을 전송하기 위해서는 출발지 노드는 반드시 자신의 어댑터에게 IP 데이터그램뿐만 아니라 목적지 222.222.222.222의 MAC 주소도 알려주어야 합니다. 그래야 송신 어댑터가 목적지의 MAC 주소가 포함된 링크 계층 프레임을 구성해서 그 프레임을 랜으로 전송할 수 있기 때문이죠.

 

그런데 이 때, 송신 호스트가 어떻게 IP 주소 222.222.222.222를 가진 호스트의 MAC 주소를 결정할 수 있을까요? 이 질문에 대한 답을 해결해주는 녀석이 바로 ARP입니다.

 

송신 호스트의 ARP 모듈은 입력값으로서 동일한 랜상의 임의의 IP 주소를 받아서 대응되는 MAC 주소를 리턴합니다. 이 예시에서 송신 호스트 222.222.222.220가 자신의 ARP 모듈에게 IP 주소 222.222.222.222를 주면, ARP 모듈은 대응하는 MAC 주소 49-BD-D2-C7-56-2A를 리턴하는 것이죠. 

 

자, 그러면 ARP가 어떻게 IP 주소를 받아서 MAC 주소를 알려주는지 동작 원리를 보도록 하겠습니다.

 

우선 각 호스트와 라우터는 자신의 메모리에 ARP 테이블을 갖고 있습니다. 이 ARP 테이블은 아래와 같이 IP 주소와 MAC 주소 간의 매핑 정보와 TTL(Time-To-Live) 값을 저장하고 있습니다. TTL은 테이블에서 각 매핑이 언제 삭제되는지를 나타냅니다.

 

222.222.222.220의 ARP 테이블

한편, 테이블은 서브넷상의 모든 호스트와 라우터에 대한 엔트리를 가지고 있지 않아도 되는데요. 즉, 어떤 노드들에 대해서는 종료된 엔트리를 갖고 있을 수 있고, 다른 노드들에 대한 엔트리는 테이블에 전혀 없을 수도 있습니다. 일반적인 엔트리의 종료 시간은 엔트리가 ARP 테이블에 들어간 후 20분입니다. 약간 캐시(Cache)와 비슷한 개념인데, 모든 엔트리들을 계속 저장하고 있으려면 메모리 상 비효율을 초래할 수 있기 때문이겠죠.

 

 

돌아와서, 노드 222.222.222.220이 같은 서브넷의 다른 IP 주소로 가는 데이터그램을 전송한다고 해보겠습니다.

 

송신 호스트는 주어진 IP 주소로부터 목적지의 MAC 주소를 획득해야만 하는데요. 이는 [1-1]만약 송신 노드의 ARP 테이블에 목적지 노드의 엔트리가 있으면 바로 가능하지만, [1-2]엔트리가 없는 상황에서 송신 노드는 ARP 프로토콜을 사용해야만 합니다.

 

먼저 송신 노드는 ARP 패킷이라는 특수 패킷을 구성하게 됩니다. ARP 패킷은 송신 및 수신 IP 주소와 MAC 주소를 포함하는 필드들을 가지고 있으며 ARP 질의 패킷과 응답 패킷 모두 같은 형식을 가지고 있습니다.

 

ARP 질의 패킷의 목적은 해결하려는 IP 주소에 대응하는 MAC 주소를 결정하기 위해 서브넷의 다른 모든 호스트와 라우터들에게 질의를 보내는 것인데요.

 

[2] 이 예제에서 222.222.222.220은 ARP 질의 패킷을 어댑터에게 전달하며, 이때 어댑터에게 MAC 브로드캐스트 주소, 즉 FF-FF-FF-FF-FF-FF로 패킷을 전송하도록 지시합니다. 그리고 어댑터는 ARP 패킷을 링크 계층 프레임에 캡슐화하고, 이 프레임의 목적지 주소를 브로드캐스트 주소로 해서 전송합니다. ARP 질의를 포함하는 프레임은 서브넷상의 다른 모든 어댑터들이 수신하고, ARP 모듈은 자신의 IP 주소가 ARP 패킷에 들어있는 목적지 IP 주소와 동일한지 검사합니다. [3] 일치하는 노드는 요구된 매핑 정보가 포함된 응답 ARP 패킷을 질의한 노드로 돌려보내게 되고, 그러면 질의 호스트 222.222.222.220은 자신의 ARP 테이블을 갱신하고 자신의 IP 데이터그램을 링크 계층 프레임으로 캡슐화해서 전송하게 됩니다. 이 때 프레임의 목적지 MAC 주소는 ARP 질의에 대한 응답을 보낸 호스트나 라우터의 MAC 주소가 되겠죠.

 

3-2. 서브넷에 없는 노드로의 데이터그램 전송

만약 어떤 서브넷에 있는 호스트가 그 서브넷에 없는(라우터를 지나서 다른 서브넷으로 가야하는) 호스트에게 데이터그램을 전송하려면 어떻게 해야할까요? 아래 그림을 보면서 이야기해보겠습니다.

 

한 라우터에 의해 연결된 두 서브넷

위 그림에서도 마찬가지로 각 호스트는 정확히 하나의 IP 주소와 하나의 어댑터를 가지고 있습니다. 그리고 라우터는 각 인터페이스당 하나의 IP 주소를 가지며, 각 라우터 인터페이스는 ARP 모듈과 어댑터를 가집니다. 따라서 위 그림에서 라우터는 2개의 인터페이스를 가지므로 2개의 IP 주소와 2개의 ARP 모듈, 2개의 어댑터를 가지겠죠.

 

한편, 서브넷1은 네트워크 주소 111.111.111/24를 가지며, 서브넷 2는 네트워크 주소 222.222.222/24를 가지고 있습니다. 서브넷 1에 연결된 모든 인터페이스는 111.111.111.xxx 형태의 주소를 가지며, 서브넷 2에 연결되는 모든 인터페이스는 222.222.222.xxx 형태의 주소를 가지죠.

 

*참고로 이 부분이 이해가 안 되신다면, 아래 포스팅에서 인터페이스와 서브넷, CIDR 주소 표기 방식에 대해 정리했으니 참고해주세요.

 

[네트워크/Network] IPv4 주소 체계와 DHCP

1. 용어 정리 지난 포스팅에서는 IPv4 데이터그램의 포맷과 단편화에 대한 공부를 했고, 이번 시간에는 IPv4 주소체계에 대해서 공부를 해보려고 합니다. 본격적인 논의를 하기에 앞서, 호스트와

studyandwrite.tistory.com

 

다시 돌아와서, 이제 서브넷 1의 호스트(111.111.111.111)가 데이터그램을 서브넷 2의 호스트(222.222.222.222)로 보내는 상황을 생각해보겠습니다.

 

송신 호스트는 평소처럼 데이터그램을 자신의 어댑터로 전달합니다. 이 때, 송신 호스트는 자신의 어댑터에게 적절한 목적지 MAC 주소도 전달해야 하겠죠. 그런데 어떤 MAC 주소를 어댑터가 사용해야 할까요? 

 

위 그림을 잘 살펴보면, [1] 데이터그램이 111.111.111.111에서 서브넷 2에 있는 호스트로 전달되기 위해서 먼저 데이터그램을 라우터 인터페이스 111.111.111.110으로 전달해야만 합니다. 111.111.111.110은 최종 목적지로의 경로상에 있는 첫 홉(first-hop) 라우터의 IP주소이죠.

 

[2] 따라서, 이 프레임에 대한 적절한 MAC 주소는 라우터 인터페이스 111.111.111.110에 대한 어댑터의 주소, 즉 E6-E9-00-18-BB-4B가 됩니다. [3]그리고 111.111.111.110의 MAC 주소를 알기 위해서는 위에서 설명했던 것처럼 ARP를 사용하면 되는 것이죠.

 

지금까지 과정을 통해 송신 어댑터는 프레임을 만들어 서브넷 1로 전송합니다. 서브넷 1에 있는 라우터의 어댑터는 링크 계층 프레임이 자신을 목적지로 하는지 검사하고, 그렇다면 이 프레임을 라우터의 네트워크 계층으로 전달하겠죠. 이제 데이터그램을 출발지 호스트에서 라우터까지 성공적으로 전달한 것입니다.

 

다음 과정은 무엇일까요?

 

[4] 이제 라우터는 데이터그램이 전달될 정확한 인터페이스를 결정해야만 합니다. 이 부분 역시 이전 포스팅에서 설명한 라우터의 포워딩 테이블을 참조하면 가능한데요.

 

 

[네트워크/Network] 라우터의 입력 포트 처리 및 목적지 기반 전달

💡0. 들어가면서 이전 포스팅에서 OSI 7계층에 대해 공부했었습니다. [네트워크/Network] 네트워크의 기본: OSI 계층 구조와 캡슐화 🤔 0. 개요 "OSI 7계층이 무엇인가요?" "컴퓨터 네트워크를 왜 7계층

studyandwrite.tistory.com

 

 

[5] 포워딩 테이블은 라우터에게 데이터그램을 라우터 인터페이스 222.222.222.220을 거쳐서 전달하도록 지시합니다. 그러면 인터페이스는 데이터그램을 자신의 어댑터로 전달하며, [6]어댑터는 데이터그램을 새 프레임에 캡슐화하여 그 프레임을 서브넷 2로 전송합니다. 이 때, 프레임의 목적지 MAC 주소는 실제 최종 목적지의 MAC 주소가 되겠죠. [7]이 과정 역시 라우터가 목적지 MAC 주소를 ARP로부터 얻으면 됩니다.

 

 

4. 나가면서

이번 시간에는 딱 두 가지 개념을 배웠습니다. 

 

1. MAC 주소는 무엇이며, 왜 필요한가?

2. MAC 주소 기반으로 데이터그램을 전달하기 위해 ARP 프로토콜이 필요하고, 이는 어떻게 동작하는가?

 

이 두 가지 물음에 대한 답을 쉽게 풀어서 설명하려고 노력했는데, 잘 전달이 됐을지 모르겠습니다.

 

감사합니다.