[이해하기] 라우팅 프로토콜 – OSPF (Open Shortest Path First)

(# 참고 : 라우팅 프로토콜 요약 – (클릭))

1. OSPF (Open Shortest Path First) 란?

위 링크의 라우팅 프로토콜 요약에서 설명한 것과 같이 관리자가 일일이 경로를 지정하지 않아도 알아서 패킷이 길을 찾아나가는 다이나믹 라우팅 프로토콜 (Dynymic Routing Protocol) 의 방식 중, 링크 상태를 확인하여 최단 경로를 찾는 알고리즘을 통해 확인된 최단 경로를 바탕으로 패킷을 전달해주는 라우팅 프로토콜입니다.

OSPF 의 주요 속성은 다음과 같습니다.
– AS(Autonomous System) 내부를 구성하는 내부용 라우팅 프로토콜 (IGP : Interior Gateway Protocol) 입니다.
– Link State 기술에 의한 최단경로 선택 라우팅 알고리즘 (링크 상태 라우팅 프로토콜) 입니다. 특히 최단 경로를 선택하기 위해 다익스트라 (Dijkstra) 의 SPF(Shortest Path First) 알고리즘을 사용합니다.

장점으로는 다음과 같습니다. (아래와 같은 이유들 때문에 널리 사용되고 있습니다.)
– 빠른 재수렴 (Fast Reconvergence) : 네트워크의 모든 라우터간에 정보를 주고 받는데 걸리는 시간을 컨버전스 타임 (Convergence Time) 이라고 합니다. (즉, 라우팅 테이블이 완성되는데 소요되는 시간) OSPF 는 변화가 생기면 바로 해당 정보를 전파하기 때문에 즉시 변경된 라우팅 정보를 반영하여 빠른 컨버전스 타임을 가집니다.
– 부분 갱신 (Partial Update) : 링크 상태 (Link State) 의 변화시에 만 라우팅 정보를 전송하므로 리소스의 낭비를 방지할 수 있습니다. (브로드캐스트가 아닌 멀티캐스트로 전송)
– Area 개념을 사용 : Area 라는개념을 사용하여 OSPF 네트워크를 더 작은 영역으로 나눈 다음 관리를 하기 때문에 더 효율적인 라우팅, 관리가 가능합니다. 따라서 큰 네트워크에 적합합니다. (다른 영역에서 변화가 일어나더라도 라우팅 테이블을 업데이트 하지 않아도 됨) 단, 반드시 백본 영역 (위 그림에서 Area 0) 이 존재해야 하며, 연결되지 못하는 경우에는 Virtual 링크를 통해 연결되어야 합니다.
– Stub Area 개념을 사용 : 내부 라우터에게 외부 경로에 대한 정보를 차단하고 기본 라우팅만 전달합니다. 따라서 라우팅 테이블의 크기를 대폭 감소시켜 네트워크의 안정성이 확보 되며 라우팅 성능도 좋아지고 장애처리가 쉬워집니다.
– VSLM 지원 (VLSM 참조 : 클릭) : 서브넷을 더 잘개 쪼개는 VLSM 을 지원하므로 IP 주소를 효과적으로 사용할 수 있을 뿐 만 아니라 라우팅 테이블을 줄일 수 있으므로 효율적인 리소스 사용이 가능합니다. 또한 라우트 요약 (Route Summarization / 최적화) 기능을 제공하므로 여러 개의 라우팅 경로를 하나로 묶어줄 수 있습니다.
– RIP 프로토콜의 경우 홉 카운트가 15 로 제한되어 있지만 OSPF 에서는 제한이 없어 네트워크 크기의 제한이 없습니다.
– 경로 결정의 효율성 : 홉 카운트 만을 고려하는 RIP 와는 달리 링크 비용 (Link cost) 개념으로 다양한 변수를 기반으로 한 메트릭을 산정하여 최단 거리를 구하는 OSPF 의 알고리즘 특성상 더 효율적이고 빠른 경로 산출이 가능할 수 있습니다.

| OSPF 의 Area 구성도 예시


2. OSPF 라우터의 종류

(1) 위치에 따른 구분
– IR (Internal Router) : 특정 Area 에만 속한 라우터입니다.
– ABR (Area Border Router) : 두 개 이상의 Area 에 속한 라우터를 말합니다. 즉, Area 경계선에 걸쳐져 있습니다.
– ASBR (Automous System Boundary Router) : 외부 네트워크와 연결되는 라우터입니다. (AS 끼리 연결)

(2) ID 와 역할에 따른 구분 (DR, BDR)
– ID (라우터 ID)
OSPF 를 통해 경로 정보를 서로 주고 받을 때 특정 라우터를 구분하는 고유의 값으로 사용됩니다. ID 값이 지정되는 순서는 다음과 같습니다.
> 물리적 인터페이스 보다 논리적 인터페이스인 루프백 인터페이스 (가상의 인터페이스) 를 라우터 ID 로 지정합니다.
> 루프백 주소가 여러 개 있으면 높은 값의 주소가 라우터 ID 로 사용됩니다.
> 루프백 주소가 없을 경우, 활성화된 인터페이스의 주소 중 가장 높은 값을 가지는 주소를 라우터 ID 로 사용합니다.
** 라우터 인터페이스의 주소가 잦은 변경이 일어난다면 라우터 ID 가 자주 변경되게 됩니다. 이렇게 되면 주변의 OSPF 라우터들이 정보를 수정해야 하는 일이 빈번하게 발생하여 리소스를 낭비 하게 됩니다. 이를 막기 위해 루프백 인터페이스를 사용하는 것이 더 효율적입니다. (루프백 인터페이스는 가상의 인터페이스이므로 다운되지 않으며, 주소의 높고 낮음에 관계 없이 무조건 이 주소가 라우터 ID 가 됨)
– DR (Designated Router) & BDR (Backup Designated Router)
OSPF 에서는 기본적으로 네트워크 관리의 책임을 지는 DR 과 BDR 을 선출합니다. 이 후 OSPF 에 참여하는 모든 라우터들은 DR 과 BDR 에 자신의 링크 상태를 알립니다.
> DR 과 BDR 을 사용하는 목적은, 모든 라우터와 링크 상태를 교환할 경우 발생하는 트래픽을 줄이고 링크 상태의 Sync 상태를 올바로 관리하는데 있습니다.
> 또한 DR 은 이 정보를 관리하고 링크 상태를 항상 일치시키는 역할을 수행합니다.
> BDR 은 DR 이 제대로 동작하는지, 업무를 제대로 수행하는 지를 관찰하다가 DR 에게 문제가 발생하면 바로 DR의 역할을 대신 수행합니다.
> DR 과 BDR 의 선출과정은 다음과 같습니다.
1) 라우터의 우선순위는 기본 1 로 설정
2) 어떤 라우터가 이보다 높은 우선순위를 갖는다면 그 라우터가 DR 이 되고 그 다음이 BDR로 선정
3) 두 라우터의 우선순위가 같다면 ID 가 높은 라우터가 DR 이 됨
4) DR, BDR 선출 이후 우선순위가 높은 라우터가 네트워크에 추가되면 이미 위 과정이 끝난 상태이므로 다음 번 선출 때에 참여 가능
5) 특정 장비가 DR 이나 BDR 에 참여하지 않게 하려면 우선순위를 0 으로 설정하면 됨


3. OSPF 이웃 (Neighbor)

라우팅 정보를 서로 교환하는 인접한 이웃의 다른 라우터를 의미합니다. (직접 연결된 다른 라우터) 이웃 관계를 정상적으로 맺어야만 라우팅 정보를 주고 받을 수 있습니다. 이웃을 성립하는 단계는 다음과 같이 정리할 수 있습니다.

– Down : 서로간에 어떠한 정보도 주고받지 못하는 상태
– Attempt (NBMA – Non-Broadcast Multi-Access Network 만 해당)
– Init : Hello 패킷을 보내기도 받기도 하는 상태 (이웃의 발견)
– Two-way : 양방향 통신이 이루어짐. 주고받는 Hello 패킷 내 이웃 리스트 필드에 자신들의 라우터 ID 를 포함하여 전달하거나 이를 수신 확인하는 상태
– Exstart : 양 라우터간에 주/종 관계가 성립되는 상태. 이때 양자간에 DDP (Database Description Packet : 링크 상태에 관련된 요약 정보 (LSA 목록)) 패킷을 서로 교환 (Database synchronization)
– Exchange : 링크 상태 정보를 요청 및 응답하고, 요청을 잘 받았다는 확인을 보내는 과정
– Loading
– Full : 이웃 관계의 완성 단계 (Fully Adjacent)


4. OSPF 와 라우팅 테이블 – LSA (Link State Advertisement)

LSA (Link State Advertisement) 란, OSPF 가 사용하는 패킷 형태의 라우팅 정보를 말합니다. 여러가지 타입의 LSA 를 이용하여 라우팅 정보를 이웃 라우터들에게 전송하고, 이 정보는 라우터의 LSD (Link State Database) 에 저장된 다음 최적 경로가 계산되어 마지막에 라우팅 테이블로 저장됩니다. (같은 Area 에 있는 라우터들은 같은 LSD 정보를 가지고 있음)

LSA 는 여러 타입이 있지만, 특히 1) 어느 라우터가 만드는 것인지 2) 어떤 내용을 가지고 있는지 3) 어디까지 전달되는지 를 파악하는 것이 중요합니다. 주요한 LSA 의 종류들은 다음과 같습니다.


– (참고) LSA 의 패킷 구조

> Link State Age (16 bit)
# 링크 상태 패킷 생성 시 Link State Age 는 0 으로 설정되고, 이 후 초 단위의 경과시간이 기록되는 것을 의미합니다. LSA 가 전파 (Flooding) 되면서 LSD 에서 유지되는 동안에도 계속 경과 시간이 증가합니다.
# 같은 Link State Sequence Number 나 다른 Link State Age 를 갖는 여러 LSA가 함께 도착하면, 이들의 시간 차이가 최대 시간 차이 (MaxAgeDiff / 다른 LSA 간의 Link State Age 값 차이) 이내에 있을 경우 그 네트워크가 정상적이라 간주하고 원래 유지하던 정보를 유지합니다. (Flooding 하지도 않음) 이들의 시간 차이가 최대 시간 차이 (MaxAgeDiff) 범위를 벗어나면 네트워크 이상이라 간주하고 가장 적은 시간의 LSA 로 자신의 LSD 를 갱신하고 전파합니다.
# 주기적인 LSA 유효성 검증 및 갱신 메커니즘이 있습니다. (MaxAge : 1 시간) LSD 내 어떤 LSA 가 어떤 이유로 해서든지 MaxAge 만큼 지나면 자동 삭제되고 이웃라우터들에 이를 전파합니다. (LS RefreshTime : 30 분) MaxAge 가 다가오기 전에, LS RefreshTime 의 주기로 LSA 에 대한 새 정보를 전파합니다.
> Options (8 bit)
> Link State Type (8 bit) – 위 LSA 의 종류 정보 참조
> Link State ID (32 bit) : OSPF 링크의 식별자입니다. 주로 라우터에 연결된 링크 또는 네트워크의 IP 주소를 사용합니다. (Link State Type 에 따라 다른 의미로 사용)
> Advertising Router ID (32 bit) : LSA 를 생성한 라우터의 라우터 ID 입니다.
> LS Sequence Number (32 bit) : 중복 LSA 등을 찾기 위한 순서번호입니다.
> LS Checksum (16 bit)
> Length (16 bit) : LSA 헤더 (20 바이트) 를 포함한 총 LSA 의 길이입니다.


5. OSPF 경로 코드 정보

OSPF 프로토콜에서는 경로 간 비용을 기준으로 최적의 라우팅을 산정하지만, 경로 코드를 통한 우선 순위가 우선적으로 고려되어 최적의 경로를 산정하게 됩니다. 예를 들어, 더 적은 경로 간 비용이 있더라도 우선 순위가 설정되어 있다면 우선 순위가 더 높은 경로로 라우팅이 우선 설정되게 됩니다.

| OSPF 경로 코드 정보 요약

# O (우선순위 : 1)
– OSPF 영역 내부
– 라우터의 영역 (Area) 안에서 생성된 네트워크 정보

# O IA (우선순위 : 2)
– 다른 Area 정보
– 자신의 Area 에 있는 라우터의 영역 밖에서 생성된 네트워크 정보지만 AS 안의 네트워크 정보
– Summary LSA를 통해 광고 (경로 축약 X / Link-State 요약 정보) ABR에 의해서 광고

# O E1 (우선순위 : 3)
– Type 1 External routes (외부 경로 중 Type 1번)
– OSPF AS 밖의 외부 네트워크 정보
– External LSA를 통해서 광고 (ASBR), 유동 Metric 사용 (경로마다 누적된 Cost가 다름)

# O E2 (우선순위 : 5)
– Type 2 External routes (외부 경로 중 Type 2번)
– OSPF AS 밖의 외부 네트워크 정보
– External LSA를 통해서 광고 (ASBR) 고정 Metric 사용 (Default)


6. Stub Area

ABR 이 내부 라우터에게 외부 경로에 대한 LSA 를 차단하고 대신 디폴트 루트를 전달하는 것을 Stub Area 라고 합니다. Stub Area 를 설정 하면 1) 라우팅 테이블의 크기를 대폭 감소시켜서 2) 네트워크의 안정성이 확보되며 3) 라우팅 성능도 좋아지고 4) 장애처리가 쉬워집니다.

단, Stub Area 설정에서 고려해야 할 사항은 다음과 같습니다.
– 연결된 2개 이상의 라우터에 설정해야 합니다.
– 백본 Area 의 라우터에는 적용되지 않습니다. (백본에서 축약이 일어날 경우 다른 라우터들이 제대로된 정보를 전달받지 못함)
– Virtual Link 가 적용된 라우터에는 적용되지 않습니다.
– Stub Area 와 Totally Stubby Area 는 ASBR 라우터에 적용할 수 없으며 같은 Area 에 있는 라우터 모두에게 적용 해야 합니다.
– NSSA 와 NSSA Totally Stubby Area 는 백본 라우터를 제외하고 모든 라우터에게 적용되어 축약 됩니다.

Stub Area 의 유형들은 다음과 같습니다.

(1) Stub Area
– OSPF 경로 코드의 O IA (우선순위 : 2) 까지만 허용하며, O E1 (우선순위 : 3), O E2 (우선순위 : 5) 는 차단합니다. (외부와 다른 AS 에서 오는 Advertisement 정보를 막음)
– 외부 네트워크에 대한 LSA 정보가 없기 때문에 경로 선출이 불가능하므로 ABR 이 기본 경로를 대신 알려줍니다.

(2) Totally Stub Area
– O 타입 (우선순위 : 1) 이외에 다른 경로를 모두 차단하며 같은 Area 내에 있는 라우터의 Advertisement 만 라우팅 테이블에 적용합니다. (O IA, O E1, O E2 를 차단)
– Stub Area 와 마찬가지로 외부 네트워크에 대한 LSA 정보가 없기 때문에 경로 선출이 불가능하므로 ABR 이 기본 경로를 대신 알려줍니다.

(3) NSSA (Not-So-Stubby Areas) Stub Area
– Stub Area 에 ASBR 을 포함하여 구성하는 방식입니다.
– 외부 네트워크에 대한 Type-5 의 LSA 가 내부 라우터로 Advertisement 되지 않으므로 Area 내부에 ASBR 이 있을 경우 외부 네트워크 정보가 Type-7 의 LSA 로 Advertisement 될 수 있도록 하는 구성입니다.
– Area 내부에 ASBR 이 있는 경우 Stub Area 혹은 Totally Stub Area 로 구성할 수 없으므로 NSSA Stub Area 를 구성합니다.

(4) NSSA Totally Stub
– NSSA Stub Area 와 Totally Stub 기능을 합친 구성입니다. (O 타입 이외에 다른 경로 모두 차단 + Area 내부의 ASBR 를 통해 외부 네트워크 정보를 Type-7 의 LSA 로 Advertisement 구성)


7. OSPF 가 라우팅 테이블을 만들고 유지하는 과정

(1) OSPF 가 설정된 라우터 간에 Hello 패킷을 주고받아 이웃 (Neighbor) 및 인접 이웃 (Adjacent Neighbor) 관계를 구성합니다. 다른 라우팅 프로토콜과는 달리, 모든 이웃과 라우팅 정보를 교환하는 것은 아니며, 인접 이웃끼리만 라우팅 정보를 교환합니다.
– 멀티캐스트 주소인 224.0.0.6 을 통해 Hello 패킷을 받고 이때 DR 과 BDR 의 주소를 알게 됨

(2) 위에서 언급한 것과 같이 OSPF 에서는 라우팅 정보를 Link State Advertisement (LSA) 라고 합니다. (LSA는 라우터의 인터페이스 상태 및 인접 관계를 형성하는 상태에 관한 정보를 포함하며, 네트워크를 통해 전파됩니다. 도메인에 있는 각 라우터에서 보낸 LSA 의 정보는 라우터의 토폴로지 데이터베이스 (LSD) 를 형성하는데 사용되며, 이 정보로부터 각 목적지까지의 최단 거리를 계산할 수 있습니다.) 
– 자신이 갖고 있는 링크 정보를 LSA (Link-State Advertisement) 에 담아 모든 DR 과 BDR 에 전송합니다.
– 이 때 사용하는 멀티캐스트 주소는 224.0.0.6 이며 이 과정을 LSU (Link State Update)라고 합니다.
– DR 에 LSA 가 도착하면 BDR 은 자신의 타이머를 가동하고 DR 이 이 정보를 다른 OSPF 라우터에게 전달하는 것을 기다립니다.

(3) 각 라우터들은 전송받은 LSA 를 Link State Database (LSD) 에 저장합니다.

(4) LSA 교환이 끝난 후 Shortest Path First (SPF / 다익스트라) 알고리즘을 사용하여 각 목적지까지의 최적 경로를 계산하고 이를 라우팅 테이블에 다시 저장합니다.
– DR 은 이 LSA 정보를 멀티캐스트 주소 224.0.0.5 를 이용해서 다른 모든 OSPF 라우터에게 전송한 후 DR 이 이 정보를 다른 OSPF 라우터들로부터 Ack 을 받아 응답확인 합니다.
– 이 때 타이머가 끝날 때까지 DR 이 LSA 정보를 다른 라우터에게 전달하지 않는다면 BDR 이 DR 이 되고 Hello 패킷을 이용해서 BDR 을 새로 선출하게 됩니다.

(5) 이 후 주기적으로 Hello 패킷을 전송하여 각 라우터가 정상적으로 동작하고 있음을 인접 이웃에게 알립니다.
– OSPF 라우터에서 자신이 갖고 있는 링크가 끊어지면 즉시 그 정보를 DR 에게 알리고 DR 은 그 LSA 정보를 모든 OSPF 라우터에게 전송합니다.

(6) 만약 네트워크의 상태가 변하게 될 경우 위의 과정을 반복하여 다시 라우팅 테이블을 만듭니다.


8. OSPF 라우터가 유지/관리하는 테이블들

위에서 언급한 다양한 OSPF 관련 내용들을 토대로 OSPF 라우터가 유지 및 관리하는 테이블들은 다음과 같습니다.

– Neighbor Table : 모든 인접 라우터들의 리스트 관리
– Link State Database (LSD) : 소속 망에 대한 Topology 관리 (LSA 패킷 들로부터 구축)
– Routing Table : LSD 를 참조 및 이용하여 최적 경로 관리


9. OSPF 패킷 구성 상세

– Version (8 비트) : 현재는 version 2
– Type (8 비트) : 전송되는 메세지의 종류를 다음과 같이 표시
> Type 1 : Hello Packet (이웃 라우터를 발견하고 인접 관계 정보를 유지)
> Type 2 : Database Description Packet (OSPF 라우터간의 LSD 내용을 확인)
> Type 3 : Link State Request Packet (라우터 LSD 의 특정 부분을 요청)
> Type 4 : Link State Update (요청된 LSA 를 이웃 라우터들에게 전송, 업데이트)
> Type 5 : Link State Acknowledgement (다른 패킷 타입들에 대해 응답 확인(Ack))
– Length (16 비트) : OSPF 헤더를 포함한 전체 길이
– Router ID (32 비트)
> OSPF 패킷의 발신지(생성지)가 되는 라우터를 식별하는 ID. 한 AS 내에서의 모든 OSPF 라우터는 32 비트의 유일한 값을 갖도록 함
> 일반적으로 발신지 라우터 IP 주소를 사용. 라우터 자신의 루프백 주소를 주로 사용하며, 루프백 주소가 가용하지 않을 경우 가용한 다른 인터페이스의 주소 중 가장 높은 것을 사용
* RIP, EIGRP, BGP 처럼 거리벡터 라우팅 프로토콜들은 라우팅 정보 전송시에 목적지 네트워크,라우팅 메트릭 값 만을 알려주는 것과 달리, OSPF에서는 목적지 네트워크,라우팅 메트릭 값 이외에도 라우팅 정보를 만든 라우터 및 해당 라우팅 정보를 전송하는 라우터를 알려주므로 라우터 ID가 반드시 필요하게 됨
– Area ID (32 비트) : OSPF 패킷을 생성, 발송하는 라우터가 속한 OSPF Area의 식별 ID
– Checksum (16 비트) – 16 bit CRC. 뒤의 인증 관련 필드들을 제외한 나머지에 대해 체크섬 계산. IP 패킷 체크섬 계산 방식과 유사함
– Authentication type (16 비트)
> 0 : No Authentication, 1 : Simple Password Authentication, 2 : MD5
– Authentication value (64 비트) – 위 Authentication type에 따라 달라짐


10. OSPF 가 적용되는 토폴로지

(1) Broadcast Multiaccess 토폴로지
– 두 개 이상의 라우터가 연결되는 경우로 하나의 메시지를 보내면 이 네트워크 상의 모든 라우터에서 정보를 받는 구조입니다.

(2) 점대점 (Point-to-Point) 토폴로지
– 네트워크 상에 한 쌍의 라우터가 연결되어 있는 구조입니다.

(3) NBMA (Network Broadcast Multiaccess) 토폴로지
– 두 개 이상의 라우터가 연결되어 있지만 Broadcast Multiaccess 와 같은 브로드캐스트 능력은 갖고 있지 않는 구조입니다.


– 출처
> OSPFv1 : RFC1131
> OSPFv2 : RFC1247RFC2328 (Updated)
> OSPFv3 (IPv6) : RFC2740



#Steven

답글 남기기