네트워크 계층의 기본 기능은 송수신 호스트 사이의 패킷 전달 경로를 선택하는 라우팅이다. 또, 라우팅 과정에서 수반되는 부분도 수행하는데, 대표적인 것이 네트워크 특정 지역에 트래픽이 몰리는 현상을 다루는 혼잡 제어와 라우터 사이의 패킷 중개 과정의 패킷 분할과 병합이다.
네트워크 계층이 전송 계층에 제공하는 서비스는 크게 두가지다.
데이터를 전송하기 전에 송수신 호스트 사이에 연결을 설정하는 연결형,
연결 설정 없이 데이터를 패킷 단위로 전송하는 비연결형 서비스다.
IP프로토콜의 TCP은 연결형,UDP는 비연결형 서비스를 제공하는 프로토콜이다.
패킷의 전송 경로를 지정하는 라우팅 기능은 네트워크 계층의 가장 중요한 역할이다. 가상회선방식을 사용하는 연결형 서비스에서 연결이 설정될 때 경로가 선택되어 이후 모든 패킷이 한 경로를 따라서 전송되고,
비연결형 방식의 데이터 그램은 전송 패킷마다 전달 경로를 선택해야한다.
네트워크 구성의 변화에 대처할 수 있는 신뢰성 확보도 라우팅 경로 선택시 중요한 사항이다.
정적 라우팅
패킷 전송이 이루어지기 전에 경로 정보를 라우터에 저장하여 중개하는 방식이다. 네트워크 구성 변화에 대처할 수 없고 혼잡도를 반영할 수 없다.
동적 라우팅
현재의 네트워크 링크 상태를 점검해 새로운 경로 배정시 적용해야한다. 각 라우터는 주변 라우터 존재 유무, 전송 지연 시간 등을 확인하고 다른 라우터에 통보해서 경로를 갱신한다.
라우터 초기화 과정에서 주변 라우터에게 HEELLO 패킷을 전송해 경로 정보를 파악한다.
또, ECHO 패킷을 전송해서 전송 지연 시간을 측정한다. ECHO 패킷을 수신 받은 라우터는 즉시 회신을 한다.
라우터가 획득한 정보는 각 라우터에게 공유한다. 하지만 경로 정보가 각 라우터에 도착하는 시간이 다르기에 일관성을 유지하기는 어렵다.
패킷의 경로를 찾기 위해 라우팅 테이블을 사용한다.
라우팅 테이블의 정보는 목적지 호스트와 다음 홉의 조합이다.
목적지 호스트에는 최종 목적지 호스트 주소 값을, 다음 홉에는 인접 경로를 지정한다. 즉 목적지 까지 도달하는 효과적인 경로에서 다음 홉(Hop)에 위치한 라우터의 주소를 기록한다.
예로 {1,2,3,4} 순으로 연결이 되어 있다면, 1번 라우터에는 목적지: 3 , 다음 홉 : 2 / 2번 라우터에는 목적지: 3 , 다음 홉 : 3 이다.
효과적인 라우팅을 위해 라우팅 정보가 네트워크 현재상황을 정확하게 반영해야한다.
소스 라우팅
송신 포스트가 목적지 까지 전달 경로를 결정하는 방식이다. 송신 호스트의 라우팅 테이블에 수신 호스트 까지의 전송 경로를 관리해야하며, 이 정보를 전송 패킷에 기록해야한다. 따라서 중간 라우터는 라우팅 테이블을 따로 관리할 필요가 없다.
소스 라우팅은 패킷 자체에 경로가 기록되므로 가상 회선 방식과 데이터 그램 방식 모두 이용할 수 있다.
분산 라우팅
라우팅의 정보가 분산되는 방식이다. 경로 위의 라우터가 경로선택에 참여하며, 데이터그램 방식에서 많이 사용한다. 라우터가 관리하는 경로 정보는 다음 경로를 선택하기 위한 내용을 포함하는데 네트워크 상황에 따라 적절히 변경하는 동적 특징이 있다.
중앙 라우팅
RCC(Routing Control Center)라는 특별한 호스트를 사용해 전송 경로에 대한 정보를 관리한다. 송신 호스트는 RCC로 부터 정보를 얻어 소스 라우팅과 동일한 원리로 패킷을 전송한다.
한 라우터가 정보를 관리하기에 다른 호스트의 부담을 줄이지만 RCC에 트래픽이 몰리면 효율이 떨어질 수있다.
계층 라우팅
분산 라우팅과 중앙 라우팅 기능을 조합한 방식이다. 전체 네트워크 구성을 계층 형태로 관리한다. 네트워크 규모가 계속 커지는 환경에 효과적이다.
네트워크의 패킷 수가 많아지면 네트워크 성능은 감소한다. 성능 감소의 급격한 악화를 혼잡(Congestion), 이 문제를 해결하기 위한 방안을 혼잡 제어(Congestion Control)이라고 한다.
흐름 제어(Flow control)는 송수신 호스트 사이의 점대점 전송 속도를 다루지만 혼잡제어는 호스트와 라우터를 포함한 서브넷에서 네트워크 전송 능력 문제를 다룬다.
네트워크 처리 능력보다 많은 패킷이 입력되면 버퍼에 저장되지 못한 패킷은 버려지고, 재전송 되어 더 혼잡하게된다. 버퍼의 용량을 늘리면 전송 지연시간이 늘어난다. 전송 지연 시간이 타임아웃보다 크면 재전송하게 되어 더 혼잡하게 된다.
앞서 말한것 처럼 타임아웃에 의한 패킷의 재전송이 혼잡의 원인이다. 따라서 타임아웃 값이 너무 작으면 혼잡도가 급격히 증가할 수 있다.
또, 패킷의 순서가 뒤바뀌었을때 수신 호스트가 패킷을 그냥 버리면 재전송이 일어나 혼잡이 일어난다.
응답 알고리즘도 영향을 준다. 패킷마다 응답을 보내면 그것 또한 패킷이기에 혼잡이 증가한다. 따라서 패킷 여러개를 한번에 처리하거나 피기배킹을 사용하는 방식을 사용할 수 있다. 하지만 피기배킹을 사용하면 송신호스트의 타임아웃을 유발할 수 있어 조심해야한다.
라우팅 알고리즘도 영향을 준다. 혼잡이 적은 전송 트래픽을 찾아 보내면 혼잡도를 줄일 수 있다.
네트워크에서 전송 중인 패킷은 목적지를 향해 무한정 라우팅되지는 않는다. 패킷별로 네트워크에 존재할 수 있는 일정한 생존 시간을 지정해, 일정 개수 이상의 라우터 통과시 엉뚱한 경로를 떠도는 것으로 판단하여 해당 패킷을 제거하여 재전송이 발생할 수 있다.
혼잡은 특정 시간에 집중되는 버스트(Burst)현상에서 기인하는 경우가 많다. 패킷의 양이 특정 시간에 집중된다는 것이다. 따라서 송신 호스트가 전송하는 패킷의 발생 빈도를 네트워크에서 예측할 수 있는 전송률로 이루어지게 해야한다. 이를 트래픽 성형(Traffic Shaping)이라 한다.
송신 호스트는 사전에 네트워크로 유입되는 패킷의 특성을 조율할 수 있다. 그보다 많은 양의 패킷을 전송하면 네트워크에서 적절히 통제해야 한다. 이와 같은 트래픽 성형 알고리즘 중 유명한 것이 리키버킷(Leaky Bucket)이다.
라우팅과 관련해 보편적으로 이용하는 거리 기준은 전송 경로 중간에 위치하는 라우터의 개수, 홉(Hop)의 수로 판단하는 것이다.
직접 연결된 라우터 간에 라우팅 정보를 교환하는 방식이다. 교환하는 정보는 각 라우터에서 개별 네트워크 까지 패킷 전송하는데 걸리는 거리 정보이다. 거리 벡터 알고리즘을 구현하려면 개별 라우터가 링크 벡터, 거리 벡터, 다음 홉 벡터라는 세 정보를 관리해야한다.
링크 벡터 : 주변 네트워크에 대한 연결 정보
거리 벡터 : 전체 네트워크에 대한 거리 정보
다음 홉 벡터 : 개별 네트워크로 가기 위한 다음 홉 정보
라우터 간의 정보 교환 원리가 거리 벡터 방식과 반대다. 개별 라우터가 주변 라우터까지의 거리 정보를 구한 후 모든 라우터에 통보한다.
링크 상태 프로토콜에서는 주변 상황에 변화가 있을 때만 정보 전달이 이루어진다. 정보 전달을 위해 플러딩 기법을 사용한다.
TCP/IP 기반 인터넷에서 사용하는 OSPF(Open Shortest Path First)방식이 링크 상태 프로토콜을 사용한다.
외부 라우팅 프로토콜에서 사용하는 경로 벡터(Path Vector) 프로토콜은 경로에 관한 거리 정보 값이 필요 없다. 단순히 어느 네트워크가 연결 가능한지 정보 만을 제공한다.
BGP(Border Gateway Protocol)는 인터넷에서 많이 사용되는 외부 라우팅 프로토콜이다. BGP는 서로 다른 자율 시스템의 라우터가 라우팅 정보를 교환할 수 있게 한다. 이런 라우터를 게이트웨이라고 한다. BGP는 TCP를 이용해 메시지를 교환한다.
인터넷 환경에서 네트워크 계층 데이터 전송 프로토콜인 IP는 호스트 주소 표기, 패킷 분할에 관한 기능을 제공하지만 오류제어, 흐름제어 기능은 제공하지 않는다.
IP 프로토콜에서 패킷을 중개할 때, Best Effort 라는 원칙에 따라 전송한다. 이것은 전송 패킷의 100% 도착을 보장하지 않아서 이것을 상위계층에서 고려해야한다.