본문 바로가기
네트워크

OSPF #1

by CBROJIN 2024. 12. 7.

[학습 목표]

1) OSPF 란?

2) OSPF 패킷

3) OSPF 동작방식 및 실습

 

1) OSPF 란?

OSPF(Open Shortest Path First)는  링크 상태 기반 라우팅 프로토콜로 다양한 장점을 제공하며, 특히 대규모 네트워크에서 효율적이다. 가장 많이 사용되는 IGP이다.


링크 상태 기반

네트워크의 상태를 나타내는 링크 상태 데이터를 사용하여 각 라우터가 동일한 네트워크 맵을 갖도록 보장한다.

 

계층적 구조

OSPF는 네트워크를 여러 개의 영역(Area)으로 나눌 수 있으며, 핵심 영역인 Area 0(백본 영역)과 다른 영역들이 계층적으로 연결된다.

 

다익스트라 알고리즘

SPF(Shortest Path First) 알고리즘을 사용해 라우팅 테이블을 계산하며, 네트워크 내의 최단 경로를 효율적으로 찾는다.

 

라우터 간 동기화

모든 OSPF 라우터는 동일한 링크 상태 데이터베이스(LSDB)를 유지하며, 이를 통해 네트워크 전체가 일관된 라우팅 정보를 갖게 된다.

 


2) OSPF 패킷

OSPF 패킷은 라우터 간 라우팅 정보를 교환하고 네트워크 상태를 유지하기 위해 사용되는 데이터 구조다.

OSPF는 총 5가지 패킷 유형을 사용한다.


1. Hello 패킷

인접 라우터를 탐색하고, 네이버 관계를 형성 및 유지하는 데 사용된다.

필드명 설명 기본값 및 범위 중요성
Version Number OSPF 프로토콜의 버전 정보를 나타냅니다. 현재 일반적으로 사용되는 버전은 2입니다. 2 Neighbor 관계 형성 시 동일한 버전을 사용해야 합니다.
Type 패킷의 종류를 나타내며, Hello 패킷의 경우 값은 1입니다. 1 패킷의 종류를 식별하여 적절한 처리를 수행합니다.
Packet Length 패킷의 전체 길이를 바이트 단위로 표시합니다. 패킷의 실제 길이 패킷의 무결성을 확인하는 데 사용됩니다.
Router ID 패킷을 생성한 라우터의 고유 식별자입니다. 라우터의 고유 ID 라우터를 식별하고 Neighbor 관계를 형성하는 데 사용됩니다.
Area ID 패킷이 속한 OSPF 영역을 식별합니다. 라우터가 속한 영역의 ID 동일한 Area ID를 가진 라우터들만 Neighbor 관계를 형성할 수 있습니다.
Checksum 패킷 데이터의 무결성을 확인하기 위한 값입니다. 계산된 체크섬 값 패킷 전송 중 데이터 손상을 감지합니다.
Authentication Type 및 Authentication 인증이 사용될 경우, 인증 방식과 관련 데이터를 포함합니다. 인증 타입 및 데이터 인증이 활성화된 경우, 인증 정보가 일치해야 Neighbor 관계를 형성할 수 있습니다.
Network Mask 패킷을 전송하는 인터페이스의 서브넷 마스크를 나타냅니다. 인터페이스의 서브넷 마스크 값 Neighbor 관계를 형성하려면 동일한 서브넷 마스크를 가져야 합니다.
Hello Interval 라우터가 Hello 패킷을 전송하는 주기를 초 단위로 나타냅니다. 브로드캐스트 및 포인트 투 포인트 네트워크: 10초
NBMA 네트워크: 30초
이 값이 일치해야 Neighbor 관계를 형성할 수 있습니다.
Options 라우터가 지원하는 OSPF 기능을 나타내는 8비트 필드입니다. 8비트 옵션 필드 특정 기능의 지원 여부를 교환하여 호환성을 확인합니다.
Router Priority DR(Designated Router) 및 BDR(Backup Designated Router) 선출 시 사용되는 라우터의 우선순위를 나타냅니다. 0~255 (0이면 DR/BDR 선출에서 제외) 우선순위가 높을수록 DR로 선출될 가능성이 높습니다.
Dead Interval Neighbor의 Hello 패킷이 수신되지 않을 때, 해당 Neighbor가 다운되었다고 간주하기까지의 시간을 초 단위로 나타냅니다. Hello Interval의 4배 (예: 40초 또는 120초) 이 값이 일치해야 Neighbor 관계를 형성할 수 있습니다.
Designated Router (DR) 및 Backup Designated Router (BDR) 해당 네트워크에서 DR과 BDR의 라우터 ID를 나타냅니다. DR 및 BDR의 라우터 ID DR/BDR 정보를 공유하여 네트워크의 효율적인 라우팅을 지원합니다.
Neighbor Router IDs 현재 Neighbor로 인식하고 있는 라우터들의 ID 목록입니다. Neighbor 라우터들의 ID 목록 Neighbor 관계를 형성하고 유지하는 데 사용됩니다.

 

 

2. Database Description Packet(DDP,DBD)

link state database에 저장되 있는 LSA 를  요약한 패킷.

 

3. Link State Request(LSR)

상대 DDP를 보고 나에게 누락된 링크 상태 정보를 요청하는 데 사용된다.

 

4. Link State Update(LSU)

LSR 패킷을 받거나 네트워크 상태가 변하 최신 링크 상태 정보를 전달한다.

 

5. Link State Acknowledgment(LSAck) 

OSPF는 신뢰성을 보장하기 위해 LSU 패킷이 제대로 수신되었는지 확인해야 한다.

확인 응답이 없을 경우 LSU를 재전송 한다.

 

# OSPF 패킷 전송 방식

OSPF는 IPv4에서 224.0.0.5(All OSPF Routers)와 224.0.0.6(All DR/BDR Routers)를 사용한다.

이를 통해 특정 라우터들만 패킷을 수신하도록 효율적으로 설계되었다.


3) OSPF 동작방식 및 실습

OSPF #1 실습 토폴로지

 

OSPF 실습 설정
R1(config)#int lo0
R1(config-if)#ip add 1.1.1.1 255.255.255.255
R1(config-if)#int e0/0
R1(config-if)#ip add 1.1.11.1 255.255.255.0
R1(config-if)#no shut
-------------------------------------------
R1(config)#router ospf 1
R1(config-router)#router-id 1.1.1.1
R1(config-router)#network 1.1.1.1 0.0.0.0 area 123
R1(config-router)#network 1.1.11.0 0.0.0.255 area 123
R2(config)#int lo0
R2(config-if)#ip add 1.1.2.2 255.255.255.255
R2(config-if)#int e0/2
R2(config-if)#ip add 1.1.11.2 255.255.255.0
R2(config-if)#no shut
R2(config-if)#int e1/0
R2(config-if)#ip add 1.1.24.2 255.255.255.0
R2(config-if)#no shut
-------------------------------------------
R2(config)#router ospf 1
R2(config-router)#router-id 1.1.2.2
R2(config-router)#network 1.1.2.2 0.0.0.0 area 0
R2(config-router)#network 1.1.24.2 0.0.0.0 area 0  
R2(config-router)#network 1.1.11.2 0.0.0.0 area 123
R2(config)#int e1/0
R2(config-if)#ip ospf network point-to-point
R3(config)#int lo0
R3(config-if)#ip add 1.1.3.3 255.255.255.255
R3(config-if)#int e0/3
R3(config-if)#ip add 1.1.11.3 255.255.255.0
R3(config-if)#no shut
R3(config-if)#int e1/1
R3(config-if)#ip add 1.1.34.3 255.255.255.0
R3(config-if)#no shut
-------------------------------------------
R3(config)#router ospf 1
R3(config-router)#router-id 1.1.3.3
R3(config-router)#netwrok 1.1.3.3 0.0.0.0 area 0
R3(config-router)#network 1.1.34.3 0.0.0.0 area 0
R3(config-router)#network 1.1.11.3 0.0.0.0 area 123
R3(config)#int e1/1
R3(config-if)#ip ospf network point-to-point
R4(config)#int lo0
R4(config-if)#ip add 1.1.4.4 255.255.255.255
R4(config-if)#int e1/0
R4(config-if)#ip add 1.1.24.4 255.255.255.0
R4(config-if)#no shut
R4(config-if)#int e1/1
R4(config-if)#ip add 1.1.34.4 255.255.255.0
R4(config-if)#no shut
R4(config-if)#int e2/0
R4(config-if)#ip add 1.1.45.4 255.255.255.0
R4(config-if)#no shut
-------------------------------------------
R4(config)#router ospf 1
R4(config-router)#router-id 1.1.4.4
R4(config-router)#network 1.1.24.4 0.0.0.0 area 0
R4(config-router)#network 1.1.34.4 0.0.0.0 area 0
R4(config-router)#network 1.1.4.4 0.0.0.0 area 0
R4(config-router)#network 1.1.45.4 0.0.0.0 area 45
R4(config)#int range e1/0,e1/1,e2/0
R4(config-if-range)#ip ospf network point-to-point
R5(config)#int lo0
R5(config-if)#ip add 1.1.5.5 255.255.255.255
R5(config-if)#int e2/0
R5(config-if)#ip add 1.1.45.5 255.255.255.0
R5(config-if)#no shut
-------------------------------------------
R5(config)#router ospf 1
R5(config-router)#router-id 1.1.5.5
R5(config-router)#network 1.1.5.5 0.0.0.0 area 45
R5(config-router)#network 1.1.45.5 0.0.0.0 area 45
R5(config)#int e2/0
R5(config-if)#ip ospf network point-to-point 
 

1. OSPF Neighbor와 Adjacent Neighbor

 

1-1. Neighbor

OSPF 라우터가 Hello 패킷을 물리적으로 주고받아 서로 존재를 인식한 라우터를 뜻한다. 또, 아래 필드가 일치해야 Neighbor 관계를 맺는다.

Area ID
Authentication Type 및 Authentication Key
Hello Interval/Dead Interval
Subnet Mask
Stub Area Flag
MTU (Maximum Transmission Unit)

 

1-2. Adjacent Neighbor

Neighbor 중에서 LSA(링크 상태 정보)를 교환하며 LSDB(Link State Database)를 동기화하는 관계를 맺는 라우터.

모든 Neighbor가 Adjacent 관계가 되는 것은 아닌데, 서로 DROTHER 이거나 한쪽은 DR/BDR을 선출하는 네트워크 타입(브로드캐스트,논브로드캐스트)인데  반대쪽은 DR/BDR을 선출하지 않는 네트워크 타입(Point-to-Point,Point-to-Multi) 등의 경우를 제외하곤 Adjacent 관계를 맺는다.

 

#

R1#show ip ospf interface e0/0

R1 e0/0 , R2 e0/2 , R3 e0/3은 같은 Area 123이며 ospf 네트워크 타입이 브로드캐스트다.

DROTHER인 R1은 R2(BDR),R3(DR)와 모두 Adjacent neighbor를 맺고 있다.

명령어를 통해 봐보면 Neighbor 2, Adjacent neighbor 2 인 것을 확인해 볼 수있다.(아래그림 참조)

R1 e0/0


2. OSPF Neighbor 상태 변화

 

Down

라우터가 Neighbor를 발견하지 못한 초기 상태.

 

Init

Hello 패킷을 수신했지만, 수신한 Hello 패킷에 자신의 라우터 ID가 포함되지 않은 상태.

상대방 라우터가 나를 아직 Neighbor로 인식하지 않은 경우이다.

 

2-Way

Hello 패킷에 자신의 라우터 ID가 포함되어, 서로를 Neighbor로 인식한 상태.

브로드캐스트 네트워크에서 이 상태에서 DR/BDR 선출이 이루어진다.

 

ExStart

Neighbor 간에 링크 상태 정보 교환을 시작하기 전의 상태.

Master와 Slave 관계를 결정하며, DD(Database Description) 패킷 교환을 준비한다.

 

Exchange

DD 패킷을 주고받으며 LSDB의 요약 정보를 교환하는 상태.

누락된 LSA가 발견되면 Link State Request(LSR)를 통해 요청한다.

 

Loading

필요한 LSA 정보를 요청(LSR)하고, 응답(LSU)을 수신하는 상태.

 

Full

LSDB가 완전히 동기화된 상태로, Neighbor 간에 Adjacent 관계를 형성한다.

 

R4#debug ip ospf adj 
OSPF adjacency debugging is on

adj debug를 활성화하고 R4의 e2/0 인터페이스를 강제로 끊었다 켜보면 확인해볼 수 있다.(아래그림 참조)


3. DR(Designated Router)와 BDR(Backup Designated Router)

 

3-1. DR/BDR의 역할

브로드캐스트 네트워크(예: 이더넷)에서 OSPF 트래픽을 줄이고 효율적으로 관리하기 위해 DR과 BDR이 선출한다. DR은 네트워크에 대한 링크 상태 정보를 다른 라우터에게 전파하는 역할을 하며, 반드시 물리적으로 연결되 있어야 한다. 네트워크 변동이 있을 시 224.0.0.6을 목적지 주소로하여 DR/BDR에게 송신하고 DR은 이것을 동일한 서브넷에 있는 라우터에게 중계한다. BDR은 DR의 백업으로 작동하며, DR에 장애가 발생하면 BDR이 DR 역할을 이어받는다.

 

3-2. DR/BDR 선출 과정

 

Router Priority

가장 높은 우선순위(Priority)를 가진 라우터가 DR로 선출된다. 기본 값은 1이며, 0은 DR/BDR 선출에서 제외된다.

 

Router ID

우선순위가 동일한 경우, 라우터 ID가 높은 라우터가 DR이 된다.

 

DR/BDR의 통신 방식

DR/BDR은 멀티캐스트 주소 224.0.0.5 / 224.0.0.6을 모두 수신하며, DROTHER은 224.0.0.5만 수신한다. DROTHER가 전송하는 업데이트 패킷의 목적지 주소는 224.0.0.6이며 DR은 이를 224.0.0.5 목적지로 하여 동일한 서브넷에 있는 모든 라우터에게 중계한다.

 

#

R1,R2,R3에서 Priority 설정 없이 neighbor를 맺을시 Router ID가 높은순으로 R3(DR),R2(BDR)로 선정된 모습니다.

(아래그림 참조)

 

#

R1(config)#int lo0
R1(config-if)#shut

R1에서 lo0 인터페이스를 죽이고 R3 e0/3에서 ospf 패킷을 캡쳐한 모습이다.

R1에서 업데이트 내용을 목적지주소 224.0.0.6으로 R3(DR)에게 송신하고 

R3는 목적지주소 224.0.0.5로 동일한 서브넷 라우터에 전파하는 모습이다.(아래그림 참조)

R3 e0/3 캡쳐


4. OSPF 메트릭

OSPF는 라우터 인터페이스의 대역폭(Bandwidth) 값을 기반으로 링크의 비용(Cost)을 계산한다.

출발지부터 목적지까지의 각 인터페이스에서 기준대역폭을 실제대역폭으로 나눈 값의 합계이다.

 

4-1. 기본 비용 계산 공식

OSPF에서 기준대역폭은 100,000,000이고 이더넷은 10,000,000 루프백 인터페이스는 8,000,000,000이다.

100,000,000/10,000,000 = 10 

100,000,000/8,000,000,000 = 1(소수점은 다 버린다)

R1 -> R2 루프백 인터페이스 까지 10+1 = 11

R1 -> R4 루프백 인터페이스 까지 10+10+1 = 21 이 된다(아래그림 참조)

R1 OSPF 경로

4-2. 참조 대역폭 설정 변경

OSPF의 기본 참조 대역폭은 100 Mbps이다 그러나 고속 네트워크(1 Gbps, 10 Gbps 등)에서는 비용 계산이 비효율적일 수 있으므로, 이를 적절히 조정할 수 있다. 단위는 Mbps이다.

 

# 예시

R1(config)#router ospf 1

R1(config-router)#auto-cost reference-bandwidth 1000,000,000


 

5. OSPF 네트워크 타입

OSPF 네트워크 타입에는 4가지가 있다.

 

브로드캐스트(Broadcast)

DR/BDR 선출이 필요하며, 모든 라우터가 Hello 패킷을 멀티캐스트(224.0.0.5)로 주고받는다.

헬로/데드 주기 10/40.

예: 이더넷 네트워크.

 

# 헬로/데드 주기가 기본값인 10/40 으로 설정되 있는것을 볼 수 있다.(아래그림 참조)

 

포인트 투 포인트(Point-to-Point)

DR/BDR 선출이 필요 없다.

헬로/데드 주기 10/40.

예: 시리얼 연결.

 

#

R2(config)#int e1/0

R2(config-if)#ip ospf network point-to-point

위 설정을 통해 R2 <-> R4 point-to-point로 연결되 있다.

point-to-poin는 DR/BDR을 선정하지 않는다.(아래그림 참조)

 

포인트 투 멀티포인트(Point-to-Multipoint)

DR/BDR 선출 없이, 모든 라우터가 논리적으로 직접 연결된 것으로 간주된다.

헬로/데드 주기 30/120.

 

Non-Broadcast Multi-Access(NBMA)

DR/BDR 선출이 필요하며, Hello 패킷을 멀티캐스트가 아닌 유니캐스트로 전송한다.

헬로/데드 주기 30/120.

예: Frame Relay.


6. OSPF 경로

OSPF는 경로를 계산할 때 비용(Cost)을 기준으로 최단 경로를 결정한다. 비용은 링크의 대역폭에 따라 달라지며, 최단 경로 알고리즘은 다익스트라(Dijkstra) 알고리즘을 사용한다.

 

6-1. OSPF 경로의 종류

 

Intra-Area(O): 같은 영역(Area) 내에서의 경로.

Inter-Area(O IA): 다른 영역 간의 경로.

External: OSPF 외부(예: EIGRP, BGP)에서 들어오는 경로.

E1 경로(O E1): 내부와 외부 비용을 모두 합산.

E2 경로(O E2): 외부 비용만 사용(기본값).

라우팅 우선순위

OSPF 경로는 여러 라우팅 프로토콜 간에 우선순위(Administrative Distance, AD)가 설정된다.

OSPF의 기본 AD는 110이다.

 

#

R1(config)#int lo1

R1(config-if)#ip add 11.11.11.11 255.255.255.255

R1(config)#router ospf 1

R1(config-router)#redistribute connected metric-type 1 subnets

위 설정을 통해 E1 외부 네트워크를 만들고 R4에서 ospf 라우팅 테이블을 확인해봤다.

area 0에 속해 있는 R2,R3 루프백 인터페이스 등이 O 로 표기 되있고

다른 area에 속해 있는 인터페이스들은 O IA

재분배 받은 외부 네트워크 11.11.11.11은 O E1으로 표기된걸 확인할 수 있다.

(아래그림 참조)