링크 계층 주소란(MAC 주소)
호스트나 라우터가 직접 가지고 있지 않고, 호스트나 라우터의 인터페이스(어댑터)가 가지고 있다. 링크 계층 주소는 가장 널리 알려진 용어진 MAC 주소라고 생각하면 된다. (링크 계층 주소 == MAC 주소)
MAC 주소는 길이가 6바이트이며 따라서 2^48개의 주소가 존재한다. 흥미로운 점은 세상의 어떤 어댑터도 동일한 값을 갖지 않는다는 점이다. 다양한 나라에서 제조되는 어댑터들이 모두 다른 값을 가질 수 있는 이유는 IEEE(Institute of Electrical and Electronics Engineers)가 MAC 주소 공간을 관리하기 때문이다. 어떤 회사에서 어댑터를 제조하려면 2^24개의 주소로 이루어진 주소 영역을 구매해야 한다. IEEE에서는 MAC주소의 첫 24비트를 고정하고, 나머지 24비트는 회사로 하여금 각 어댑터에게 유일하게 부여하는 방식으로 관리한다.
어댑터의 MAC주소는 어댑터의 위치에 따라서 달라지지 않는다. 이더넷 카드가 있는 휴대폰, 노트북, 데스크탑은 어디에 있든지 항상 동일한 MAC 주소를 가진다. IP 주소가 네트워크 부분과 호스트 부분으로 나뉘는 계층구조를 가지는 반면에 MAC주소는 하나로 이루어진 평면 구조를 가진다는 점과 어디를 가든지 바뀌지 않는다는 점이 사람의 주민등록 번호와 비슷하다.
상대방의 MAC 주소를 알아내는 방법
어댑터가 데이터 프레임을 목적지 어댑터로 전송할 때, 송신 어댑터는 프레임에 목적지 어댑터의 MAC주소를 넣고, 그 프레임을 랜 상으로 전송한다. 이때 스위치는 종종 자신의 모든 인터페이스로 프레임을 브로드캐스트 한다. 그래서 임의의 어댑터들은 자신을 목적지로 하지않는 프레임도 종종 수신하게 된다. 이때 임의의 어댑터는 자신이 받은 프레임에서 데이터그램을 추출해서 수신자의 MAC주소와 자신의 MAC주소가 일치하지 않으면 폐기한다.
그러나 가끔 어떤 송신 어댑터는 랜상의 다른 모든 어댑터가 자신이 전송한 프레임을 수신하고 처리하기를 원한다. 이 경우에 송신 어댑터는 프레임의 목적지 주소필드에 특수한 MAC 브로드캐스트 주소(FF-FF-FF-FF-FF-FF)를 넣어서 전송한다. 이 경우에 프레임을 받는 모든 어댑터는 반응할 수 밖에 없다.
ARP(Address Resolution Protocol)
쉽게 말해서 MAC주소와 IP주소간의 변환을 위한 테이블이다.
컴퓨터와 라우터 옆에 붙어있는 인터페이스에 MAC 주소가 할당되어있음을 그림으로 알 수 있다.
이제 IP : 222.222.222.220 에서 IP : 222.222.222.222 로 데이터를 전송하려 한다고 가정하자. 어떻게 MAC주소를 알고 정확히 보낼 수 있을까? 여기서 ARP가 사용된다. IP : 222.222.222.220 가 가진 ARP에는 현재 서브넷에 존재하는 IP들에 대한 MAC주소가 매핑되어서 저장되어있다. 그래서 링크계층 프레임에 해당 MAC 주소를 알맞게 넣어서 데이터를 전달할 수 있다. DNS와 하는일이 비슷하지만 ARP는 동일한 서브넷 상에 있는 호스트나 라우터 인터페이스에 있는 IP주소만을 매핑한다.
그런데 ARP에 원하는 IP에 대한 MAC주소가 없다면??
이때는 ARP 패킷이라는 특수 패킷을 구성하게 된다. ARP패킷은 송신 및 수신 IP 주소와 MAC 주소를 포함하는 필드들을 가지고 있다. 이중에서 ARP에 엔트리를 추가하기 위한 질의 ARP 패킷이 있는데, 이는 서브넷의 다른 모든 호스트, 라우터들에게 IP가 222.222.222.222 인 호스트의 MAC주소가 뭐냐고 물어보는것과 동일하다. 질의에 대한 답을 알고있는 어댑터는 ARP 패킷에 요청 정보를 정리해서 질의한 노드로 돌려보낸다. 새로운 정보를 알게된 송신 호스트는 자신의 ARP 테이블을 갱신하고 자신의 데이터 프레임을 캡슐화 하여 질의에 대한 응답을 보낸 호스트, 라우터의 MAC주소로 링크 계층 프레임을 보낸다.
ARP는 링크계층 프로토콜일까? 네트워크 계층 프로토콜일까?
ARP 패킷은 링크 계층 프레임에 캡슐화되며, 따라서 구조적으로는 링크계층 프레임보다 상위에 있다.(데이터그램과 비슷) 하지만 ARP는 MAC주소 같은 링크 계층 주소를 포함하는 필드와 IP주소가 있기 때문에 네트워크 계층이라고 확신을 하기 어렵다. 결론은, ARP는 링크 계층과 네트워크 계층의 경계에 있는 프로토콜이라고 한다. 프로토콜은 실제로는 매우 복잡하다.
서브넷에 없는 노드로의 데이터그램 전송
호스트가 모두 같은 서브넷에 있다면 상대적으로 쉽게 ARP를 갱신하고 데이터를 전송할 수 있다. 하지만 데이터그램은 아주 다양한 서브넷을 가진 호스트끼리 전송할 수도 있으므로 이 경우 어떻게 목적지의 MAC주소를 알고 보낼 지 결정해야 한다.
위 그림에서 111.111.111.111 -> 222.222.222.222 로 데이터를 전송하려고 한다고 가정해보자.
송신 호스트는 먼저 자신의 first-hop 라우터인 111.111.111.110 으로 데이터를 전송한다. 이때 같은 서브넷에 있기 때문에 111.111.111.110의 어댑터의 MAC주소를 ARP를 통해서 알아내고, 링크 계층 프레임을 전달할 수 있다.
111.111.111.110 에서는 어떻게 222.x번 서브넷을 가진 라우터로 전송할 수 있을까?
111.111.111.111에서 전달받은 데이터그램에는 목적지 IP주소가 들어있을 것이다. 목적지 IP를 알고 있기때문에 라우터에서는 포워딩 테이블을 사용해서 다음 라우터로 가는 링크를 결정해 줄 수가 있다. (SDN에서의 포워딩 테이블)
그렇게 링크 계층 프레임은 222.222.222.220 으로 전달이 되고, 여기서 데이터그램을 추출해 목적지 주소를 알아봤더니 222.222.222.222 이다. 같은 서브넷에 속하기 때문에 ARP를 통해서 목적지의 MAC주소를 알아낼 수가 있고, 링크 계층 프레임에 MAC주소를 넣어서 올바르게 전송할 수가 있다.
'CS > Network' 카테고리의 다른 글
[Network] 링크 계층 스위치 (0) | 2021.11.05 |
---|---|
[Network] 이더넷(Ethernet) (0) | 2021.11.05 |
[Network] 네트워크 계층 : OpenFlow 프로토콜 (0) | 2021.10.08 |
[Network] 네트워크 계층 : SDN(Software-Defined Networking) (0) | 2021.10.08 |
[Network] 네트워크 계층 : 라우터(Router) (0) | 2021.10.01 |