앞서 서브넷이란 같은 네트워크 프리픽스를 갖고 라우터를 거치지 않은 채 서로 접근이 가능한 호스트들의 집합이라고 했다.
이 호스트들의 연결은 LAN (Local Area Network)을 통해 이루어져있다.
90년대 중반까지 많이 사용된 방식이다.
모든 노드들은 동일한 충돌 영역에 있기 때문에 서로 충돌할 수 있다.
현대에서 많이 사용되는 방식이다.
중앙에 위치한 Switch가 노드들을 관리하며 서로 충돌이 발생하지 않는다.
송신 어댑터는 IP 데이터그램 또는 다른 네트워크 계층 프로토콜의 패킷을 이더넷 프레임에 포함시킨다. (캡슐화)
이때 이더넷 프레임의 헤더에는 preamble, dest address, source address, type 필드가 위치해 있다.
이더넷이 사용하는 MAC 프로토콜은 CSMA/CD 이다.
그렇다면 만약 이더넷에서 충돌은 발생했는데 MAC 프로토콜이 감지하지 못할 수도 있을까?
MAC address와 IP 주소를 서로 연결하는 용도의 프로토콜이다.
호스트 간의 통신에서 양쪽 호스트들은 IP 주소를 사용해서 목적지를 지정한다. 하지만 실제로 데이터를 이동할 때에는 MAC 주소를 함께 이용해야 한다. 이때 사용하는 프로토콜이 바로 ARP이다.
ARP는 IP 주소와 MAC 주소를 일대일로 매칭하여 상위 계층에서 목적지를 제대로 찾아갈 수 있도록 해준다.
MAC 주소는 48비트를 사용하고 있고, 이를 24비트씩 쪼개서 사용한다. 앞의 24비트는 제조 회사, 뒤의 24비트는 그 인터페이스의 고유 번호를 부여한다.
MAC 주소는 네트워크 인터페이스 카드가 제조되는 순간 제조사에서 부여하는 주소로써 불변의 값이다. 따라서 자기 자신의 MAC address를 변경한다는 말은 실제로 인터페이스 카드의 MAC address를 변경하는 것이 아니라, 나한테서 나가는 MAC 프레임의 Source Address를 다른 주소로 변경하는 것을 말한다.
LAN 상에 위치한 각각의 어댑터들은 서로 고유한 LAN 주소를 갖고 있다.
IP 패킷의 헤더 중에서 Source Address 필드에는 자기 자신의 MAC 주소가, Dest Address 필드에는 다음에 도착할 게이트웨이 라우터의 IP 주소가 적혀있다.
이후 IP 패킷은 MAC 프레임에 Encapsulate 된다. MAC 프레임의 헤더의 Source Address 필드에는 역시 자기 자신의 MAC 주소가, Dest Address 필드에는 게이트웨이 라우터의 MAC 주소가 적혀있다.
이때 자신의 IP, MAC 주소, 목적지의 IP 주소는 알 수 있지만 게이트웨이 라우터의 MAC 주소는 바로 알 수 없다. 하지만 DHCP를 통해 게이트웨이 라우터의 IP 주소는 알고 있으므로, 이를 갖고 MAC 주소를 알아내는 과정이 추가로 필요하다.
게이트웨이 라우터의 MAC주소는 각 호스트의 ARP에서 알아낼 수 있다.
각 인터페이스 안에는 ARP Table이 존재한다. 테이블에는 IP 주소와 대응하는 MAC 주소가 적혀있다. 찾고자 하는 MAC 주소가 테이블 안에 있으면 다행이지만, 없다면 이를 채워넣어야한다. 이 채워넣는 작업을 담당하는 프로토콜이 ARP 프로토콜이다.
ARP 프로토콜은 만약 테이블에 필요한 엔트리가 없다면 ARP Request 프레임을 브로트캐스트로 LAN 전체에 전달한다. 이후 게이트웨이 라우터의 IP에 해당하는 호스트가 응답한다.
즉, 게이트웨이 라우터가 ARP Request에 응답하여 자기 자신의 MAC 주소를 알려준다.
ARP 프로토콜은 이렇게 받은 MAC 주소를 ARP 테이블에 채워넣는다.
또한 ARP 테이블 내의 엔트리들은 Cache (캐시)이기 때문에 일정 시간 후 소멸된다. 만약 소멸되어서 필요한 정보가 없어진다면 다시 상위의 과정을 반복하여 채워넣는다.
라우터는 포워딩 테이블을 참조하여 다음 라우터를 찾아내고, 자기 자신의 프레임의 Dest Address 필드에 다음 라우터의 MAC 주소를 집어넣음으로써 패킷을 이동시킨다.