Data Link Layer : 데이터 링크 계층에서 통신은 노드 간 통신으로 이루어진다. 네트워크의 어느 한 노드에서 다른 노드로 전송되는 데이터는 여러 네트워크(LAN, WAN)을 거치며 이동한다. LAN과 WAN은 라우터에 의해 연결되어 있고, 일반적으로 양 끝단에 위치한 호스트와 라우터들을 노드라고 부르며, 그 사이의 네트워크들을 링크라고 부른다.
데이터 링크 계층에는 다음과 같은 두 가지 하위 계층이 존재한다.
Data Link Control (DLC) : 링크를 통해 통신하는 방법에 대한 제어이다. (SaW, GBN...)
Media Access Control (MAC) : 각 노드가 매체에 접근하는 방법에 대한 제어이다. (Random Access, Controlled Access...)
링크의 두 가지 범주 : 링크는 크게 매체의 전체 용량을 사용하는 Point-to-Point 혹은 매체의 용량 중 일부만을 사용하는 Broadcast Link로 나뉜다.
Broadcast Link : DLC + MAC
Point to Point Link : DLC
IP Address : 네트워크 계층의 식별자로서 IP 주소(송신자의 IP와 수신자의 IP)를 사용한다. 하지만 인터넷과 같은 네트워크에선 IP 주소만으로 데이터그램이 목적지에 정확히 도달할 수 없다. 출발지와 목적지의 IP 주소는 두 끝 점을 정의하지만, 패킷이 통과하는 중간 링크에 대해선 정의하지 않는다.
데이터 전달 예시
= 송신자측 IP 주소
= 수신자측 IP 주소
~ : 링크의 주소.
위 예시를 보면, 데이터와 IP 주소는 바뀌지 않지만, 각 링크간 전송 과정에서 링크 주소는 계속해서 바뀌며 연결되는 링크를 따라 이동한다.
라우터는 서로 다른 여러 링크들을 연결하며, 데이터 전송 과정에서 적절한 링크로 데이터를 전달한다.
세 가지 타입의 Address
Unicast Address : 유니캐스팅은 1 : 1 통신을 의미한다. 호스트 또는 라우터의 각 인터페이스에는 유니캐스트 주소가 할당된다. 유니캐스트 주소가 목적지인 프레임은 링크 내의 단 하나의 목적지를 대상으로 전송된다.
Multicast Address : 멀티캐스팅은 1 : M 통신을 의미한다. 이는 주로 로컬(LAN) 범위에 한정한다.
Broadcast Address : 브로드캐스팅은 1 : all 통신을 의미한다. 브로드캐스트 주소가 목적지인 프레임은 링크 내의 모든 대상에게 전송된다.
Address Resolution Protocol (ARP) : 송신 노드가 데이터를 전송할 때, 수신 노드의 IP 주소만 가지고 데이터를 목적지로 이동시키는 데는 한계가 있다. 따라서 데이터 이동 과정에서 거쳐가는 링크의 주소(MAC)가 필요한데, 이때 주소 결정 프로토콜(ARP) 기법이 유효하다. 즉, ARP는 알고있는 네트워크 주소(송신자와 수신자의 IP)를 통해 목적지의 링크 주소(MAC)를 알아내도록 하는 프로토콜이다.
ARP Packet
ARP Request (위의 경우 Type 1)
송신자 측이 목적지 노드의 IP 주소는 알고 있지만, Link 주소(MAC 주소)는 모를 때, 송신자는 목직지의 MAC 주소를 알려달라고 요청하는 ARP 패킷(ARP Request)을 보낸다.
브로드캐스트 방식으로 전송되며, 같은 네트워크내에 있는 모든 노드가 이 패킷을 받게 된다. 만약 ARP 요청에 해당하는 노드가 아니라면, 해당 ARP 요청을 무시한다.
송신자의 MAC주소, IP주소, 목적지 노드의 IP주소를 포함하고 있으며, 목적지 링크의 MAC 주소를 얻는 것이 목적이므로 목적지 MAC 주소에 대한 내용은 초기화 된 상태이다.
ARP Reply (위의 경우 Type 2)
ARP 요청을 받은 노드는 자신의 MAC 주소를 담고 있는 ARP 패킷(ARP Reply)을 보낸다.
유니캐스트 방식으로 전송되며, 요청한 특정 노드에게만 응답 패킷을 전달한다.
요청 패킷에서 받은 송신자의 MAC, IP주소를 알고 있기 때문에, 응답 ARP를 보낼 수신자측은 그저 자신의 MAC 주소만을 포함시켜 보내면 된다.
ARP 예제 : System A는 System B의 IP 주소 (N2)를 알고 있지만, MAC 주소 (L2)는 모른다. 따라서 A는 B에게 ARP 요청을 보내고, B는 이에 대해 ARP 응답을 보내는 과정에 대한 내용이다.
Caching and Efficiency : 네트워크에 연결된 시스템이 20개 (시스템 A, 시스템 B, 기타 18개의 시스템) 존재하고, A가 B에게 10개의 데이터 그램을 보내는 상황을 가정해보자.
ARP를 사용하지 않는 경우
A는 10개의 프레임을 브로드 캐스팅한다.
나머지 18개 시스템은 수신 대상자가 아니므로, 프레임을 수신하지만 버린다.
즉, 총 180개의 브로드 캐스트 프레임이 낭비된다.
ARP를 사용하는 경우
A는 우선 한 개의 ARP 요청 프레임을 브로드 캐스팅한다.
나머지 18개 시스템은 이 프레임을 수신하여 역캡슐화하고, ARP 메시지를 확인하지만 대상자가 아니므로 패킷을 버린다.
B가 ARP 응답 패킷으로 자신의 MAC 주소를 알리면, A는 이 주소에 나머지 9개 프레임을 유니캐스트 방식으로 보내면 된다.
즉, 총 18개의 프레임이 낭비된다.
ARP를 통해 네트워크 트래픽을 줄이고, 각 시스템이 불필요한 데이터를 처리하는 데 드는 비용을 줄임으로써 전반적인 네트워크 효율성을 증가시킨다.
ARP Cache : 노드에게 ARP 요청 / 응답을 매번 보내는 것은 비효율적이므로, 호스트는 현재 항목의 ARP 캐시를 일정 시간동안 유지한다.
라우터의 MAC과 같은 주소 데이터는 물리적인 저장장치 (NIC, 네트워크 카드)에 저장되어 있기 때문에 NIC가 변경되기 전까지 영구적으로 유지된다. 따라서 ARP Cache를 유지하는 것은 ARP를 더욱 효율적으로 사용하는 방법이다.
ARP 요청 오류에 대한 처리 (ARP 요청을 보냈을 때 답이 돌아오지 않는 경우)
존재하지 않는 노드에게 ARP 요청을 보낸 경우
ARP 요청을 받은 노드가 ARP 응답을 보냈지만, 오류로 인해 정상적으로 도달하지 못한 경우
위와 같은 경우, 여러번의 ARP 요청을 시간 간격을 두고 보낸다. 이때, 시간 간격은 점점 증가하고, 계속해서 답이 없다면 존재하지 않는 주소로 간주하고 ARP 요청을 포기한다.
ARP Poisoning : ARP의 취약점을 악용하는 네트워크 공격 기법이다.
어떤 시스템이 ARP 요청에 대한 응답을 중간에 가로채거나 변조할 수 있음.
서비스 거부 공격을 수행할 수도 있음.
위와 같은 경우를 보통 ARP Poisoning이라고 부른다. 이를 해결하기 위해 Static ARP (정적 ARP)를 사용하거나, 암호화를 수행하여 ARP의 보안을 지킨다.