Search
Duplicate

컴퓨터 네트워크/ 라우팅

라우팅이란 전달해야 될 데이터를 실은 패킷을 원하는 목적지로 전송하기 위해 가용한 모든 네트워크 정보를 이용해서 최적의 경로를 선택하고, 이 선택된 경로를 따라 데이터를 실은 패킷을 전달하는 일련의 과정을 의미한다.
인터넷은 자율 시스템 AS(Autonomous System)들의 계층적인 연결로써 구성되며, 각 자율 시스템은 라우팅 프로토콜을 사용하여 독자적인 운용 및 관리를 수행한다.

라우팅 개요

라우터(Router)는 다양한 이기종 네트워크를 연결하는 인터넷의 필수적인 요소 장비이다. 라우터는 라우팅 테이블과 패킷의 목적지 주소를 기반으로 경로를 결정하는데, 송신측에서는 패킷을 전송하기 위해 목적지까지의 경로를 정하고 경로를 따라 패킷을 전달해야 하며, 이러한 일련의 과정을 라우팅이라 부른다.
라우터는 이러한 라우팅 기능을 수행하며 OSI 7계층 중 3계층의 네트워크 계층 주소를 참조하여 가능한 여러 경로 중에서 최선의 경로를 결정하게 된다.
라우팅 기능을 수행할 때 비용이 가장 싼 경로, 즉 최적의 경로를 찾는 방법을 라우팅 알고리즘(Routing Algorithm)이라 한다.
라우팅 알고리즘은 라우팅 테이블 구성 방법에 따라 정적 라우팅 알고리즘(Static Routing Algorithm)과 동적 라우팅 알고리즘(Dynamic Routing Algorithm)으로 구분된다.
정적 라우팅 알고리즘은 고나리자가 직접 라우팅 테이블 정보를 설정하기 때문에 간단하지만 네트워크의 상황이 변했을 경우 관리지가 재설정해야 하므로 비효율적이다.
이에 반해 동적 라우팅 알고리즘은 네트워크 토폴로지와 같은 환경 변화 정보를 분석하여 라우팅 테이블을 갱신하고 갱신 메시지를 주변에 알림으로써 네트워크 환경변화에 능동적으로 대처할 수 있다.
인터넷과 같이 규모가 큰 네트워크에서 패킷을 효율적으로 전달하기 위해 라우팅 테이블은 반드시 동적으로 갱신되어야만 한다.
네트워크 내에 동적 라우팅을 사용하는 모든 라우터들은 네트워크 정보를 주기적으로 교환하며, 네트워크 주소와 메트릭(Metric)으로 구성된 라우팅 테이블을 생성, 갱신, 그리고 유지한다.
이와 같이 네트워크 정보를 생성, 교환, 유지 및 제어하는 프로토콜을 총칭하여 라우팅 프로토콜(Routing Protocol)이라 한다.
AS(Autonomous System)는 하나의 관리 도메인에 속해있는 라우터들의 집합을 말하는데, AS 내에 있는 라우터들은 해당 도메인의 라우팅 정보를 교환하기 위해 여러 개의 IGP(Interior Gateway Protocol)를 사용할 수 있으며, AS 외부로 패킷을 전송하고자 하는 경우에는 이를 위하여 EGP(Exterior Gateway Protocol)를 사용한다.
즉 라우팅 프로토콜은 라우팅 프로토콜이 수행되는 네트워크 범위에 따라 크게 도메인 내의 IGP와 도메인 간의 EGP로 구분된다.
그림 7-1에서와 같이 AS 내에서 운영되는 라우팅 프로토콜을 IGP라고 하며, IGP에는 거리 벡터 알고리즘(Distance Vector Algorithm)을 사용하는 RIP와 링크 상태 알고리즘(Link State Algorithm)을 사용하는 OSPF가 널리 사용된다. AS 간에 라우팅 정보를 교환하는 EGP로는 GBPv4가 주로 많이 사용된다.

라우팅 기본 원칙

라우터는 다른 네트워크의 경로를 나타내는 네트워크 IP 주소와 지역 네트워크에 대한 호스트 IP 주소를 나열하고 있는 라우팅 테이블을 가지고 있다. 라우터에서 IP 패킷이 처리되는 과정은 다음과 같다.
먼저 IP 패킷이 도착하면 목적지 주소를 찾기 위해 라우팅 테이블을 검색하게 된다.
패킷이 다른 네트워크로 전달되어야 하는 경우라면, 테이블의 인터페이스에 있는 해당 네트워크로 전달한다.
반면에 전송 IP 패킷이 자신이 소속된 LAN에 있는 호스트와 같은 라우터의 지역네트워크에 해당된다면 패킷을 보내게 된다.
만약 위와 같은 검색을 시행한 후에도 라우팅 테이블에 해당 경로가 검색되지 않는 경우라면, 해당 패킷을 디폴트 라우터로 보내게 된다.
이러한 알고리즘은 각 라우터들이 네트워크와 호스트의 정보를 모두 기록하는 대신에 다른 네트워크들과 지역 호스트에 도달할 수 있는 경로만을 유지하기 때문에 라우팅 테이블의 크기를 크게 줄일 수 있게 한다.

서브넷(Subnet)과 라우팅

6장 TCP/IP에서 살펴본 바와 같이 서브넷은 배정받은 하나의 네트워크 주소를 다시 여러 개의 작은 네트워크로 쪼개어 사용하는 것을 말한다. 서브넷은 외부에서는 보이지 않기 때문에 새로운 서브넷을 할당하는 것은 NIC에 접속하거나 다른 외부 네트워크의 정보를 변경시킬 필요가 없다.
라우팅에서 호스트가 어떤 네트워크인지 결정하기 위해서는 네트워크의 서브넷 마스크와 호스트 IP의 Boolean AND를 수행하여 IP 주소에서 네트워크 주소를 식별하는 마스킹(Masking)을 수행한다.
서브넷은 다른 서브넷으로 가는 경로와 자신의 서브넷에 있는 호스트 정보만 알고 다른 서브넷에 있는 호스트들에 대해서는 자세히 알지 못한다.
서브넷팅이 이루어진 IP의 라우팅은 네트워크로 전달된 다음 해당 서브네트워크로 전달되고 서브네트워크에서 최종 호스트로 전달된다.
이와 같이 서브넷은 IP 주소 지정을 네트워크, 서브넷, 호스트의 3단계로 나눔으로써 라우팅 테이블의 크기를 줄일 수 있다.

CIDR(Classless Inter-Domain Routing)

대부분의 조직에서 1,600만 개의 주소가 있는 A 클래스 네트워크는 너무 크고, 256개의 주소를 가지는 C클래스는 너무 작다. 라우터의 관점에서 IP 공간은 네트워크 번호와 호스트 번호라는 두 단계의 계층으로 되어 있다. 라우터들은 모든 호스트들을 알 필요는 없지만 모든 네트워크들은 알아야 한다.
만약 50만 개의 C 클래스 네트워크들이 사용된다면 전체 인터넷에 있는 모든 라우터들은 네트워크를 얻기 위해 네트워크당 50만 개의 엔트리를 가지는 테이블이 필요해진다.
CIDR은 인터넷 라우팅 테이블 크기가 폭증하는 것을 막는 하나의 방법이 될 수 있다. CIDR은 여러 IP 주소를 보다 작은 라우팅 테이블 엔트리로 나타낼 수 있다.
예컨대 단일 사이트에 10의 C 클래스 주소가 할당되었다고 하면 이를 합쳐서 인터넷에서 한 개의 라우팅 테이블 엔트리로 찾아갈 수 있도록 할 수 있다. 즉 10개의 엔트리를 하나의 라우팅 테이블 엔트리로 줄일 수 있다.
CIDR은 라우팅을 위해 합쳐진 동일한 상위 비트의 32비트 마스크를 IP 주소와 함께 전송한다. 212.122.0.0에서 212.122.255.0 범위의 모든 C 주소는 하나의 212.122.0.0/16으로 표현될 수 있는 것이다.
CIDR의 개념은 단지 새로운 C 클래스 주소 뿐만 아니라 모든 주소에도 동일하게 적용될 수 있다. 이것이 클래스 없는 라우팅이라 불려지는 이유이며, 그림 7-2는 그런 예를 보여준다.

RIP(Routing Information Protocol)

RIP 개요

RIP는 라우팅 경로 계산을 위해 거리 벡터 알고리즘을 사용하는 가장 단순한 라우팅 프로토콜이다. 거리 벡터 프로토콜(Distance Vector Algorithm)은 R.E.Bellman이 제안한 거리 계산 알고리즘에 기반하였기 때문에 ‘Bellman-Ford’ 프로토콜이라고도 불린다.
거리 벡터 알고리즘에서 각각의 라우터는 주기적으로 이웃 라우터들과 네트워크에 관한 정보를 주고받으며 이를 토대로 경로를 결정한다.
이때 유효 경로는 최대 2개까지 채택하며, 고정 수치를 부여하는 동일 홉수(Hop Count)의 경로가 있을 경우에 우선하는 경로를 제어한느 것도 가능하다.

거리 벡터 알고리즘(DVA, Distance Vector Algorithm)

개요

거리 벡터 알고리즘은 메트릭 값을 기초로 계산된 라우팅 정보를 이웃 라우터로부터 수신하여 테이블을 갱신하고 이를 통해 경로를 선택한다.
또한 라우터들은 라우팅 테이블 정보를 주기적으로(일반적으로 30초) 이웃 라우터에게 전송한다. 경로 설정을 위한 메트릭스로는 홉수를 사용한다.
그림 7-3과 같은 네트워크에서 A에서 B로 가는 메트릭스는 1이며 A에서 B를 거쳐 C로 가는 경우 A에서 목적지 C까지의 메트릭은 2가 된다.

라우팅 테이블 생성

거리 벡터 라우팅 테이블에는 목적지 주소와 비용 그리고 이웃 라우터의 주소가 저장된다. 그림 7-4와 같이 라우팅 테이블의 각 행에는 개개의 목적지 에 대해 패킷을 전달할 다음 홉의 주소와 전달 비용이 기록되어 있다.
그림 7-3과 같이 구성된 네트워크에서 라우터의 초기 라우팅 테이블은 그림 7-5와 같다. A 라우터의 경우, 처음에는 자신의 이웃 노드인 B, C, E의 정보만을 가진 라우팅 테이블을 구성한다.
그림 7-5와 같이 초기 라우팅 테이블은 자신과 연결된 이웃의 경우에는 비용이 1이 되고, 그 외의 노드에 대한 비용은 라우팅 정보가 없기 때문에 무한대(∞)로 설정된다.
라우터 A는 먼저 이웃한 B, C, E로 자신의 라우팅 테이블을 보내고, B, C, E로부터 각각 해당 라우터의 초기 라우팅 테이블을 전달 받는다.
그림 7-6에서와 같이 각 라우터는 자신의 라우팅 테이블을 모든 이웃한 라우터와 서로 교환한다.
첫 번쨰 라우팅 정보 교환 후 라우터 A는 직접적으로 이웃하지 않아서 알지 못했던 D에 대한 경로를 C, E로부터 받은 라우팅 테이블을 통해 얻을 수 있다.
이와 같은 과정을 반복하여 각 라우터는 전체 네트워크에 대한 정보를 갖게 되며, 또한 수정된 라우팅 정보를 자신의 이웃 노드에게 주기적으로 전송하게 된다.
그림 7-7은 위와 같은 과정을 거친 라우터 B의 최종 라우팅 테이블이다.

라우팅 테이블 갱신

이웃 라우터로부터 라우팅 테이블을 수신하면 라우터는 자신의 라우팅 테이블 정보를 기반으로 그림 7-8과 같은 과정을 통하여 라우팅 테이블을 갱신한다.
즉, 수신된 라우팅 테이블 정보에서 목적지 주소를 검사하고 만일 새로운 목적지 주소를 발견한 경우 해당 항목은 자신의 라우팅 테이블에 삽입한다.
만일 목적지 주소가 기존 라우팅 테이블에 있는 목적지 주소와 같고, 다음 홉 필드가 같은 값을 갖는 경우에는 경로의 새로운 정보이므로 테이블의 정보로 갱신한다.
다음 홉 필드가 같지 않고 수신 전 홈 필드 값의 비용이 더 큰 경우에는 기존의 정보로 유지하고, 기존의 홉 필드 값보다 더 작은 경우에는 라우팅 테이블을 갱신하여 비용이 더 작은 경로를 선택하여 갱신한다.
라우팅 테이블 갱신 동작의 예로 B가 A로부터 라우팅 테이블을 수신한 후의 라우팅 테이블 갱신 과정을 살펴 보면 그림 7-9와 같다.
A에서 전송된 라우팅 테이블은 B의 이웃한 노드이므로 비용은 한 홉씩 더해지고 A로부터 전송된 정보이므로 수신정보의 다음 홉은 A가 된다.
전달된 A의 라우팅 테이블과 이전 B의 라우팅 테이블은 그림 7-8과 같은 과정을 거쳐서 새로운 라우팅 테이블로 구성된다.

RIP 프로토콜

개요

RIP는 XNS(Xerox Network System)에서 제안한 라우팅 프로토콜로 후에 UNIX의 BSD 4.2 버전의 TCP/IP 프로토콜 환경에서 “routed”라는 데몬 형태로 구현되면서 널리 알려지게 되었다.
RIP는 거리 벡터 알고리즘을 사용하는 대표적인 라우팅 프로토콜로 작은 규모의 네트워크에서 쓰이는 간단한 라우팅 프로토콜이다.
RIP에서 사용되는 거리 벡터 값은 홉 카운트만을 사용한다.
현재 1998년 RFC1058의 RIPv1, 1994년 RFC1723의 RIPv2 그리고 1997년 RFC2080의 RIPng(Next Generation) 등이 표준으로 정의되어 있다.

메시지

RIP는 요청과 응답, 2가지 종류의 메시지로 구성된 단순한 구조를 갖는다. 요청 패킷은 처음 부팅되었을 때 이웃 라우터로 라우팅 테이블 정보를 요청할 경우나 특정 목적지 정보가 타임아웃 되었을 때 이를 갱신하기 위한 경우에 사용된다.
응답 패킷은 목적지에 대한 라우팅 정보를 실제로 담고 있는 패킷으로 이웃 라우터에게 매 30초마다 주기적으로 라우팅 정보를 전송하는데 사용된다.
또한 응답 패킷은 자신의 라우팅 테이블에 변화가 생겼을 때 이를 알리기 위해 사용되기도 한다.
RIP는 이웃 라우터로부터 타임아웃 시간 동안 수신이 이루어지지 않으면, 의미 없는 목적지로 간주하고 해당 목적지 엔트리를 라우팅 테이블에서 삭제 시킨다.
RIP 패킷은 그림 7-10과 같은 형태로 구성되어 있다. 메트릭은 1에서 15의 거리 값을 갖게 되고 16은 무한대를 나타낸다.
이는 RIP 패킷이 15 홉보다 더 긴 경로를 가지지 않도록 하여 RIP 패킷이 계속해서 네트워크게 남아 있는 경우를 방지하기 위해 설정되었다.

문제점

RIP는 라우팅 정보를 기본적으로 30초마다 이웃 라우터에게 보내기 때문에 네트워크 토폴로지가 변화 되었을 때 네트워크의 모든 라우터들이 이러한 상황을 반영하는데 많은 시간이 소요된다. 또한 네트워크 토폴로지 정보를 가지고 있지 않기 때문에 경로에 루프가 발생할 가능성도 있다.
RIP의 발생 가능한 문제점은 다음과 같다.
RIP는 홉 수(Hop Count)가 최대 15로 제한되었기 때문에 홉 수가 15 이상인 네트워크에서는 사용할 수 없다. 따라서 RIP는 네트워크 규모의 제한을 받는다.
RIP는 거리 단위를 홉 수로 제한함에 따라 회선의 속도와 같은 다른 사항들을 반영할 수 없기 때문에 항상 빠른 경로를 선택할 수는 없다.
전체 경로를 담은 라우팅 테이블을 주깆거으로 브로드캐스팅 함에 따라 네트워크에 이에 따른 트래픽 부하를 준다.
라우팅 정보가 30초 마다 교환되므로 네트워크 장애 시 복구에 많은 시간이 소요된다. 장애가 발생하였을 때 이를 감지하기 위해서는 최소 거리 단위를 16까지 증가해야 하기 때문에 라우팅 알고리즘의 수렴 속도가 늦어지고 이를 수행하기 위한 자원의 낭비를 초래하는 단점이 있다. 이를 ‘Count-to-infinity’라고 한다.
네트워크에 변화가 생겼을 때, 즉시 라우팅 경로에 반영하지 못하므로 특정 경로에 루프가 발생할 수 있다.

해결방안

상기 문제점들을 해결하기 위해 다음과 같은 방안들이 제시되고 있다.
Triggered Update
거리 단위가 변경되었을 때, 라우터는 이를 즉시 통보함으로써 복구의 시간을 줄인다.
Hold Down
Triggered Update와 상반된 개념으로 거리 벡터가 무한대인 경로에 대해서는 일정시간 동안 경로를 갱신하지 않고 전체 네트워크의 경로가 새로 갱신될 때까지 기다린다.
Split Horizon
라우터 A가 B를 거쳐 C로 전송하는 경우에 B와 C 사이에 장애가 발생했다면 해당 경우 A와 B 사이는 루프가 발생할 수 있다. 이를 해결하기 위해 B가 A에게 보낸 정보는 다시 B에게 보내지 않는 방법이 Split Horizon이다.
Poisoning
라우터가 회선이 고장 난 것을 감지하면 즉시 해당 경로의 홉을 16으로 지정하여 전체 네트워크에 전송함으로써 도달불가능을 신속하게 알리는 방법이 Poisoning이다.

OSPF(Open Shortest Path First)

OSPF 개요

OSPF는 AS(Autonomous System) 내에서 널리 사용되는 라우팅 프로토콜이다. OSPF는 링크 상태 알고리즘을 사용하며 각 라우터는 이웃 노드의 상태와 링크에 대한 비용을 알고 있다는 가정에서 시작한다.
OSPF는 라우팅 테이블이 안정화된 다음에는 라우팅 정보를 주기적으로 갱신하지 않고 네트워크 변화가 있을 때만 갱신함으로써 라우팅 프로토콜 트래픽이 네트워크에 미치는 영향을 최소화하였다.
그림 7-11은 링크 상태 라우팅 프로토콜을 사용하는 네트워크에 대한 모델이다. 관리자는 각 링크에 대한 비용을 지정한다.

링크 상태 알고리즘(Link State Algorithm)

개요

링크 상태 프로토콜에서 모든 라우터는 이웃에 대한 연결 정보를 알고 있다. 이러한 정보는 모든 라우터가 동일하게 보유하여 각 라우터는 네트워크 전체 토폴로지에 대한 충분한 정보를 갖게 된다. 링크 상태 알고리즘은 이러한 정보를 바탕으로 목적지에 대한 최적의 경로를 알 수 있다.

플러딩(Flooding)

링크 상태 프로토콜을 사용하는 모든 라우터에 대해 링크 상태 정보를 전송하는 과정을 플러딩이라 한다. 플러딩은 이웃 노드에 자신의 라우팅 정보를 전송하고 정보를 전달 받은 노드는 이를 다시 직접 연결된 다른 노드에 링크 상태 정보를 보내는 것으로 진행된다. 이 과정은 모든 노드가 해당 정보를 받을 때까지 계속된다.
각 라우터는 라우팅 정보 전송을 위해 특별한 패킷을 사용하는데, 이것을 링크 상태 패킷(LSP: Link State Packet)이라고 한다. LSP는 그림 7-12와 같이 LSP를 생성한 노드의 ID, 목적지 주소, 이웃 노드까지의 비용, 이웃 노드의 ID 정보 등으로 구성된다.
각 노드는 LSP를 수신하면 패킷 내에 있는 순서 번호를 비교하여 새로운 정보인지를 판단하고 새로운 정보일 경우 라우팅 테이블을 갱신한다.
그림 7-13은 라우터 A가 새로운 LSP를 생성하였을 때 플러딩이 진행되는 과정을 보여주고 있다. A는 LSP를 자신의 이웃 노드 B, C, E에 전송하고 B, C, E는 A를 제외한 이웃 노드에 LSP를 전송한다. 이러한 과정을 반복하여 모든 노드가 A로부터 송신한 LSP를 받게 된다.

링크 상태 데이터베이스(Link State Database)

각 노드는 플러딩 과정을 통하여 얻은 네트워크 토폴로지 정보를 링크 상태 데이터베이스에 넣어 공통의 데이터베이스를 유지한다. 그림 7-14는 그림 7-11과 같은 네트워크 구성에서의 링크 상태 데이터베이스를 나타내고 있다.

최단 거리 트리 - Dijkstra 알고리즘

각 라우터는 자기 자신을 루트로 하여 목적지까지의 트리를 구성하고 최적의 경로를 계산한다. 최적 경로 계산은 Dijkstra’s 알고리즘을 이용하는데, Dijkstra 알고리즘은 그래프 이론으로 한 노드에서 다른 노드까지의 최단 경로를 찾는 알고리즘이다.
Dijkstra 알고리즘의 예를 보기 위한 네트워크 모델은 그림 7-15와 같다. 라우터 사이에는 네트워크가 존재하며 라우터에서 네트워크로의 비용이 지정된다.
Dijkstra 알고리즘은 라우터와 네트워크 노드로, 그 연결을 아크로 한 그래프를 이용하여 네트워크에 있는 노드간의 최단 경로를 계산한다.
알고리즘은 하나의 노드를 루트로 하여 아크에 연결된 노드를 임시 노드에 두고, 최소 비용을 가지는 노드를 찾는 검사를 수행하여 최단거리 트리의 영구노드를 결정하는 방식이다.
알고리즘의 절차는 다음과 같다.
1.
트리의 루트가 될 하나의 노드를 정한다.
2.
1의 노드를 영구노드로 결정한다.
3.
가장 최근에 영구노드가 된 노드의 이웃노드를 검사한다.
4.
3의 노드에 누적합의 비용을 계산하고 임시 노드를 만든다.
5.
임시 노드들에 대해 가장 비용이 적은 노드를 찾아 영구노드로 만든다. 하나 이상의 경로가 존재 할 때는 누적합이 가장 작은 경로를 선택한다.
6.
3-5의 과정을 모든 노드가 영구노드가 될 때까지 반복한다.
그림 7-15의 적용 모델 네트워크에서 A를 루트로 한 최단 거리 트리는 그림 7-16과 같다.
위와 같은 Dijkstra 알고리즘을 통해 최단거리트리를 생성하게 되며 라우터 A는 아래 표와 같은 라우팅 테이블을 생성하게 된다.
목적지 네트워크
비용
다음 홉
N1
2
-
N6
5
-
N5
3
-
N2
9
B
N3
6
C
N4
6
E

OSPF 프로토콜

개요

1980년대 중반에 RIP 프로토콜이 대규모 이기종의 네트워크 간의 라우팅을 수행하는 데에 한계에 이르자 IETF(Internet Engineering Task Force)에서는 최단 거리 알고리즘을 기반으로 하여 대규모 네트워크에도 적용시킬 수 있는 라우팅 알고리즘을 개발하였다.
OSPF는 이름에서 시사하고 있는 바와 같이 모든 사양이 개방되어 있고 그 사양은 RFC1247(OSPF version2는 RFC 1583)에 규정되어 있다.
OSPF에서 모든 라우터는 동일한 네트워크 토폴로지 데이터베이스를 가지며 자신을 중심으로 모든 목적지까지의 최적 경로를 계산하여 라우팅 테이블을 작성한다.
네트워크에 변화가 생겼을 때는 플러딩 과정을 통해 데이터베이스를 신속하게 갱신함으로써 라우팅 테이블의 수렴시간을 현저하게 줄일 수 있었다. 또한 변화가 생겼을 때만 플러딩 과정을 수행하므로 RIP에 비해 라우팅 트래픽의 양을 획기적으로 줄일 수도 있었다.

메시지

OSPF 프로토콜에서 모든 메시지는 동일한 헤더로 시작한다. 그림 7-17은 이런 OSPF 메시지의 헤더 포맷을 보여주고 있다.
헤더에는 버전 필드와 1에서 5사이의 값의 타입 필드, 메시지를 보내는 노드의 주소를 나타내는 소스 주소, 노드가 속하는 Area의 ID를 의미하는 Area ID 필드로 구성되고, IP 헤더와 마찬가지로 16비트 체크섬 필드를 포함한다.
Area 필드는 그림 7-18과 같이 OSPF가 계층적으로 구성될 수 있기 때문에 필요하다.
또한 OSPF는 라우터 간에 인증 기능을 수행할 수 있으며 이를 통해 관리자의 허가 없이 라우터에 접속하고 네트워크를 무단으로 이용하는 것을 방지할 수도 있다.

동작

OSPF는 플러딩을 위해서 D class의 IP 주소를 사용하여 멀티캐스팅을 수행한다.
즉 모든 OSPF 라우터는 224.0.0.5의 목적지 IP 주소를 갖는 패킷을 수신한다. 224.0.0.5는 OSPF를 기반으로 동작하는 모든 라우터를 가리키는 멀티캐스팅 주소이다.
OSPF의 ‘hello’ 메시지는 이웃 라우터에게 자신이 살아 있다는 것을 알리기 위해 사용된다. 일정 시간 동안 이웃 라우터로부터의 ‘hello’ 메시지가 없을 때, 라우터는 이상 상태가 발생했음을 감지하고 그 사실을 플러딩 하게 된다.

수렴 속도

OSPF의 특징 중 가장 유용한 점은 네트워크 토폴로지가 변경되었을 때 매우 신속하게 변화에 적응하는 능력이다. OSPF는 여러 장애에 대해 발생 즉시 감지해 내고 변경된 네트워크 토폴로지 정보를 LSP에 담아 모든 OSPF 라우터에 플러딩 한다.
이 패킷을 수신한 라우터는 즉시 데이터베이스를 갱신하고 최단 경로 알고리즘을 이용하여 경로를 재 계산하게 된다.
OSPF 수렴 속도에 영향을 주는 요소는 장애 감지와 경로 계산이다. OSPF는 2가지 방식으로 장애를 감지한다. 첫째는 인터페이스의 상태변화이고, 두 번째는 Dead Timer라 부르는 시간 내에 이웃 라우터로부터 hello 패킷이 수신도지 않은 경우 장애로 판단한다.
Dead Timer의 기본 값은 브로드캐스트 네트워크의 경우 40초이고 브로드캐스트 네트워크가 아닐 경우에는 2분으로 규정되어 있다. 경로 계산에 걸리는 시간은 네트워크의 크기, 데이터 베이스 내의 경로 개수에 따라 달라진다.

미니강의| Area

Area는 연속적인 네트워크와 그에 연결된 호스트의 집합이다. 여러 개의 인터페이스를 가진 라우터는 여러 개의 Area에 참여할 수 있으며, 이런 라우터를 ABR(Area Border Router)라 부른다.
ABR은 각 Area에 대해 각각의 토폴로지 데이터베이스를 유지한다. 즉 같은 Area 내의 라우터는 같은 정보를 공유하기 때문에 같은 토폴로지 데이터베이스를 갖는다.
OSPF 백본은 ABR로 구성되며 백본 자체가 OSPF Area이다.

BGP(Border Gateway Protocol)

BGP는 AS 사이에서 라우팅 정보를 전달하는 EGP(Exterior Gateway Protocol) 중 하나로 널리 사용되고 있다.
초기에는 도메인 간의 라우팅 프로토콜로 EGP를 사용하였으나, 네트워크가 커지게 되면서 라우팅 루프가 생기는 등의 문제들이 발생하여 이를 해결하기 위해 BGP가 등장하게 되었다.

BGP 개요

서로 다른 AS에 속한 BGP 라우터가 통신하기 위해서는 하나의 네트워크로 직접 연결되어 있어야 한다.
한 AS 내에 복수 개의 BGP 라우터가 있는 경우 BGP 라우터들은 해당 AS에 대한 일괄된 정보를 외부에 알리고, AS 외부 통로로서의 역할을 수행하기 위해 서로를 인식하고 정보를 교환해야 한다.
BGP 라우터들은 초기에는 전체 라우팅 테이블을 교환하지만 이후에는 변경된 라우팅 테이블 만을 교환한다.
BGP는 RIP와 같이 거리 벡터에 기초한 라우팅 알고리즘이지만, RIP가 목적지까지의 홉 수를 사용하는데 반해, BGP는 경유하는 AS의 일련 번호를 전송한다.
BGP는 목적지까지의 경로에 대한 모든 값을 가지게 되어 AS의 그래프를 생성할 수 있으므로, 루프를 방지할 수 있으며 라우팅 동ㅈ가에 대한 일정한 제한을 가해야 하는 라우팅 정책을 구현한느데 매우 유용하다.

BGP 동작 과정

경로 설정

BGP는 TCP well-known 포트 179번을 사용하여 이웃 노드 간의 연결을 유지하고 필요시 갱신 정보를 교환한다. 또한 권고값인 30초인 Keep-Alive 메시지를 주기적으로 교환함으로써 상대방의 동작 유무에 대한 정보를 얻는다.
BGP 라우터는 특정 목적지에 대한 모든 경로를 유지하고 있지만 경로 갱신 메시지에는 최적의 경로만을 전송한다.

연결

각 AS 내부에는 BGP를 사용하는 라우터가 여러 개 있을 수 있으며 이러한 BGP 라우터들은 다른 AS간의 연결에 있어 횡단(Transit) AS를 제공할 수 있다. 그림 7-19에서 AS100은 AS200과 AS300 사이의 횡단 AS이다.
동일한 AS에 속한 BGP 라우터 간에 동작되는 BGP를 IBGP(Internal BGP)라 하고, 서로 다른 AS에 동작하는 BGP를 EBGP(External BGP)라 한다.
IBGP는 해당 AS에서 AS 외부로 패킷을 전달하고 할 때 적절한 라우터가 어떤 것인지를 결정할 수 있는 방법을 제공하며, 이를 Local Preference라고 한다.

동작

BGP의 동작 과정을 살펴보자. 이를 위해 그림 7-20과 같이 구성된 네트워크를 가정해 보자. AS12의 203.252.53 네트워크가 AS9의 142.94.25 네트워크로 전송을 하고자 한다고 하자.
이때 AS4는 AS4에 연결되어 있는 203.252.53, 203.252.25 네트워크는 AS4로 직접 연결되어 있다는 것을 BGP를 사용하는 AS1에 알린다.
백본 네트워크는 이를 받아서 203.252.53, 203.252.25 네트워크는 (AS1, AS4)의 경로를 통해 도달할 수 있다고 BGP를 통해서 공지하고, AS1은 이와 비슷하게 AS3은 142.94.55, 125.12, 142.94.95, 121.33.2는 (AS1, AS3)의 경로를 통해서 도달할 수 있다고 알린다.
AS4가 AS1에 정보를 보내면 AS1은 AS3을 통해서 142.94.25 네트워크로 라우팅이 된다는 사실을 인지하고 (AS4, AS1, AS3)의 전체 전달 경로를 알게 된다.
142.94.25 네트워크로 패킷을 보낼 때에는 AS1으로 전송하고, AS1은 AS3으로 전달하게 되어 루프가 생기지 않는다.
BGP에서 사용하는 AS 번호는 16비트이며 중복 방지를 위해 공인된 기관에 의해 부여된 유일한 주소를 사용한다.

메시지

BGP는 TCP의 연결을 이용하여 신뢰성 있는 라우팅 메시지를 전송한다. 그림 7-21은 BGP 헤더의 포맷을 나타내고 있다.
하나의 메시지 끝을 구분하는 경계로 라우팅 메시지의 길이를 포함하고 있는 일정한 길이의 헤더를 포함한다. 수신측은 헤더의 19바이트를 읽어 메시지 길이를 판단한 후 라우팅 메시지를 받아들인다.
마커 필드는 보안 목적을 위해 예약된 필드이다. 즉 마커 필드는 인증을 위해 사요오디며, 수신측에서는 MD5를 사용한다.
그림 7-22는 BGP 메시지의 종류를 나타내고 있는데, 메시지에는 OPEN, UPDATE, KEEPALIVE, NOTIFICATION 등이 있으며, 이를 타입 필드에 나타낸다.
OPEN
다른 라우터와 이웃 관계를 설정하기 위해 사용된다. 라우터가 이웃 라우터의 BGP 포트로의 TCP 연결을 요청하여 연결이 성립되면, 관련 파라미터를 협상하기 위해 OPEN 메시지를 보낸다.
BGP OPEN 메시지는 중복된 연결을 발견하였을 때나 버전이 서로 다른 경우에는 NOTIFICATION 메시지에 원인을 알리고 연결을 종료한다.
즉 BGP OPEN을 거절할 때에는 에러의 원인과 설명을 담은 NOTIFICATION 메시지를 보냄으로써 TCP 연결을 닫는다. 이웃 라우터와 이웃 관계가 성립되면 KEEPALIVE 메시지를 보냄으로써 연결 설정을 알려야 한다.
UPDATE
초기 메시지 교환을 수행한 후에는 경로의 변동이 있을 때만 UPDATE 메시지를 전송한다. UPDATE에 대한 처리는 새로운 경로가 더 짧은 경우에 라우팅 테이블의 값을 대체하고 이웃 BGP 라우터로 해당되는 갱신 정보를 전송한다.
KEEPALIVE
KEEPALIVE 메시지는 OPEN 메시지에 대한 수신 확인 메시지로 쓰인다. 다른 보낼 정보가 있지 않을 때도 이웃이 살아 있는지를 알기 위해 주기적으로 전송한다.
NOTIFICATION
오류가 발생했을 경우 송신자가 BGP 세션을 종료하고자 할 때 사용된다.

그외 라우팅 프로토콜

IS-IS

ISO에서는 OSI 참조 모델의 네트워크 계층 프로토콜을 위한 라우팅 프로토콜의 필요성을 느끼고 이를 위한 라우팅 프로토콜을 개발하게 되었다. 초기에는 OSI 표준 모델의 네트워크 계층 프로토콜인 CLNP(Connectionless Network Protocol)을 위한 라우팅만을 고려하였으나 후에 IP 네트워크를 위한 버전도 개발되었다.

라우팅 계위

OSI 라우팅에서 네트워크에 연결된 임의의 시스템을 ES(End System)라 부르고 라우팅 기능을 수행하는 라우터 등을 IS(Intermediate System)라 부른다.
그림 7-23에서와 같이 OSI 라우팅에서는 OSPF에서처럼 네트워크를 도메인과 Area로 구분하며, Area 내에서의 라우팅은 레벨 1 라우팅, AREA 간의 라우팅은 레벨 2 라우팅이라 부른다.

ES-IS(End System To Intermediate System) 라우팅

ES-IS는 라우팅 프로토콜이라기보다 ES와 IS 간에 서로를 인식하기 위한 프로토콜로써, 이는 특정한 멀티캐스트 주소로 각각의 hello 패킷을 전송함으로써 수행된다.
즉, 각 ES는 ESH(ES hello) 메시지를 서브넷에 속한 모든 IS들에게 전송하고, 각 IS는 ISH(IS Hello) 메시지를 서브넷에 속한 모든 ES들에게 전송한다.
각 hello 패킷에는 송신자의 서브넷과 네트워크 주소를 포함하고 있으므로, 이러한 hello 패킷을 통해 서로를 인식할 수 있게 된다.

IS-IS(Intermediate System To Intermediate System) 라우팅

IS-IS는 OSPF와 같이 링크 상태 라우팅 프로토콜로써 링크 상태 정보를 교환하여 전체 네트워크의 토폴로지를 계산할 수 있다.
IS-IS 간의 패킷 전송은 ES간의 패킷 전송을 통해 살펴볼 수 있다. 한 ES가 다른 ES에게 패킷을 전송하기 위해서는 먼저 ISH를 수신하여 알게 된 임의의 IS에게 패킷을 전송한다.
이때 IS는 목적지 ES가 같은 네트워크에 있으면 이를 목적지 ES로 전송하고 송신 ES에게로 RD(Redirect) 패킷을 전송한 이후의 패킷은 IS를 통하지 않고 직접 통신하게 된다.
만약 목적지 ES가 같은 Area의 다른 네트워크에 속해 있으면 IS는 IS끼리의 정보교환을 통해 정확한 경로를 알고 있으므로 이 경로를 따라 패킷을 전송하게 된다.
목적지 ES가 다른 Area에 있는 경우, 레벨 1 IS는 가장 가까이 있는 레벨 2 IS에게 전송하여 이를 통해 패킷이 목적지 Area에 도달할 수 있게 한다. 목적지 Area 내에서는 목적지 ES에 도달할 때까지 패킷의 라우팅이 계속된다.
위와 같은 동작을 위해 각 IS는 자기와 연결된 IS와 ES들에 대한 정보를 포함하는 갱신 패킷을 모든 이웃한 IS에게 전송한다. 이러한 갱신 패킷은 또 이웃한 IS를 통해 전송되고 이러한 과정이 반복된다.
모든 IS가 다른 모든 IS로부터 이러한 갱신 패킷을 수신했을 때에야 비로소 완전한 데이터베이스 구축을 할 수 있게 된다.
만약 경로가 변하게 되면 변경된 내용에 대한 새로운 갱신 패킷이 전송된다.
그림 7-24는 이와 같은 라우팅 프로토콜에 대한 이해를 쉽게 보여주는 구성이다.