본문 바로가기

네트워크

[네트워크] 34. OSPF(Open Shortest Path First)

이 게시물은 킹 오브 네트워킹 (피터전)을 공부한 내용을 바탕으로 작성됨.


OSPF (Open Shortest Path First)

 

OSPF는 Link state 라우팅 프로토콜으로, 다른 라우터들에게 전체 네트워크 구성을 파악하기 위해 필요한 정보들을 광고한다. Distance vector 라우팅과는 다르게 단순히 최적경로만 찾는 것이 아니라, 말 그대로 네트워크에 존재하는 link들의 상태를 서로 교환하고 최종적으로 전체 네트워크 구성을 파악하는 것이 목표이다.

 

또한, 여기서는 distance vector 라우팅에서 사용되는 Split horizon(looping 방지)이나 자동축약은 불가능하다. 현재 사용되는 OSPF는 ver2이며, RFC 2328에 표준으로 규정되어 있다. OSPF는 IP packet에서 protocol number 89번을 사용하여 라우팅 정보를 전송한다.

 

그리고 Area 단위로 라우팅을 수행한다. 적절한 설정을 통해 특정 area에서 발생하는 네트워크 변화를 다른 area로 전파되지 않게 할 수도 있어 큰 규모의 네트워크를 안정성있게 운영할 수 있다.  

 

 

 

 

 

위 네트워크를 구성한 후 R1의 라우팅 테이블을 확인해본다.

 

 

R1#show ip route

Gateway of last resort is not set

     1.0.0.0/8 is variably subnetted, 4 subnets, 2 masks
C       1.1.10.0/24 is directly connected, GigabitEthernet0/1
L       1.1.10.1/32 is directly connected, GigabitEthernet0/1
C       1.1.123.0/24 is directly connected, GigabitEthernet0/0
L       1.1.123.1/32 is directly connected, GigabitEthernet0/0

 

R1과 직접 연결된 두 네트워크 1.1.10.0/24와 1.1.123.0/24가 테이블에 저장되어있다.

 

 

 

 

 

 

 

OSPF가 동작하는 라우터의 각 interface는 하나의 area에 소속된다. 이 실습에서는 위 그림처럼 area를 구성해보자.

 

 

 

① R1(config)#router ospf 1
② R1(config-router)#router-id 1.1.1.1
③ R1(config-router)#network 1.1.10.1 0.0.0.0 area 0
  R1(config-router)#network 1.1.123.1 0.0.0.0 area 0

 

 

  1. router ospf 명령어를 이용하여 OSPF config 모드로 진입한다. 이때 뒤에 오는 숫자는 Process ID라고 부르며, 1~65535 사이의 아무 숫자나 사용해도 된다. Process ID는 동일한 라우터에서 여러 개의 OSPF process를 실행할 때 서로 구분하기 위한 목적이다. 따라서 서로 다른 라우터에서는 서로 다른 값을 가져도 상관 없다.
  2. 라우터 ID를 지정해준다. OSPF와 같은 link state 라우팅 프로토콜들은 metric 값에 더불어 해당 라우팅 정보를 만든 라우터와, 그 라우팅 정보를 전송하고 있는 라우터가 어느 것인지도 알려주는데, 이때 사용하는 것이 라우터 ID이다. 따로 지정하지 않아도 자동으로 ID가 생성되지만, 라우터의 loopback 주소로 설정하는 것이 안전하다. 또한 라우터에 설정되어 있지 않은 주소를 ID로 설정해도 상관없다. (이 예제에서도 이미 그랬다.) 
  3.  network 명령어를 이용하여 OSPF에 포함시킬 interface 주소, wildcard, area number를 지정한다. area를 하나 사용할 때는 area number를 아무 숫자로 설정해도 괜찮지만, 복수 개의 arae를 사용할 때는 그 중 하나는 반드시 area number를 0 또는 0.0.0.0으로 설정해야 하며, 이렇게 설정된 area를 backbone area라고 한다. 그리고 다른 aera들은 항상 그 backbone area와 물리적으로 직접 연결되어야 한다.

 

 

 

<R2>
R2(config)#router ospf 1
R2(config-router)#router-id 1.1.2.2
R2(config-router)#network 1.1.123.2 0.0.0.0 area 0
R2(config-router)#network 1.1.24.2 0.0.0.0 area 1


<R3>
R3(config)#router ospf 1
R3(config-router)#router-id 1.1.3.3
R3(config-router)#network 1.1.123.3 0.0.0.0 area 0
R3(config-router)#network 1.1.34.3 0.0.0.0 area 1


<R4>
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 1
R4(config-router)#network 1.1.34.4 0.0.0.0 area 1
R4(config-router)#network 1.1.40.4 0.0.0.0 area 1

 

 

 

 

OSPF와 area설정을 마친 후 R1의 라우팅 테이블을 확인하면 다음과 같다.

 

R1#show ip route

Gateway of last resort is not set

     1.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
C       1.1.10.0/24 is directly connected, GigabitEthernet0/1
L       1.1.10.1/32 is directly connected, GigabitEthernet0/1
O IA    1.1.24.0/24 [110/2] via 1.1.123.2, 00:03:22, GigabitEthernet0/0
O IA    1.1.34.0/24 [110/65] via 1.1.123.3, 00:00:51, GigabitEthernet0/0
O IA    1.1.40.0/24 [110/3] via 1.1.123.2, 00:00:36, GigabitEthernet0/0
C       1.1.123.0/24 is directly connected, GigabitEthernet0/0
L       1.1.123.1/32 is directly connected, GigabitEthernet0/0

 

 

OSPF를 통하여 받은 라우팅 정보 중, R1의 해당 interface와 다른 area에 속한 network 앞에는 'O IA'라는 기호가 표시된다. (R1은 area 0에 속하고, 1.1.24.0/0, 1.1.34.0/24, 1.1.40.0/24는 area 1에 속한다.)

 

 

 

 

R2#show ip route

Gateway of last resort is not set

     1.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
O       1.1.10.0/24 [110/2] via 1.1.123.1, 00:07:07, GigabitEthernet0/0
C       1.1.24.0/24 is directly connected, GigabitEthernet0/1
L       1.1.24.2/32 is directly connected, GigabitEthernet0/1
O IA    1.1.34.0/24 [110/65] via 1.1.123.3, 00:04:40, GigabitEthernet0/0
                    [110/65] via 1.1.24.4, 00:04:25, GigabitEthernet0/1
O       1.1.40.0/24 [110/2] via 1.1.24.4, 00:04:25, GigabitEthernet0/1
C       1.1.123.0/24 is directly connected, GigabitEthernet0/0
L       1.1.123.2/32 is directly connected, GigabitEthernet0/0

 

 

이번에는 R2의 라우팅 테이블이다. 라우터의 interface와 동일한 area에 속한 network의 정보는 'O'라는 기호로 표시된다.

 

 

 

R1#ping 1.1.40.4

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.40.4, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/1/6 ms

 

area 0에 속한 R1에서 area 1에 속한 맨 오른쪽 끝 network인 1.1.40.4에 ping을 때려보았다. 잘 된다.

 

 

 

 


 

OSPF neighbor

 

앞전 게시글에서 배운 EIGRP처럼 OSPF도 neighbor 개념이 존재한다. 따라서 OSPF 역시 hellp packet을 인근 라우터에게 전송하여 이웃을 맺는다. OSPF의 hello packet은 network 종류에 따라 10~30초마다 전송된다. 만약 연속해서 4개의 hello packet을 전송받지 못하면 이웃을 끊으며, 이 timer를 dead interval이라고 한다.

 

OSPF가 작동하는 라우터는 인접한 라우터로부터 hello packet을 수신하고, 그것에 포함된 neighbor list에 자신의 라우터 ID가 포함되어 있으면 해당 라우터와 이웃을 맺는다. 이때 hello packet에 기록된 area ID, password, subnet mask length, hello/dead 주기, stub area가 전부 서로 동일해야 한다.

 

 

 

R2#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
1.1.1.1           1   FULL/DR         00:00:34    1.1.123.1       GigabitEthernet0/0
1.1.3.3           1   FULL/DROTHER    00:00:30    1.1.123.3       GigabitEthernet0/0
1.1.4.4           1   FULL/BDR        00:00:32    1.1.24.4        GigabitEthernet0/1

 

 

  • Neighbor ID ➝ 이웃의 라우터 ID
  • Pri ➝ 이웃의 OSPF 우선순위 (나중에 설명)
  • State ➝ Full : 이웃과 라우팅 정보 교환이 완료됨 / 이더넷에 접속된 모든 OSPF 라우터끼리 서로 라우팅 정보를 교환하면 트래픽량이 어마어마하므로 이더넷에서 OSPF는 라우팅 정보를 대표 라우터 하나에게만 전송하고, 이 라우터가 나머지 라우터에게 중계한다. 이때 중계하는 라우터를 DR(Designated Router)이라 하고, DR에 장애가 발생했을 시 DR의 역할을 대신하는 라우터를 BDR(Backup DR)이라고 한다. DR, BDR도 아닌 나머지 라우터를 DROTHER 라우터라고 한다.

 

Interface의 Priority가 가장 높은 라우터가 DR이 되며, 우선순위가 서로 동일하면 Router ID 값이 가장 높은것이 DR, 그 다음것이 BDR이 된다. (이 예제에서는 왜 DR, BDR이 저렇게 설정되었는지 잘 이해가 안 됨)

 

 

 


 

 

OSPF neighbor 상태의 변화

 

OSPF가 설정된 인터페이스에서 neighbor의 상태는 neighbor가 없는 down 상태에서 시작하여 neighbor와 라우팅 정보교환을 끝마친 full 상태로 마무리한다. OSPF의 neighbor 상태변화 단계를 자세히 살펴보도록 하자.

 

  • Down ➪ Negihbor로부터 Hello packet을 받지 못한 상태
  • Init ➪ 상태 라우터로부터 Hello packet을 받았지만, 상대는 나의 Hello packet을 아직 받지 못한 상태. 이때 상대가 나에게 보낸 Hello packet의 Neighbor list에는 내 라우터 ID가 존재하지 않는다.
  • two way ➪ Neighbor와 양방향 통신이 이루어진 상태. 즉, 상대 라우터가 보낸 hello packet의 neighbor list에 내 라우터의 ID가 포함되어 있는 상태이다. 만약 이더넷 등의 multi access network라면 DR, BDR을 선출한다. 
  • exstart ➪ 라우팅 정보를 교환하는 adjacent neighbor가 되는 첫 단계이다. master router와 slave router를 선출한다.
  • exchange ➪ OSPF 라우팅 정보를 LSA(Link State Advertisement)라고 하는데, LSA를 저장하는 장소를 Link state database라고 한다. 여기에는 OSPF 라우터 자신이 알고있는 모든 상세 network 정보가 포함되어 있다. exchange 상태에서는 LSA의 header만을 DDP(Database Description Packet) 또는 DBD(DataBase Description)이라고 부르는 패킷에 담아 상대 라우터에 전송한다.
  • loading ➪ 상대로부터 DDP 패킷 수신이 끝난 후, 만약 자신에게 없는 정보가 있으면 링크 상태 요청 패킷을 전송하여 특정 LSA의 상세 정보를 보내줄 것을 요청하고 그것을 수신하는 단계이다.
  • full ➪ adjacent neighbor 간 라우팅 정보교환이 끝난 상태이다. 이 상태에 도달했으면 adjacent neighbor 간 Link state database 내용이 모두 일치한다.

 

OSPF는 neighbor router와 라우팅 정보(LSA) 교환을 끝낸 후 5초 기다린 다음 라우팅 알고리즘을 계산하고 그 최종 결과를 라우팅 테이블에 기록한다. 이때 OSPF가 최적 경로 계산을 위해 사용하는 알고리즘을 SPF(Shortest Path First) 혹은 다익스트라 알고리즘이라고 한다.

 

 

 

 


 

OSPF Metric

 

OSPF의 metric은 cost라고 부르는데, 출발지부터 목적지까지 각 interface의 기준 대역폭(reference BW)을 실제 BW로 나눈 값의 합계로 얻어진다. Cisco IOS의 OSPF 기준 대역폭은 $10^8$이다.

 

 

위 예시에서 R1➜R3➜1.1.40.4로 향하는 cost를 구해보자. 3개의 BW에 대해서 각각 cost는 $10^8/10^8=1$, $10^8/1,544,000=64$, $10^8/10^8=1$이 된다. cost 계산시 소숫점은 버리되 cost가 1 미만이면 1으로 계산한다.

 

따라서 R1에서 1.1.40.4로 향하는 cost는 66이다.

 

 

 

 

 


 

OSPF 보안

 

 

OSPF 역시 패킷 인증 기능을 이용하여 보안성을 제공한다. RIP, EIGRP, BGP는 이웃간의 인증기능을 통해 보안을 제공하지만, area라는 특수한 개념을 사용하는 OSPF는 area 인증기능을 이용하여 area 전체에 보안을 걸 수 있다.

 

또한 EIGRP는 암호키 방식으로 MD5만을 사용할 수 있는 반면에 OSPF는 MD5에 더하여 평문 암호 교환방식도 사용이 가능하다. 하지만 사실 평문 암호는 보안성이 거의 없어 사용하지 않는다.

 

 

 

 

위 그림처럼 Area 인증, Neighbor 인증을 걸어보자.

 

 

R1(config)#router ospf 1
R1(config-router)#area 0 authentication message-digest
R1(config-router)#exit
R1(config)#interface g0/0
R1(config-if)#ip ospf message-digest-key 1 md5 cisco


R2(config)#router ospf 1
R2(config-router)#area 0 authentication message-digest
R2(config-router)#exit
R2(config)#interface g0/0
R2(config-if)#ip ospf message-digest-key 1 md5 cisco


R3(config)#router ospf 1
R3(config-router)#area 0 authentication message-digest
R3(config-router)#exit
R3(config)#interface g0/0
R3(config-if)#ip ospf message-digest-key 1 md5 cisco

 

 

위는 Area authentication을 적용한 명령어이다. 이번에는 R2-R4간 OSPF MD5 Neighbor 인증을 설정해본다.

 

R2(config)#interface g0/1.24
R2(config-subif)#ip ospf autentication message-digest
R2(config-subif)#ip ospf message-digest-key 1 md5 cisco

R4(config)#interface g0/1.24
R4(config-subif)#ip ospf autentication message-digest
R4(config-subif)#ip ospf message-digest-key 1 md5 cisco

 

 

 

 

 

 

이번 게시글에서는 Link state 라우팅 프로토콜 중 하나인 OSPF 개념을 중심으로 소규모 네트워크를 구성해보았다. OSPF metric을 계산하는 방법, OSPF 라우팅 정보를 교환하는 과정에서 라우터 상태변화, Authentication을 직접 설정해주는 것까지 알아보았다.