- Published on
OSPF
OSPF (Open Shortest Path First)
Link State 알고리즘을 사용하는 대표적인 IGP 라우팅 프로토콜이다. 클래스리스 라우팅이므로 VLSM과 CIDR 환경에 적합하다.
- 프로토콜 번호: 89 (IP 위에서 직접 동작)
- 신뢰도(AD): 110
- 메트릭: Cost (대역폭 기반)
- 자동 요약 없음: 서브넷 경계에서 자동 요약을 하지 않으므로
no auto-summary명령어가 따로 제공되지 않는다. - 동작 과정: Hello → LSA Flooding → LSDB → SPF (자세한 흐름은 Link State 문서 참고)
특징
- 표준 프로토콜: 벤더 독립적이며 가장 널리 쓰이는 IGP
- 빠른 수렴: 트리거 기반 LSA 광고 + SPF 재계산
- 계층 구조 지원: Area 분할로 대규모 네트워크에서도 확장성 확보
- 인증 지원: Plain Text 또는 MD5 인증으로 LSDB 오염 방지
- 자원 부담: LSDB 저장 + SPF 계산이 필요해 Distance Vector보다 CPU/메모리 부담이 큼
주요 개념
Router ID
OSPF 라우터를 구분하는 식별값으로, 인터페이스에 설정된 IP 주소를 그대로 사용한다. 단, 해당 인터페이스는 L1, L2가 모두 정상(up/up)인 상태여야 한다.
- 첫 번째
up(line up): L1(케이블·전기 신호)이 살아 있음 - 두 번째
up(line protocol up): L2 인캡슐레이션이 정상 동작 중
둘 중 하나라도 down이면(예: 케이블 분리, 시리얼 keepalive 실패) 해당 인터페이스의 IP는 Router ID 후보에서 제외된다.
운영 환경에서는 Loopback에 고정 IP를 두고 그것을 Router ID로 쓰는 것이 표준이다. Loopback은 가상 인터페이스라 물리 상태나 L2 프로토콜과 무관하게 항상 up/up을 유지하기 때문이다. 반대로 물리 인터페이스를 Router ID로 쓰면 해당 인터페이스가 다운되는 순간 Router ID가 바뀌어 Adjacency가 끊길 수 있다.
Area — 계층형 설계
OSPF는 네트워크 전체를 하나의 LSDB로 묶지 않고 Area 단위로 분할한다. 규모가 커질수록 LSDB와 SPF 계산 비용이 급격히 늘어나기 때문이다.
| 구분 | 역할 |
|---|---|
| Backbone (Area 0) | 모든 Area는 반드시 Backbone과 직접 연결되어야 LSA를 광고할 수 있다. 직접 연결이 불가능하면 Virtual-Link를 구성한다. |
| ABR (Area Border Router) | Area 0과 다른 Area에 동시에 속하는 라우터. 한 Area의 네트워크 정보를 Type 3 (Summary) LSA로 변환해 다른 Area에 광고한다. |
| ASBR (AS Boundary Router) | OSPF 외부 도메인(BGP, 다른 IGP, static 등)에서 학습한 경로를 OSPF """"""""""AS""""""""로 재분배(redistribute)하여 Type 5 (External) LSA로 광고하는 라우터 |
| Internal Router | Area 내부에서만 동작하는 일반 OSPF 라우터 |
DR / BDR — 멀티 액세스에서의 효율화
이더넷처럼 한 세그먼트에 여러 라우터가 붙는 멀티 액세스(Broadcast/NBMA) 네트워크에서, 모든 라우터가 서로 Full Adjacency를 맺으면 LSA 교환 쌍이 N×(N−1)/2개로 급격히 늘어난다..
이를 줄이기 위해 OSPF는 세그먼트마다 대표 라우터(DR)를 선출한다. 다른 라우터들은 DR하고만 Full Adjacency를 맺어 DR에게만 LSA를 보내고, DR이 모든 라우터에 대신 광고하는 구조다.
- DR (Designated Router): LSA 교환을 대표하는 라우터
- BDR (Backup DR): DR 장애에 대비한 예비 라우터
- DROTHER: DR/BDR이 아닌 라우터
선출 기준: ① OSPF Priority가 높은 라우터 (기본 1, 0이면 후보 제외) → ② Router ID가 높은 라우터
- Point-to-Point 링크에서는 선출하지 않는다. (라우터가 둘뿐이라 의미 없음)
Metric — Cost
링크의 대역폭으로 결정되며, 공식은 다음과 같다.
Cost = Reference Bandwidth (기본 100 Mbps) / 인터페이스 대역폭
| 인터페이스 대역폭 | Cost |
|---|---|
| 10 Mbps | 10 |
| 100 Mbps | 1 |
| 1 Gbps (= 1000 Mbps) | 1 (실제 0.1이지만 1로 처리) |
| 10 Gbps | 1 (실제 0.01이지만 1로 처리) |
1보다 작은 Cost는 일괄 1로 처리되므로, 고속 환경에서는 auto-cost reference-bandwidth 값을 올려 Cost가 구분되도록 해야 한다.
Loopback의 라우팅 업데이트
OSPF는 Loopback를 a stub host로 간주하여, IP 1개짜리 서브넷으로 처리하기 때문에 라우팅 업데이트시 서브넷 바스크를 /32로 업데이트한다.
원래의 서브넷 마스크로 라우팅 업데이트가 되도록 하려면 OSPF 네트워크 타입을 point-to-point로 변경한다.
Neighbor States
두 라우터가 Full Adjacency에 도달하기까지 거치는 7단계는 다음과 같다.
Down → Init → 2-Way → ExStart → Exchange → Loading → Full
크게 두 흐름으로 나눌 수 있다.
- 네이버 관계 수립 (Down → Init → 2-Way): Hello 패킷을 주고받으며 정식 네이버 관계를 맺는 단계
- Full Adjacency 형성 (ExStart → Exchange → Loading → Full): LSDB를 동기화해 완전한 인접(Full Adjacency)에 도달하는 단계
네이버 관계 수립
| 상태 | 설명 |
|---|---|
| Down | Hello 패킷을 전송했지만 상대로부터 아직 Hello 패킷을 받지 못한 초기 상태 |
| Attempt | Non-broadcast 환경에서만 적용. 유니캐스트로 Hello를 보냈지만 응답이 없는 상태 |
| Init | 상대의 Hello 패킷은 받았지만, 그 안에 자신의 Router ID가 아직 들어있지 않은 상태 (= 상대가 내 Hello를 받지 못함) |
| 2-Way | 서로의 Hello에서 자신의 Router ID를 확인 → 정식 네이버. 양방향 통신이 가능해진 상태이며, 멀티액세스 환경에서는 Wait Timer 동안 DR/BDR을 선출 |
멀티액세스(Multi-access)는 Broadcast(이더넷)와 NBMA(Non-Broadcast Multi-Access, 예: Frame Relay)를 모두 포괄하는 용어이다.
Full Adjacency 형성
| 상태 | 설명 |
|---|---|
| ExStart | LSDB 동기화를 시작하기 위한 첫 단계. 두 라우터 중 누가 먼저 DBD를 보낼지(Master/Slave) 결정 |
| Exchange | DBD(DB Description) 패킷으로 LSDB 요약을 교환. 자신에게 없거나 더 최신(시퀀스 번호가 큰) LSA가 있으면 Link State Request List에 기록 |
| Loading | LSR로 부족한 LSA를 요청하고 LSU로 받아서 LSDB를 동기화 |
| Full | LSDB가 완전히 같아진 상태. 라우팅 업데이트가 완료된 정상 운영 단계 |
네이버 성립 조건
인접 라우터와 Adjacency를 맺으려면 다음 조건이 모두 일치해야 한다.
- 같은 세그먼트의 서브넷은 동일한 Area에 속해야 한다.
- 같은 세그먼트의 인터페이스는 Hello 주기와 Hold(Dead) 주기가 동일해야 한다.
- 같은 세그먼트의 인터페이스는 MTU 사이즈가 동일해야 한다.
- OSPF 인증 구현시 인증 키/패스워드가 동일해야 한다.
- 인접 라우터끼리 Router ID가 중복되지 않아야 한다.
- Stub Area 구간의 라우터들은 모두 Stub 설정이 되어 있어야 한다.
테이블 유형
OSPF 라우터는 다음 3가지 테이블을 유지한다.
1. Neighbor Table
인접 라우터와의 Adjacency 상태를 추적하는 테이블이며, 인터페이스별로 관리된다.
- 필드: 네이버 Router ID, Priority, 상태(Down/Init/.../Full), Dead Time, IP 주소, 인터페이스
- Hello 패킷 수신으로 갱신되며, Dead Interval 동안 Hello가 끊기면 해당 항목을 삭제한다.
- 명령어:
show ip ospf neighbor
2. LSDB (Link State Database)
Area 내 모든 LSA를 모아둔 데이터베이스. SPF 알고리즘의 입력값이 된다.
- 같은 Area에 속한 라우터들은 LSDB가 완전히 동일해야 정상 동작한다.
- LSA가 타입별(Router / Network / Summary / External 등)로 분류되어 저장된다.
- 라우터가 여러 Area에 속하면 Area별로 별도의 LSDB를 가진다(ABR이 대표적).
- 명령어:
show ip ospf database
3. Routing Table
LSDB를 기반으로 SPF가 계산한 최적 경로가 등록되는 테이블. 실제 패킷 포워딩에 사용된다.
- 필드: 목적지 네트워크 / next-hop / Cost / 발신 인터페이스 등
- 항목 앞 코드로 OSPF 경로 출처를 구분:
O(Intra-area),O IA(Inter-area),O E1·O E2(External) - 명령어:
show ip route ospf
경로 유형
라우팅 테이블의 OSPF 항목은 경로의 출처(같은 Area / 다른 Area / OSPF 외부)에 따라 코드가 달라지고, 학습 경로(LSA 타입)와 Cost 계산 방식도 달라진다.
| 코드 | 이름 | 출처 LSA | Cost 계산 |
|---|---|---|---|
O | Intra-area (같은 Area 내부) | Type 1, 2 | 본인 → 목적지까지의 누적 OSPF Cost |
O IA | Inter-area (다른 Area) | Type 3 | 본인 → ABR → 목적지까지 누적 Cost |
O E1 | External Type 1 | Type 5 | 외부 메트릭 + ASBR까지 내부 Cost (누적) |
O E2 | External Type 2 | Type 5 | 외부 메트릭만 (기본값, 내부 Cost 미반영) |
O N1 | NSSA External 1 | Type 7 | E1과 동일, NSSA 내부에서만 유효 |
O N2 | NSSA External 2 | Type 7 | E2와 동일, NSSA 내부에서만 유효 |
우선순위
같은 prefix를 여러 경로 유형으로 학습한 경우, OSPF는 다음 순서로 우선순위를 가진다.
Intra-area (O) > Inter-area (O IA) > Type 1 External (O E1, O N1) > Type 2 External (O E2, O N2)
- 내부 > 외부: 외부 메트릭이 아무리 작아도, 내부 경로가 있으면 그게 먼저 선출된다.
- E1 > E2: 같은 prefix를 E1과 E2로 동시에 학습했다면, Cost와 무관하게 항상 E1이 우선이다. E1은 ASBR까지의 내부 Cost까지 반영하는 "더 정확한 비용 정보"로 취급되기 때문이다.
패킷 타입
OSPF는 다음 5종류의 패킷으로 동작한다.
| 타입 | 이름 | 역할 |
|---|---|---|
| 1 | Hello | 네이버 성립 및 유지 |
| 2 | DBD (Database Description) | LSDB 요약본 교환 |
| 3 | LSR (Link State Request) | 누락된 LSA 요청 |
| 4 | LSU (Link State Update) | 실제 LSA 전달 |
| 5 | LSAck | DBD/LSU 수신 확인 |