본문 바로가기
네트워크

OSPF

by ahoy~ 2020. 6. 9.

지난 BGP에 이어 OSPF를 알아보도록 합시다.
OSPF는 게이트웨이 안쪽에서(하나의 AS내에서) 사용되는 프로토콜입니다.
모든 라우터들은 자신이 연결된 link의 cost를 브로드캐스트로 다른 모든 라우터들에게 알립니다.
따라서 모든 라우터들은 모든 라우터들의 전체 맵을 가지고 있게 됩니다.
이 정보를 통해 각 라우터는 다른 라우터들로의 최소 거리를 구하게 됩니다.
이때 사용하는 알고리즘이 그 유명한 다익스트라 알고리즘입니다.(다익스트라 알고리즘에 대해서는 생략)
다익스트라는 L을 간선의 갯수, R을 라우터의 갯수라고 했을 때 O(L+RlogR)의 시간복잡도를 가지는데 이마저도 L과 R이 커지면 비용이 너무 커집니다.
이를 위해서 나온 것이 하나의 AS내에서도 여러개의 area로 나누는 것입니다.

Area구성의 특징

  • Area 0(Backbone)은 오직 한개이며 Area들로의 경로를 알고 있어서 Area들 끼리 연결을 시켜줍니다.
  • 라우터는 자신의 지역 내의 정보만 알고 다른 지역에 대한 정보는 전혀 없습니다.
  • 주로 Area들은 연속된 서브넷 단위로 구성됩니다.

OSPF 특징

  • Link Metric은 cost의 역할로 bandwidth의 역수와 비례합니다(e.g. 100Mbps=1, 10Mbps=10....)
  • Network Admin은 이 link metric을 이용해 load balancing을 합니다.(목적지로의 2개의 path가 존재 시 metric을 이용 적절히 트래픽을 나눔)
  • Equal-cost multipath(ECMP) 를 사용하여 트래픽을 적절히 나눕니다.
  • OSPF는 IP multicast(224.0.0.5)방식을 사용합니다. broadcast를 사용해도 되지만 OSPF기능을 사용하는 라우터들에게만 메세지가 전송되도록 하는 조치입니다.

OSPF packet format

필드 설명

  • Version: 2=IPv4,3=IPv6
  • Type: 1=Hello, 2=Database Description(DBD), 3=Link State Request(LSR), 4=Link State Update(LSU), 5=Link State Acknowledgement(LSAck)
  • packet length: OSPF packet의 전체 길이
  • Router ID: 패킷을 보낸 라우터의 인터페이스(주로 라우터의 loopback IP)
  • Auth type: 0=none, 1=password, 2=crypto

OSPF Type별로 본 동작 원리

Hello OSPF

라우터는 주변의 라우터들에게 10초마다 Hello메세지를 보냅니다.
연결 확인을 위해 주변의 라우터들에게 받은 Hello메세지에 자신의 ID가 있는지 확인합니다.
4개의 연속된 Hello메세지 Loss가 발생하면 연결이 끊긴 것으로 판단합니다.

DBD OSPF

모든 라우터는 Link State Advertisement(LSA)를 모아놓은 Link State Database(LSDB)를 보관합니다.
같은 네트워크 내의 라우터들은 당연히 같은 LSDB를 보관합니다.
라우터는 LSA들의 헤더(일종의 메타 데이터)를 보관한 DBD를 주고 받으면서 비교하여 다른 것이 있는지 확인합니다.
만약 불일치하는 부분이 있다면 불일치 부분만을 다른 라우터들에게 알립니다.
새로운 라우터가 연결되었을 때도 DBD를 이용하여 비교함으로서 다른 라우터들과 자신의 LSDB가 다름을 인지합니다.
**DBD의 교환은 다름을 인지하는데 까지 입니다. 실제 LSA를 주고받는 작업은 따로 일어납니다.

LSR OSPF

받은 DBD에서 더 최신의 LSA를 발견한다면 LSR을 통해서 새로운 LSA를 요청하게 됩니다.

LSU OSPF

LSR을 받는다면 LSR에서 요청하는 LSA를 포함한 LSU를 보내 응답하게 됩니다.
LSU를 통해 자신의 LSDB를 최신화하고 neighbors에게도 알리기 위해 들어온 인터페이스를 제외한 나머지 인터페이스로 LSU를 forward합니다.

5=LSAck

LSU를 잘 받으면 O.K의 의미로 LSAck을 보냅니다.
송신자의 입장에서 LSAck을 받지 못하면 LSU를 재전송하게 됩니다.

이 모든 과정을 도식화한 모습입니다.

OSPF에서 주고받을 때 사용하는 message body에 들어가는 LSA에 대해서 자세히 알아봅시다.

LSA

LSA가 어떻게 생겼는지 살펴봅시다.

LSA format

필드 설명

  • LS age: LSA가 만들어지고 난 후의 시간입니다.(0~3600) 1시간 이후 버려지므로 originating라우터가 30분마다 copy를 새로 뿌려줍니다.)
  • Options: 라우터가 지원하는 옵션들에대한 설명(복잡합니다... 생략)
  • LS type: 0=Router LSA, 1=Network LSA, 2=Summary LSA. 이 타입에 따라 LSA body에 들어가는 포맷이 달라집니다.

타입에 따른 LSA를 하나씩 봅시다.

Router LSA

기본적인 LSA로서 라우터가 보내는 정보입니다.

Network LSA

Designated Router(DR:지정 라우터)에서만 보내는 LSA입니다.
기존에는 각각의 라우터들이 다 서로에게 뿌리는 방식이며 비효율적인 부분이 있습니다.
네트워크에 DR이라는 advertising router를 통해 다른 Link에 자신의 Link 라우터들 정보를 통째로 보냄으로서 효율적인 방식을 사용합니다.

Summary LSA

Area를 건너서 LSA를 보내야 하는 경우 ABR에서 보내는 LSA입니다.
라우터 network들이 다른 Area에 advertise될 때, Area마다 ABR이 Summary LSA를 만들어 advertise하게 됩니다.

'네트워크' 카테고리의 다른 글

UDP  (0) 2020.06.10
ICMP  (0) 2020.06.10
BGP  (2) 2020.06.09

댓글