네트워크 인프라 이해하기 · 제3부 · 다른 네트워크와 인터넷으로는 어떻게 나갈까
링크가 끊기면 OSPF는 새 경로를 어떻게 찾아낼까
Hello에서 LSDB 동기화·LSA 플러딩·SPF 재계산까지 이어지는 Link-State 수렴
OSPF 라우터는 이웃을 맺고 Link-State 정보를 교환해 같은 Area의 LSDB가 같은 정보를 갖도록 동기화합니다. 각 라우터는 이 연결 정보를 바탕으로 자신을 출발점으로 SPF를 계산하고, 결과를 RIB와 FIB에 반영합니다. 이 글에서는 Hello부터 Neighbor 상태, LSA 동기화, Area 경계와 장애 진단까지 Route가 만들어지는 순서대로 설명합니다.
OSPF Hello를 서로 받아도 어떤 조건이 맞아야 Neighbor가 될 수 있을까↑
OSPF가 활성화된 인터페이스는 Hello 패킷을 보내고 라우터 ID, Area, Timer 등 Neighbor 형성에 필요한 정보를 교환합니다. 중요한 Parameter가 맞지 않으면 서로의 패킷을 보더라도 정상 Neighbor가 되지 못합니다.
Neighbor를 발견했다고 모든 상대와 반드시 Full Adjacency를 만드는 것은 아닙니다. Broadcast 네트워크에서는 DR과 BDR을 중심으로 데이터베이스를 동기화해 불필요한 Adjacency 수를 줄입니다. 따라서 2-Way 상태가 항상 장애인 것은 아니며 네트워크 Type과 상대 역할을 함께 봐야 합니다.
두 라우터가 Hello를 서로 받아 Neighbor 목록에 올리려면 Area ID, 네트워크 Mask나 네트워크 Type, Hello·Dead Interval, 인증과 Stub 관련 Option 등 필요한 조건이 맞아야 합니다. 불일치 항목은 플랫폼 Log에 드러나기도 하지만 패킷 캡처의 Hello Field를 양쪽에서 비교하면 더 직접적입니다. 라우터 ID는 OSPF 도메인에서 고유해야 하며 중복되면 Neighbor와 LSA 식별이 꼬일 수 있습니다.
Broadcast 네트워크에서 DROther끼리는 서로를 2-Way로 발견해도 Full Adjacency까지 가지 않는 것이 정상입니다. 두 장비가 모두 DR·BDR이 아닌데 2-Way라고 “멈췄다”고 판단하면 불필요한 조치를 하게 됩니다. 반면 Point-to-Point 링크에서는 Full 상태가 기대될 수 있습니다. Neighbor 상태는 네트워크 Type과 상대 역할이라는 문맥 속에서 읽어야 하며, 인터페이스별 기대 상태를 설계 문서에 남겨 두는 편이 좋습니다.
Broadcast 네트워크에서는 DR/BDR 선출 때문에 모든 라우터 쌍이 Full 상태가 될 필요가 없고 일부는 2-Way 상태가 정상입니다. Point-to-Point와 NBMA는 기대 관계가 다릅니다. 따라서 상태 이름만 보고 장애라 판단하지 말고 인터페이스 네트워크 Type, 기대 Neighbor 역할과 양쪽 Hello 내용을 함께 비교합니다.
이 절의 근거 IETF RFC 2328 · IETF RFC 5709
Neighbor가 Full 상태가 되기 전 라우터들은 서로 다른 LSDB를 어떻게 맞출까↑
인접 라우터는 데이터베이스 Description 패킷으로 자신이 가진 LSA의 요약을 비교합니다. 필요한 LSA가 있으면 링크 상태 Request로 요청하고, 링크 상태 Update로 전달받은 뒤 링크 상태 Acknowledgment로 수신을 확인합니다.
이 과정에서 ExStart나 Exchange 상태에 오래 머문다면 단순히 Hello가 막힌 문제와는 다릅니다. 인터페이스 MTU, 라우터 ID 충돌, 네트워크 Type, 인증, 패킷 손실처럼 데이터베이스 교환을 방해하는 조건을 살펴야 합니다. 상태 이름은 장애가 멈춘 단계를 알려 주는 단서입니다.
ExStart에서는 Master·Slave 관계와 DD Sequence를 정하고, Exchange에서는 데이터베이스 Description으로 LSA 헤더 목록을 비교합니다. Loading에서는 부족한 LSA를 Request하고 Update·Acknowledgment로 채웁니다. Full은 해당 Adjacency에서 필요한 데이터베이스 동기화가 끝났다는 뜻입니다. 어느 상태에서 반복되는지 보면 Hello 수신 문제, DD 협상 문제와 특정 LSA 전송 문제를 분리할 수 있습니다.
MTU가 다른 두 라우터가 Hello는 주고받아도 데이터베이스 Description을 처리하지 못해 ExStart·Exchange를 반복하는 사례가 대표적입니다. 인증 불일치나 패킷 손실, 중복 라우터 ID도 유사한 정체를 만들 수 있습니다. 단순히 OSPF Process를 재시작하면 잠시 다시 진행되어 원인을 가릴 수 있습니다. 상태 전환 Log, 인터페이스 MTU와 DD 패킷의 Sequence·Flag를 보존한 뒤 양쪽 설정을 비교해야 합니다.
ExStart/Exchange 반복은 MTU·라우터 ID·패킷 처리 문제를, Loading 정체는 특정 LSA 요청·응답 문제를 의심할 근거가 됩니다. 그러나 원인은 캡처와 Log로 확인해야 합니다. 양쪽 Neighbor 상태 변경 시각, DBD Sequence, MTU, LSR/LSU/LSAck를 연결하면 단순 “Adjacency 불안정”을 정확한 상태 전이 실패로 좁힐 수 있습니다. 재시작 전 마지막 정상 상태도 함께 보존합니다.
이 절의 근거 IETF RFC 2328
도해에서 확인할 내용 Hello Parameter 확인과 Neighbor FSM의 Down부터 Full까지의 상태를 읽습니다. 이어 DBD·LSR·LSU·LSAck 교환과 LSDB 동기화 상자, 각 라우터의 SPF 계산·RIB 선택·FIB 설치 상자를 구분합니다. 이웃 상태와 실제 전달을 위한 로컬 계산은 같은 단계가 아닙니다.
↔ 도해는 좌우로 움직여 볼 수 있습니다.
링크 하나가 끊겼다는 사실은 LSA를 통해 Area 전체에 어떻게 퍼질까↑
라우터와 네트워크의 연결 상태, Prefix, 외부 경로 같은 정보는 목적에 맞는 LSA로 표현됩니다. LSA에는 생성 주체와 Link-State ID, Sequence Number, Age 등이 있어 라우터가 더 새로운 정보를 구분할 수 있습니다.
새 LSA를 받은 라우터는 이웃과 인터페이스의 상태, DR·BDR 역할에 따라 필요한 곳으로 다시 플러딩합니다. 보낸 이웃에게 같은 내용을 되돌리는 것과 수신 인터페이스 전체를 제외하는 것은 다릅니다. 공유 네트워크의 DR은 같은 인터페이스의 다른 이웃에게 다시 전달할 수 있으므로, 캡처에서는 수신 이웃과 인터페이스, DR·BDR 역할을 함께 확인해야 합니다.
라우터가 링크 Down 상태를 감지하면 자신이 생성한 관련 LSA를 더 새로운 Sequence로 갱신해 Adjacency로 플러딩합니다. 이웃은 기존 LSDB Entry와 비교해 새 정보일 때 저장하고 다른 이웃에게 전달합니다. Acknowledgment와 재전송은 손실이 있어도 플러딩 신뢰성을 높입니다. Distance-Vector 방식은 목적지까지의 거리와 경로 정보를 이웃에게 광고하고, 이웃은 이를 바탕으로 자신의 Route를 계산합니다. OSPF는 이웃이 계산한 경로를 그대로 받는 대신, 각 라우터가 경로를 계산할 수 있도록 링크 상태 정보를 배포합니다.
LSA의 플러딩 Scope는 Type과 Area 경계에 따라 다릅니다. 모든 LSA가 AS 전체에 동일하게 퍼지는 것은 아니며 ABR·ASBR이 다른 형태의 정보를 생성할 수 있습니다. Age와 Sequence는 오래된 사실이 새 사실을 덮지 않게 합니다. 장애 때 라우팅 테이블만 비교하지 말고 문제 링크를 나타내는 LSA의 Advertising 라우터, Sequence와 Age를 각 LSDB에서 비교하면 정보 생성·플러딩 단계의 차이를 찾을 수 있습니다.
LSA에는 Type, Link-State ID, Advertising 라우터, Sequence, Age와 Checksum이 있어 같은 항목의 신구를 판별합니다. 모든 LSA가 모든 Area와 외부로 무제한 전파되는 것은 아니며 Type과 Area 종류에 따라 범위가 다릅니다. 장애 시에는 Prefix만 검색하지 말고 어느 LSA를 누가 생성했으며 현재 라우터 LSDB에서 어떤 Sequence·Age로 보이는지 비교합니다.
이 절의 근거 IETF RFC 2328
같은 LSDB를 받은 라우터마다 자신을 출발점으로 새 경로를 계산한다↑
LSDB가 바뀌면 라우터는 자신을 Root로 Shortest Path First 계산을 수행합니다. 링크 Cost를 더해 목적지까지의 최단 트리를 만들고, 그 결과에서 Next Hop과 출력 인터페이스를 도출합니다. 계산 결과가 라우팅 정책과 설치 조건을 통과하면 RIB에 들어가고 FIB에 반영됩니다.
LSA를 받은 시각, SPF Scheduling, CPU 부하, FIB Programming 시간 때문에 Control Plane Convergence와 실제 패킷 전달 전환 사이에는 간격이 생길 수 있습니다. 장애 감지 시간만 줄인다고 End-to-End 중단 시간이 같은 비율로 줄어드는 것은 아닙니다.
같은 LSDB를 가진 라우터라도 자신을 트리의 Root로 두므로 각 목적지의 Next Hop은 위치에 따라 다릅니다. 라우터 A는 링크 Cost 합이 20인 경로를, 라우터 B는 같은 목적지까지 다른 이웃을 선택할 수 있습니다. SPF 결과는 Prefix를 Route 후보로 만들고, 다른 프로토콜 Route와 RIB 선택을 거쳐 FIB에 설치됩니다. LSDB 동일성이 모든 라우터의 라우팅 테이블 한 줄까지 같다는 뜻은 아닙니다.
링크 변화가 퍼지는 동안 라우터마다 LSA 수신·SPF 실행·FIB Programming 시각이 조금씩 다르면 짧은 Microloop나 Blackhole이 생길 수 있습니다. SPF Throttle, LSA Pacing과 Fast Reroute 같은 기능은 이 시간을 조절하지만 기본값과 효과는 구현별입니다. Convergence를 측정할 때 Neighbor 상실 시각 하나만 보지 말고 새 LSA 생성, 원격 수신, SPF 완료, FIB 변경과 End-to-End 패킷 복구를 나눠야 합니다.
LSDB에 Prefix가 있다는 사실은 RIB 설치를 보장하지 않습니다. 더 선호하는 Static/Connected Route가 있거나, 재귀 Next Hop이 해석되지 않거나, 다른 OSPF Path가 선택될 수 있습니다. SPF 실행 시각과 결과, RIB 경쟁 Route, FIB와 Adjacency를 이어 보아 토폴로지 인식과 실제 전달의 차이를 확인합니다. 동일 비용 경로가 몇 개까지 설치되는지도 설정값과 대조합니다.
이 절의 근거 IETF RFC 2328
Area를 나누면 토폴로지 변화와 LSDB의 범위를 어디까지 줄일 수 있을까↑
같은 Area 안에서는 Link-State 정보가 공유되지만, Area Border 라우터는 다른 Area의 상세 토폴로지를 그대로 복제하기보다 요약 정보를 전달할 수 있습니다. Backbone Area 0은 다른 Area를 연결하는 중심 역할을 합니다.
Area를 많이 나눈다고 언제나 Convergence가 빨라지는 것은 아닙니다. ABR 위치, Summary 경계, Redundancy, 외부 경로 유입 지점을 함께 설계해야 합니다. Stub 계열 Area처럼 허용하는 LSA 범위를 줄이는 기능도 구현과 Area 유형에 따라 동작이 다릅니다.
Area 내부 라우터는 그 Area의 상세 토폴로지를 공유하고, ABR은 다른 Area에 Summary 정보를 알립니다. Branch의 한 Access 링크 변화가 다른 Area의 모든 라우터에 동일한 상세 LSA로 퍼지지 않게 범위를 나눌 수 있습니다. 그러나 ABR이 모든 Area를 연결하는 설계나 불안정한 Summary는 새로운 병목과 잘못된 Route를 만들 수 있습니다. Area 수보다 경계 위치와 이중화가 중요합니다.
Stub, Totally Stubby 같은 Vendor 용어, NSSA는 외부 LSA 수용 방식과 Default Route 제공 조건이 다릅니다. Area Type이 이웃끼리 맞지 않으면 Adjacency가 형성되지 않거나 기대한 외부 Route가 보이지 않을 수 있습니다. Summary는 Child Prefix 일부가 사라져도 남을 수 있으므로 Discard Route와 Partial 장애 동작을 시험합니다. Area 설계는 LSDB 크기만 줄이는 작업이 아니라 경로 가시성과 장애 전파 범위를 정하는 작업입니다.
OSPF의 Area 간 라우팅은 논리적으로 연속된 Area 0을 중심으로 구성합니다. 물리적으로 떨어진 백본 구간을 연결해야 할 때는 조건에 맞는 가상 링크를 사용할 수 있습니다. 이때 실제 전달 경로에는 비백본 영역의 링크가 포함될 수 있으므로 “모든 패킷이 물리적인 Area 0 링크만 지난다”는 뜻으로 읽어서는 안 됩니다. ABR의 용량·이중화, LSA 종류와 전파 범위, 필요한 상세 경로와 기본 경로를 함께 검토해 영역 경계를 정합니다.
이 절의 근거 IETF RFC 2328 · IETF RFC 5340
도해에서 확인할 내용 Area 1·Area 0·External Domain 상자를 따라가며 ABR의 Type 3 요약과 ASBR의 Type 5 외부 LSA를 구분합니다. Multi-Area 구조에서 Type 1·2의 영역 내부 전파와 영역 사이의 전파 Scope를 비교합니다.
↔ 도해는 좌우로 움직여 볼 수 있습니다.
OSPF Route가 사라졌다면 Neighbor에서 시작해 LSDB·RIB·FIB 순으로 확인한다↑
상황: 링크 장애 뒤 일부 라우터만 새 경로를 선택하고 다른 라우터는 이전 경로를 유지합니다.
- 문제 Area와 인터페이스에서 Neighbor 상태, 라우터 ID, DR·BDR 역할을 기록합니다.
- Hello·Dead Timer, Area ID, 인증, 네트워크 Type, MTU가 양쪽에서 일치하는지 확인합니다.
- 변화를 나타내는 LSA의 Advertising 라우터, Sequence Number, Age가 각 라우터의 LSDB에 반영되었는지 비교합니다.
- SPF 실행 시각과 계산 결과, 선택된 OSPF Route의 Cost와 Next Hop을 봅니다.
- RIB에는 있는데 FIB에 없는지, 다른 경로 출처나 정책이 같은 Prefix를 이겼는지 확인합니다.
- 패킷 캡처와 장비 Log의 시각을 맞춰 감지·플러딩·계산·설치에 걸린 시간을 분리합니다.
두 라우터의 Neighbor 상태가 Full인지 확인한 뒤 바로 Route 존재 여부로 건너뛰지 않습니다. 문제 Prefix를 만든 LSA가 Source 라우터 LSDB에 있는지, 이웃과 원격 라우터에 같은 Sequence로 플러딩되었는지 비교합니다. 그다음 각 라우터의 SPF 결과와 OSPF RIB Candidate, Global RIB, FIB를 순서대로 봅니다. 이 층별 비교가 Adjacency, 플러딩, 계산, Route 선택과 설치 문제를 나눕니다.
장애 재현에서는 인터페이스 Down 또는 Cost 변경 시각을 기준점으로 삼아 패킷 캡처와 Log Clock을 맞춥니다. 기존보다 더 선호되는 Static·BGP Route가 OSPF 후보를 이기거나, Next Hop ARP가 해결되지 않아 FIB가 막힐 수도 있습니다. 수정 뒤 Neighbor만 Full 상태가 된 것으로 끝내지 말고 문제 Prefix의 실제 전달과 Return Path를 시험합니다. 원복 후 LSA와 Route가 불필요하게 남지 않았는지도 확인합니다.
이 순서면 Neighbor 미형성, 데이터베이스 불일치, LSA 미생성, SPF/RIB 탈락과 Data Plane 문제를 서로 다른 단계로 설명할 수 있습니다. 조사 자료에는 모든 라우터의 시각을 맞춰 LSA 플러딩과 Route 변화의 선후를 보존합니다.
이 절의 근거 IETF RFC 2328
FAQ↑
Neighbor가 2-Way면 반드시 장애인가요?
용어사전↑
출처와 검증
- IETF RFC 2328 — OSPF Version 2의 패킷, LSA, Area와 SPF 동작
- IETF RFC 5340 — IPv6용 OSPF Version 3
- IETF RFC 5709 — OSPFv2 HMAC-SHA 인증 확장
OSPF Timer, LSA Throttling, SPF Scheduling, ECMP 수와 FIB 반영 방식은 플랫폼과 설정에 따라 달라집니다. 본문은 RFC 2328의 상태와 패킷 교환을 중심으로 설명합니다.