Intro

이 글은 OSI 7 layer 중에서 제 3계층인 네트워크 계층에 대해서 다룹니다.


네트워크 계층이란?

네트워크 계층은 상당히 중요하다. 네트워크의 길을 찾는 일이 바로 네트워크 계층의 주된 역할이다.
지금 사용하고 있는 네트워크는 패킷-스위칭 네트워크이다. 그리고 이것은 스토어드 앤 포워드(stored & forward) 방식이다.
그렇다면 과연 포워딩은 어떻게 하는가? 그것을 해결하는 것이 바로 네트워크 계층이다.


라우팅과 라우터

img

네트워크 계층의 가장 큰 역할은 발신지에서 수신지까지의 경로를 설정하는 것이다.
라우팅(routing): 경로를 탐색하는 것.
라우터(router): 경로 중간에 위치하면서 데이터를 저장 및 전송하게끔 하는 노드.

각각의 라우터마다 라우팅 테이블을 가지고 있기 때문에 데이터가 들어오면 그 경로를 설정해준다. 라우팅 테이블을 기준으로 데이터를 어디로 보낼지를 결정하는 것이다.
라우팅은 길을 찾는 것이 목적인데 이 과정은 어떻게 이루어지는 것일까? 여기에 대한 답은 바로 ‘최적의 패턴을 고려함으로서 이루어진다’이다.
라우팅 알고리즘은 결국 최적의 길을 찾는 데 목적이 있는 것이다. 하지만 애플리케이션 마다 최적의 기준이 다르다.(예를 들어 카카오톡은 전송을 빨리하는 것이 최적의 의미가 있고 이메일의 경우 정확히 전송하는데 최적의 의미가 존재한다. 유튜브나 넷플릭스의 경우에는 1초에 30장씩 데이터를 전송 받는데 중간에 하나가 빠져도 시청자는 인지를 못하지만 화면의 변경이 규칙적으로 이루어져야 한다. 그렇기에 스트리밍의 경우 지터(jitter, 흔들림)이 발생하지 않는 경로를 찾아야 한다.)

“optimal(최적성)”은 보편적 최적성이 아닌 시스템마다 다른 관점을 가진 최적성이어야 한다.
라우터 알고리즘이 굉장히 복잡하면 cpu가 알고리즘을 처리하는데 많은 것이 소비되기 때문에 라우터 알고리즘은 1.단순성, 2.안전성, 3.유연성을 지녀야 한다.

정적(static) 라우팅: 계속해서 고정된 라우팅, 한 번 라우팅 정보를 입력하면 계속해서 그대로 가는 것.
동적(dynamic) 라우팅: 계속해서 변화하는 라우팅. 상황에 맞추어 라우팅이 그때그때 바뀜.
디폴트(default) 라우팅: 디폴트 값을 라우팅 테이블에 설정해서 값이 입력되어 있지 않을 경우 디폴드 값으로 설정한 경로로 전송하게끔 하는 것이다.


AS, IGP, EGP

AS(오토노머스 시스템, Autonomous System): 동일한 라우팅 프로토콜을 사용하는 시스템. 같은 프로토콜을 사용하는 라우터끼리 정보교환을 자유롭게 할 수 있어서 업데이트 할 수 있음.

IGP(Interior Gateway protocol): 하나의 오토노머스 안에서 작동하는 게이트웨이 프로토콜

EGP(Exterior Gateway protocol): 오토노머스와 오토노머스를 연결하는 게이트웨이 프로토콜

게이트웨이(Gateway): 오토노머스 시스템과 오토노머스 시스템을 연결하는 라우터

Optimality Principle & Problem
:각각의 노드에서 엣지까지 어떤 코스트가 소요될 때 이 코스트(가상적인 비용)의 합이 최소화 되도록 구성해야 하는 문제. 컴퓨터에서 옵티멀 문제는 대부분 라우팅 문제다.
ex. optimal sink-tree


라우팅의 종류

디스턴스 벡터 라우팅

img

:물리적으로 연결되어 있는 노드(이웃 노드)끼리 라우팅 테이블을 교환하여 이 정보를 바탕으로 자신의 라우팅 테이블을 재구성 하는 것.
코스트(cost): 지연시간, 대역폭, 신뢰성, 부하율.
라우팅: 코스트를 최소화할 수 있는 최적의 경로를 찾는 것.

J노드에 연결되어 있는 인접한 노드: I, K, A, H (이 네 개의 노드하고 라우팅 테이블을 공유)
자기 자신에게 보낼 때는 코스트가 들지 않음.
라우팅 테이블에 저장된 것과는 다르게 전송 시간이 측정되면 각 노드의 라우팅 테이블에 저장된 전송 시간이 업데이트 됨.
모든 노드들에 대한 라우팅 테이블을 만들고 그 데이터를 다른 노드에도 알려 줌.

단점: 카운트 투 인피니티(count to infinity problem): 중간에 노드 간 연결(링크)이 끊어지면 끊어졌다는 것을 알기 위해서 굉장히 많은 정보를 교환해야 함.

링크 스테이트 라우팅(link-state routing)

img

각각의 직접 연결되어 있는 노드 상태가 표시됨. 전체 노드에 알려 줌. 모든 노드들은 각각 연결되어 있는 링크 상태를 다른 노드들과 공유.
노드 간의 연결이 중간에 끊어져도 카운트 투 인피니티 문제가 발생하지 않음.

단점: n(n-1) = O(N^2) (노드 수가 많아질수록 처리해야 할 연산이 많아짐)
많은 데이터를 가지고서 옵티멀 문제를 풀어야 하기 때문에 알고리즘의 복잡도가 높아짐.

Autonomous: 일정시간이 지나면 자동으로 링크 상태를 업데이트 해 줌.

링크 스테이트 알고리즘은 오토노머스(autonomous) 안에 들어있는 모든(글로벌) 노드의 정보를 가지고 계산함. 디스턴스 알고리즘은 로컬 정보만을 가지고 계산함.


RIP, IGRP, OSPF

RIP(Routing Information Protocol): 거리벡터 라우팅 알고리즘을 사용.(거리벡터)

IGRP(Interior Gateway Routing Protocol): 시스코사의 경로설정 프로토콜로 시스코 라우터들 사이에서 사용.(거리벡터)
남들이 많이 상용하기 때문에 표준이 된 드펙토(De Facto) 스탠다드에 해당.

OSPF(Open Shortest Path First): 대표적인 링크 스테이트 알고리즘.(라우팅 스테이트)


혼잡 예방과 Choke Packet

Congestion(혼잡): 급격하게 증가하다가 어느 순간 두절되는 현상
congestion을 막는 방법: 계속해서 모니터링 하면서 임계치에 임박하면 접속을 막는다.
choke packet: 데이터를 보내는 사람한테 데이터가 많으니 적게 보냈으면 좋겠다는 알림을 보냄. congestion 발생 전에 미리 알림을 보냄

데이터를 발생시키는 곳에 choke packet을 보냄. 중간 단계 모든 곳(hop)에 choke packet을 보냄 (hop by hop choke packet)


Leak Bucket Algorithm, Token Bucket Algorithm, RSVP

Leak Bucket Algorithm: 일정 시간마다 데이터를 정해진 양으로 천천히 보내는 방법
단점: 노드가 한 개가 아니고 많을 때에는 노드의 불평등함이 발생함.

공평성을 주기 위해 Token Bucket Algorithm을 개발.
일정시간이 지나면 Token을 하나씩 각 노드에 나누어 주고 각 노드는 토큰을 받은 대로 데이터를 보냄. 만약 보내는 데이터가 없을 경우 토큰을 쌓아 놓았다가 보낼 데이터가 생기면 쌓인 토큰의 양 만큼 데이터를 보냄.
문제 예시. congestion control의 방법과 그 방법을 설명 하여라.

jitter: 데이터를 전송할 때 딜레이가 빠를 때와 느릴 때의 격차.
buffer: 받는 쪽에서 buffer(데이터를 받을 공간 사이즈)를 생성하여 데이터가 오면 일정 buffer동안 가지고 있다가 보여주는 방식.(수신 쪽에서 buffering한다. ex. 유튜브, 넷플릭스 등).

RSVP(The ReSerVation Protocol): 특정 길이만큼의 bandwidth를 미리 제공해 놓는 것. (한 용도로만 사용하겠다는 것.)
스트리밍 서비스에 많이 사용 됨.