본문 바로가기

Ryu's Tech

OSPF의 기본, 프로세스 동작





OSPF는 다른 라우팅 프로토콜과는 조금 다르게 자체적으로 계층적인 디자인을 지원한다.
Area0은 Backbone Area라고 불리며, 다른 Area는 꼭! Aera0과 연결되어 있어야 한다.
ABR은 Area의 경계에서 서로간의 패킷전달을 도와주며, ABR은 LSDB [Link State DataBase ] 를 가지고 있으며, 하지만 이를 그냥 forwarding하지는 않고, Area에 간단하게 광고한다. ( Prefix / Length )

다시 말해 위의 토폴로지에서 Area3의 라우터의 광점에서는 네트워크가 아래와 같이 보일 것이다.



다른 라우터와 마찬가지고 OSPF는 network 커맨드로 광고를 해서 neighbor를 맺게 되는데 각각의 라우터 아이디를 통해 Neighbor를 맺는다.

Step 1. Use the router ID defined in the router-id x.x.x.x OSPF router subcommand.
Step 2. Use the highest IP address of any up/up loopback interface.
Step 3. Use the highest IP address of any up/up non-loopback interface.

위와같이 router ID -> loopback IP -> non-loopback IP 순으로 router-id를 선택한다.




■ OSPF Router ID
■ Stub area flag
■ Plus the following interface-specific settings:
■ Hello interval
■ Dead Interval
■ Subnet mask
■ List of neighbors reachable on the interface
■ Area ID
■ Router priority
■ Designated Router (DR) IP address
■ Backup DR (BDR) IP address
■ Authentication digest


Requirement                                                OSPF     EIGRP
Interfaces’ primary IP addresses must be in same subnet.    Yes      Yes


Must not be passive on the connected interface.             Yes      Yes


Must be in same area.                                       Yes      N/A


Hello interval/timer, plus either the Hold (EIGRP) or
Dead (OSPF) timer, must match.                              Yes      No

Router IDs must be unique.                                  Yes      No


IP MTU must match.                                          Yes      No


Must pass neighbor authentication (if configured).          Yes      Yes


K-values (used in metric calculation) must match.           N/A      Yes


Must use the same ASN (EIGRP) or process-ID (OSPF)

on the router configuration command.                        No       Yes



보시는대로 OSPF는 EIGRP보다 좀 더 세세한 부분까지 맞춰주어야 한다는 것을 볼 수 있네요

Router 세개를 중간에 스위치를 연결하여 세 라우터의 인터페이스를 한 서브넷으로 만들어서 Area 0으로 돌려보겠습니다.

R1 fa0/0 = 192.168.1.1
R2 fa0/0 = 192.168.1.2
R3 fa0/0 = 192.168.1.3
이렇게 세 라우터를 하나로 묶으면 DR/BDR을 예상할 수 있으실 겁니다.
루프백도 없고 라우터 아이디도 설정하지 않았으니, 192.168.1.3의 router-id를 가진 R3가 DR이 되겠네요. 한번 볼까요?

R1#show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.1.2       1   FULL/BDR        00:00:35    192.168.1.2     FastEthernet0/0
192.168.1.3       1   FULL/DR         00:00:34    192.168.1.3     FastEthernet0/0
R1#

맞군요. 그렇다면 192.168.1.1을 가진 R1은 DROTHER가 되겠군요.

하나 더 해보도록 하죠. EIGRP에서는 hello timer가 같지 않아도 됐는데요, 그렇다면 OSPF는 한번 보도록 하죠
일단

R1(config)#int fa0/0
R1(config-if)#ip ospf hello-interval ?
  <1-65535>  Seconds
R1(config-if)#ip ospf hello-interval 9
R1(config-if)#end

이렇게 해 놓은채로 기다려 보도록하겠습니다.
R1#
*Mar  1 00:07:09.247: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.3 on FastEthernet0/0 from FULL to DOWN, Neighbor Down: Dead timer expired
R1#
*Mar  1 00:07:10.951: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.2 on FastEthernet0/0 from FULL to DOWN, Neighbor Down: Dead timer expired
R1#
이러한 메세지가 출력되며, OSPF Neighbor가 죽어버립니다.
hello-interval을 default값인 10으로 다시 설정하면 곧 다시 살아나게 됩니다.

그렇다면 이번에는 Router-id를 가지고 한번 확인을 해 보겠습니다. R1과 R2의 router-id를 같게 설정을 해보도록 하겠습니다.
R1#sh ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
3.3.3.3           1   FULL/DR         00:00:38    192.168.1.3     FastEthernet0/0
R1#
R2#sh ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
3.3.3.3           1   FULL/DR         00:00:38    192.168.1.3     FastEthernet0/0
R2#
R3#sh ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
1.1.1.1           1   FULL/BDR        00:00:38    192.168.1.2     FastEthernet0/0
1.1.1.1           1   FULL/DROTHER    00:00:38    192.168.1.1     FastEthernet0/0
R3#

또한 이러한 메세지가 뜨게 됩니다.
*Mar  1 00:14:08.647: %OSPF-4-DUP_RTRID_NBR: OSPF detected duplicate router-id 1.1.1.1 from 192.168.1.2 on interface FastEthernet0/0

즉, router-id가 같게 되면 같은 router-id를 가진 라우터끼리는 neighbor를 맺지 않는 것을 알 수 있습니다.




그렇다면 이제 좀 더 자세하게 OSPF Process의 상태에 대해 알아볼까요?

  1.Down State
    - OSPF가 설정되고, Hello Packet을 전송 하나 상대 라우터로부터 Hello 패킷 받지 못한 상태
    - Dead Interval동안 Hello Packet을 받지 못한 상태
    - 비정상적 상태에서도 Down State가 될 수 있음.

  2.Attempt
    - NBMA 모드에서만 적용되는 단계
    - Hub 라우터에서 Neighbor 커맨드로 사용한 인접 네이버에게 Hello Packet을 받지 못한 상태
  3. Init State
    - 네이버에게 Hello Packet 받았으나, 상대라우터는 아직 자신이 보낸 Hello Packet을 받지 못한상태
    - 즉, 상대방의 Hello Packet안에 Neighbor List에 자신의 Router-id가 없는 상태
  4.Two-Way State
    - 네이버와 쌍방향 통신이 이루어진 상태 ( 서로 Hello Packet 안에 서로의 Router-id 존재 )
    - 멀티 액세스 구간[BMA,NBMA]에서는 DR/BDR이 선출되는 단계
    - DROTHER은 서로 라우팅 정보를 교환하지 않으므로, Two-way 상태로 남아있게 된다.
    - show ip ospf interface 명령어로 남은 선출 시간 확인가능
  5.Exstart State
    - adjacency가 되는 첫 단계. 
  6.Exchange State
   - DR/BDR을 선출한 뒤 서로간의 DDP를 교환한다.
   - 각 DDP를 비교하여, 없는 정보나 오래된 정보가 있으면 Link State Request List 에 기록한다.
   - 위의 List가 아무것도 없으면 바로 Full 상태로 들어간다.
  7.Loading State
    - DDP 정보 확인후 부족한 정보에 대해 LSR / LSU를 교환 [ Link State Request List 를 참조하여 LSR을 보냄 ]

  8.Full State
   - 정보교환 끝.

어쩌구 저쩌구 많군요... 차후에 좀 더 자세하게 정리를 하겠습니다.
패킷에 대해 좀 더 설명을 해 보자면
Hello - 아시죠? 224.0.0.5 를 사용합니다.
DBD [DDP] : 데이터베이스를 말하는 겁니다. Hello와 DDP에서는 ACK를 받지 않습니다.
LSR : Request 입니다. unicast로 진행되죠
LSU : Update 를 답해주는거죠
LSAck : 오케이죠~
LSA : 자신에게 속한 인터페이스와 링크를 광고하는 등 광고 용 패킷, LSU 전송시 LSA도 전송한다.



그리고 DR/BDR에 대해서 하나 더 집고 넘어가자면, 토폴로지에 변화나 문제가 있으면 라우터는 DR / BDR에게만 광고합니다.
BDR은 광고만 받으면서, DR을 백업하는 형태를 가지고 DR이 열심히 알리는거죠.

OSPF... 정말 빡시네요......