OSPF (Open Shortest Path First) - Link State 방법
본문 바로가기

OSPF (Open Shortest Path First) - Link State 방법

액트 2019. 5. 27.

@ OSPF

 

< Introducing OSPF >

 

 

- OSPF는 IETF 표준이다. (RFC 2328)

- OSPF 는 IGP(한 회사의 네트워크 망) 인 AS내에서 사용.

- 이는 Router가 많으면 많을수록 traffic이 심하다. 그래서 사용한 것이 Area 한 Network 망을 작은 여러 개의 Area로 나눈다.

- Area 와 Area 사이에 길은 SPF(Shortest Path First) 알고리즘을 사용한다.

- Link-State Routing Protocol 이다.

- 외부 AS의 정보는 ASBR(Autonomous System Boundary Router)을 이용하여 외부 네트워크의 도달 가능 정보를 얻는다.

- ASBR은 자신의 AS와 인접한 다른 AS에 대한 정보를 가지며 자신을 경유하는 Router에 외부 AS에 대한 정보를 제공한다.

- 이에 따라 Routing Protocol은 AS내부(IGP)에서 도달 가능 정보를 주고 받기 위해 사용하는 프로토콜과 외부AS(EGP)에서

  도달 가능 정보를 교환하기 위해 사용하는 프로토콜로 나뉘어 진다.

- Topology를 이해한다. 즉 이 정보는 누구의 라우터이며  인터페이스와 링크 상태 등을 안다.

- 무조건 받아서 쓰는게 아니라 내가 직접 찾아서 쓴다.

- DV 는 찾을 수 없어서 무조건 받아서 쓴다.

- Loop 가 발생할 일이 없다.

- 받는 사람이 주가 된다. 내가 직접 원하는 경로를 찾는다.

- Replash 가 있다.

  EIGRP는 상태가 변경되면 Update를 하지만 OSPF는 Replash 기능이 있어 1800초가 지나도 변경이 없으면

  Replash를 통해 정보를 다시 확인한다.

- 다시 확인할 때 사용하는 것이 DBD이다.

- OSFP State 확인

Init 상태 : 한쪽에서만 Hello Packet을 보내는 상태 (요청상태)

2way 상태 : 요청에 대한 응답 (양방향상태)

Exstart 상태 : 정보를 교환하기 위해 설정하는 상태

Exchange 상태 : 교환

Loading 상태 : 동기화가 끝나면 DBD를 Update

Full 상태 : 다 완료된 상태

 

- 다른 protocol 끼리의 동기화

redistribute <재분배할 Protocol> subnets

 

- Summary 
같은 지역끼리는 summary 되지 않는다.

지역이 다르거나 Protocol이 달라야 Summary가 가능하다.

 

- Default Router

default-information originate always

O*E2 로 보인다.

 

< 문제 >

 

정보를 수집해야만 하기 때문에 Memory 소비가 많고 정보를 다시 계산해야 하기 떄문에 CPU 소모가 심하다.

-> Area를 사용함으로써 Memory와 CPU의 부담을 줄인다.

 

=========================================================================================================

- 알고리즘

다익스트라가 개발한 Link State계열에 SPF 알고리즘 사용

SPF(Shortest Path First) : 최적의 경로를 선택하기 위한 알고리즘

Neighbor와 LASs(Link State Advertisement) 를 교환하여 LSDB(Link State Database)에 저장한다. 그리고 LASs 교환이 끝나면

LSDB를 통해 Topology를 생성하고 SPF알고리즘을 사용하여 최적의 경로를 선택한다.

 

OSPF는 Link State기반의 프로토콜이기 떄문에 Distance Vector 처럼 네트워크 정보만 전달하는게 아니라 링크 상태 정보를 전달하기 떄문에 해당 라우터에 어떤 링크를 가지고 있고 그 링크 어떤 네트워크 정보를 가지고 있는 구분이 가능하다. 그래서 OSPF Topology를 이해하게 됨으로 LOOP현상이 발생하지 않고 Neighbor로 부터 정보를 받아서 운영하는게 아니라 자신이 직접 수집한 정보를 계산하여 경로를 선택한다.

 

- 정보수집

OSPF PDU

no Packet

1   Hello                                    : Multicast (224.0.0.5)로 Hello Packet를 전달하여 Neighbor를 찾고 확인한 후 연결.

                                                 확인 : Protocol과 Area정보

2   DBD(DataBase Discription)     : 요약정보를 전달하여 인접관계를 형성한다.

                                                         Neighbor를 찾으면 Router-id로 협상을 맺는다. Router-id가 높은 쪽이 master 낮은 족 Slave

        DBD가 있는 이유 : EIGRP는 정보가 변경되어야만 Update를 한다.

                                    1800초 동안 정보가 변하지 않으면 Replash 를 한다.  Replash를 통해 정보를 다시 확인하게 되는데

                                     이때 필요한게 DBD이다.

3   LSR(Link State Request)        : 나한테 없는 정보를 요청, 상세한 정보(LSAs)를 요청할 때 사용한다.

4   LSU(Link State Update)          : LSU에 담는다. LSR을 전달받은 Neighbor가 상세한 정보를 응답해주기 위해서

                                                        LSAs를 실어나를때 사용

5   LSA(Link State Ack)              : DBD, LSR, LSU에 대한 응답

 

OSPF는 Update시 Area라는 지역정보로 Traffic을 제한하여 Update한다.

그래서 같은 지역이 아니면 정보를 교환하지 못하게 하여 Update Traffic을 줄여 Memory나 CPU에 대한 부담을 덜어준다. 하지만 서로 다른 지역끼리 정보를 교환하지 못하면 서로 통신이 불가능해지기 때문에 이 문제를 해결하기 위해서 ABR이라는 라우터를 만들어 서로 다른 지역정보를 교환할 수 있도록 만들었다.

 

ABR(Area Boundary Router) : 서로 다른 Area 정보를 교환

ASBR(AS Boundary Router) : 서로 다른 Protocol 정보를 교환

 

- BestPath : Cosc = 10^8(100000000) / bandwidth(bps)

OSPF는 최적의 경로를 선택할 때 경로마다 Cost 값을 누적시켜 그 값이 가장 적게 나온 경로를 최적의 경로로 선택한다.

ex)

10mbps : 100000000 / 1000000 0= 10

100mbps : 100000000 / 10000000 = 1

1024kbps : 10000000 / 1024000 = 97

2048kbps : 100000000 / 204800 = 48

Loopback : 1

 

- Network 유지

Neighbor의 Hello Packet으로 Network유지

Hello Timer => Update : 10초, Dead(Hold) Time : 40 초

 

- 관리거리 : 110

 

=========================================================================================================

※ IGP : Interior Gateway Protocol

 - RIP, IGRP, EIGRP, OSPF

※ EGP : Exterior Gateway Protocol

 - BGP

 

 www.krnic.or.kr : AS번호 정보 제공등 여러가지 정보 제공

 

 

< OSPF as a Link-State Protocol >

- OSPF는 Routing Table을 Update하지 않고 Link-State 정보를 광고한다.

  => Topology Table을 주고 받는다.

 

- OSPF는 동일한 Area내의 다른 모든 Router에게 LSA(Link-State-Advertisement)의 전송을 요청.

 

- OSPF는 Link-State Database에 상태가 변경되면 즉시 LSA를 전달하여 다른 Router에게 알린다.

 

- OSPF는 목적지 경로에 대한 최적의 정보를 SPF알고리즘을 사용하여 계산한다.

 

 

 

< OSPF Hierarchical(계급에 따른) Routing >

 

 

- SPF 계산 빈도가 줄어든다

- Routing Table 이 더 작다

  => Area별로 Routing Table을 갖고 Area와 Area사이에는 ABR(summary)를 이용하여 정보 교환.

- Link-State Update 과부하가 줄어든다

 

 

 

< Shortest Path First Algorithm >

 

- SPF 알고리즘에서는 Tree의 Root에 각 Router를 두고 수신지에 도달하는데 필요한 누적 Cost를

  기반으로 각 Node로 가는 최단 경로를 계산한다.

- Cost = 10^8/bandwidth (bps)

 

 

< OSPF 설정 >

 

Router(config)#router ospf process-id

Router(config-router)#router-id <A.B.C.D> => Router-ID 수동설정

Router(config-router)#no auto-summary

Router(config-router)#network <Classless Network> <Wildcardmask> <Area ID>

 

※ PID : 시스템의 고유 번호 - process를 실행할 때 CPU가 주는 번호.

           즉, 라우터간의 process-id 값은 다를 수 있다.

 

 

===========================================================================================================================

 @ OSPF 설정방법
Router(config)#router ospf <Process ID> => OSPF Enable
Router(config-router)#router-id <A.B.C.D> => Router-ID 수동설정

                                 Router-ID 자동설정 => Loopback이 존재하지 않으면 자신이 가지고 있는 IP주소 중에 가장 높은 놈.

                                                            => Loopback 이 존재하면 그 해당 IP주소가 선정

                                 Router-ID 수동설정 권장.(IP가 변경될 수 있기 떄문에)

Router(config-router)#no auto-summary

=> OSPF는 Classless한 Network만을 지원하며 Classfull한 Network는 지원하지 않기 떄문에 auto-summary가 존재하지 않는다.

OSPF는 Manual-Summary와 Area-Summary를 지원
Router(config-router)#network <Classless Network> <Wildcardmask> <Area ID>

===========================================================================================================================

 

@OSPF설정하기
- 각 Router Connected 정보 확인
R1#show ip route connected

R2#show ip route connected

R3#show ip route connected

 

===========================================================================================================================

 

< OSPF 설정 예 >

 

 

!-- Router B

Router(config)#router ospf 100 (100 process ID)

Router(config-router)#router-id <A.B.C.D>

Router(config-router)#network 10.1.1.2 0.0.0.0 area 0

Router(config-router)#network 10.2.2.2 0.0.0.0 area 0

 

 

< 확인 명령어 >

- 전체 Router에 대한 Timer, Filter, Metric, Network등의 매개변수들을 표시

Router#show ip Protocols

 

- Router에 알려진 경로와 경로가 학습된 방법을 표시

Router#show ip route

=> Network 정보가 들어오지 않고 IP주소가 들어온다.  ====> Topology를 이해하기 때문에

 

 

- Area-ID와 Neighbor 인접성을 표시

Router#show ip ospf interfate

 

- Database 확인

Router#show ip ospf database

process ID 별로 관리

Age -> 정보변경없이 1800초가 넘으면 Replash 시키기 위한 숫자

Seq#(Seq넘버)는 0x80000000 이 default 값. (4, 5, 5개 보냈다.)

EIGRP는 정보를 업데이트 할때 Unicast로 한다. 따로 따로 전달. Seq넘버가 라우터마다 다 틀리다. 필요한 것만 전달하기 때문에

OSPF는 Update가 Multicast다. 다 전달. Seq넘버가 다르면 Database가 동기화가 안되었다고 생각한다.

즉 모든 라우터가 Seq#와 Checksum이 동일하다.

 

- Interface 별로 OSPF Neighbor 정보를 표시

Router#show ip ospf neighbor

 

- OSFP State 확인

Init 상태 : 한쪽에서만 Hello Packet을 보내는 상태 (요청상태)

2way 상태 : 요청에 대한 응답 (양방향상태)

Exstart 상태 : 정보를 교환하기 위해 설정하는 상태

Exchange 상태 : 교환

Loading 상태 : 동기화가 끝나면 DBD를 Update

Full 상태 : 다 완료된 상태

 

                                     Down상태
     A(1.1.1.1)<-------------------------------->B(2.2.2.2)
                                    Init(초기상태)
     Hello ------------------------------------->
                                    2Way(양방향상태)
                   <------------------------------------ Hello

                                 Exstart(초기교환상태)
     Slave                                                                     Master        //Router-id가 높은 쪽이 Master
                   <--------------------------------------DBD               //DBD교환 Master가 먼저 제공

     DBD---------------------------------------->
                   <---------------LSAck--------------->

                                   Exchange(교환상태)
                   <---------------------------------------LSR
     LSU(LSAs)------------------------------------>

     LSR----------------------------------------->
                    <----------------------------------LSU(LSAs)
             
                    <--------------LSAck--------------->

                                       Loading(SPF)
                                      Full상태

 

 

< Debug Message를 통해 OSPF 상태 확인 >
R1#debug ip ospf events     --> 600초 기다려야 하기 떄문에. 그냥 clear 시켜 주고 확인한다.

R1#clear ip ospf process
Reset ALL OSPF Processes? [no]:yes
R1#un all

=> 모든 장비가 Down 되고 나서 Up이 되는 과정에서 상태를 확인할 수 있다.

 


< OSPF Loopback Interface Network Type변경 >

=> 정상적인 라우팅 Table을 확인

=> Network 정보를 정확하게 확인하게 위해.

=> 이전은 Topology를 이해하는 OSPS 때문에 실제로 사용하지 못하는 Loopback Interfase의 정보가 정확히 전달하지 못한다.


!-- R1
configure terminal
interface loopback 0
ip ospf network point-to-point
interface loopback 1
ip ospf network point-to-point
end

!-- R2
configure terminal
interface loopback 1
ip ospf network point-to-point
end

!-- R3
configure terminal
interface loopback 0
ip ospf network point-to-point
interface loopback 1
ip ospf network point-to-point
end

 


< OSPF LSAs(Link State Advertisements) 상태 확인 > 
no    Type               Code                정보전달
1      Intra          O(동일한 Area)     Neighbor
2      Intra           O(동일한 Area)       Neighbor
3      Inter           IA(다른 Area)         ABR
4      Inter            IA(다른 Area)           ABR
5      External     E2(다른 Protocol)  ASBR

 

*Intra Type
-> 같은 Area이기 때문에 O 라고 나온다.

R1#show ip route
     172.13.0.0/24 is subnetted, 2 subnets
O       172.13.1.0 [110/49] via 192.168.1.10, 00:07:36, Serial1/1
O       172.13.0.0 [110/49] via 192.168.1.10, 00:07:36, Serial1/1

 

*Inter Type
-> 다른 Area로 설정한 후 code 확인

!-- R2
configure terminal
router ospf 1
no network 172.12.0.0 0.0.1.255 area 0
network 172.12.0.0 0.0.1.255 area 1
end

R1,R3#show ip route
     172.12.0.0/24 is subnetted, 2 subnets
O IA    172.12.0.0 [110/49] via 192.168.1.2, 00:00:02, Serial1/0
O IA    172.12.1.0 [110/49] via 192.168.1.2, 00:00:02, Serial1/0

< 확인하기 >

R1,R3#show ip ospf border-router
i 172.12.1.1 [48] via 192.168.1.2, Serial1/0, ABR, Area 0, SPF 9


*External Type
-> 다른 Protocol 만든 후 확인

!-- R1
configure terminal
interface loopback 10
ip address 10.10.0.1 255.255.255.0
interface loopback 11
ip address 10.10.1.1 255.255.255.0
exit
router rip
version 2
no auto-summary
network 10.0.0.0
exit

==> R1은 RIP, OSPF , R2, R3를 OSPF 만 설정

--> 재분배 : 다른 protocol 끼리 Network 정보를 교환해야 하는 경우
router ospf 1
redistribute rip subnets            // rip 정보를 ospf가 받을 수 있다.
end

R2,R3#show ip route
     10.0.0.0/24 is subnetted, 2 subnets
O E2    10.10.0.0 [110/20] via 192.168.1.1, 00:00:09, Serial1/0
O E2    10.10.1.0 [110/20] via 192.168.1.1, 00:00:09, Serial1/0

R2,R3#show ip ospf border-router 
i 1.1.1.1 [48] via 192.168.1.1, Serial1/0, ASBR, Area 0, SPF 10


< Summary >
- 같은 지역끼리는 summary 되지 않는다.

- 지역이 다르거나 Protocol이 달라야 Summary가 가능하다.

 

*Manual Summary => ASBR(다른 Protocol로 Summary)
!-- R1
RIP --> OSPF
configure terminal
router ospf 1
summary-address 10.10.0.0 255.255.254.0
end

R2,R3#show ip route
     10.0.0.0/23 is subnetted, 1 subnets
O E2    10.10.0.0 [110/20] via 192.168.1.1, 00:00:12, Serial1/0


*Area Summary => ABR(다른 Area로 Summary)
!-- R2
Area1 --> Area 0
configure terminal
router ospf 1
area 1 range 172.12.0.0 255.255.254.0
end

R1,R3#show ip route
     172.12.0.0/23 is subnetted, 1 subnets
O IA    172.12.0.0 [110/49] via 192.168.1.5, 00:00:13, Serial1/1


< Default Router >
!-- R1
configure terminal
router ospf 1
default-information originate always
end


R2,R3#show ip route 
O*E2 0.0.0.0/0 [110/1] via 192.168.1.1, 00:00:06, Serial1/0

 

< Virtual-link >
 

 

 

댓글