네트워크 계층은 프로토콜 스택 중 가장 복잡한 계층이다. 네트워크 계층은 데이터 평면(data plane)과 제어 평면(control plane)이라는, 서로 상호작용하는 두 부분으로 나뉠 수 있다.
호스트 H1에서 H2로 정보를 보낸다고 하자.
네트워크 계층에서 하는 일은 간단히 말해, 패킷을 한 호스트에서 다른 호스트로 옮기는 일이다. 이를 위해 필요한 네트워크 계층 기능으로는 두 가지, 포워딩과 라우팅이 있다. 포워딩과 라우팅을 섞어서 말하는 경우도 많지만 여기서는 좀 더 명확하게 구분하도록 한다.
네트워크 라우터의 핵심은 각 라우터 안에 있는 포워딩 테이블(forwarding table)이다. 라우터는 자신에게 도착한 패킷 헤더의 필드를 분석하고, 그 값을 포워딩 테이블의 인덱스로 사용한다. 이때 포워딩 테이블의 엔트리에는 패킷이 다음으로 보내져야 할 라우터로 향하는 아웃고잉 링크 인터페이스가 담겨 있다. 그렇다면 이 포워딩 테이블은 어떻게 채울까?
전통적인 방식에서는 한 라우터 안에 제어 평면과 데이터 평면이 모두 포함되어 있다. 즉 각 라우터는 포워딩 기능은 물론, 라우팅을 위한 라우팅 알고리즘도 내장되어 있다. 각 라우터는 다른 라우터와 라우팅 정보를 담은 메시지를 교환하고, 그 정보를 바탕으로 라우팅 알고리즘을 통해 각 테이블을 채운다.
전통적 방식에서는 한 라우터에 데이터 평면과 제어 평면이 모두 포함되어 있었다면, SDN(Software-defined Networking) 방식에서 라우터는 데이터 평면만을 담당하고, 제어는 별도의 외부 컨트롤러가 관리한다.
제어 평면을 각 라우터에 분산시키는 전통적인 방식과 달리, 이 방식에서는 제어 평면을 별도의 중앙 집중형 컨트롤러에 두고 라우터는 단순히 이 컨트롤러의 명령에 따라 포워딩만 한다. 이 컨트롤러는 ISP나 그 외 서드 파티가 관리하는 데이터 센터에서 구현되어, 소프트웨어를 기반으로 포워딩 테이블을 구성해 각 라우터에게 뿌려주는 역할을 한다.
네트워크 계층이 어떤 서비스를 제공할 수 있을지에 대해 간략히 알아보자.
단 인터넷 외의 다른 네트워크 구조에서는 다양한 서비스 모델이 구현되어 있지만, 실제 인터넷에서는 하나의 서비스, 최선 노력(Best-effort) 서비스만을 제공한다. 이 서비스에서는
없다. 인터넷에서는 패킷을 최선을 다해 전달하지만, 그 결과를 보장하지 않는다.