OSPF 라우팅 프로토콜은 Link 정보가 변경되면 새로운 LSA를 LSU Packet을 이용하여 Flooding하여 모든 Area 내의 장비들과 데이터베이스를 동기화한다. 그 때, 변경된 LSA가 최신 정보라는 것을 알려주기 위하여 ‘Sequence number’를 사용한다.

  즉, LSA가 변경될 때마다 Sequence number를 ‘1’씩 증가시켜 어떠한 LSA가 최신 정보인지 알려주는 것이다. 그리고, 각 장비는 새로운 LSA를 데이터베이스에 넣어서 최신 정보로 데이터베이스를 유지하게 된다.

  Sequence number는 32bit 값을 가지며, 0x80000001부터 0x7FFFFFFF의 값을 갖는다. IS-IS 라우팅 프로토콜도 마찬가지로 Sequence number가 32bit의 값을 갖고 있지만, IS-IS 라우팅 프로토콜은 0x00000001부터 0XFFFFFFFF의 값을 갖는다는 차이가 있다.

  OSPF 라우팅 프로토콜의 Sequence number를 이해하기 위해서는 IS-IS 라우팅 프로토콜에서의 Sequence number에 대한 이해가 필요하다. IS-IS 라우팅 프로토콜이 처음 개발될 때, 0x00000001부터 0XFFFFFFFF 까지 Sequence number 값이 올라간 후에 Sequence number가 0x00000000이 되면 MaxAge(Default = 20분) + ZeroAgeLifetime (Default = 60초) 동안 해당 정보를 사용하지 않도록 만들었다. 그리고, 그 시간 이후에 다시 0x00000001로 업데이트를 하여 사용할 수 있도록 하였다.

  Sequence number 32bit가 최대값이 되려면 1초에 한번씩 Link 정보가 변경된다고 가정했을 때 약 136년이 흘러야 가능하다. 그래서, Sequence number가 최대치가 된다는 것은 현실적으로 불가능하기 때문에, 해당 정보가 문제가 있다고 판단하여 사용하지 않도록 만든 것이다.

  OSPF 라우팅 프로토콜도 동일하게 동작하도록 하기 위하여 0x80000000이 되면 LSA가 Flush되어 사라지도록 하였다. 그런데, Flush된 LSA에 대하여 다음 프로세스를 IS-IS 라우팅 프로토콜처럼 명확하게 정의하지 않아서 제조사마다 동작 방식이 다를 수 있다. 참고로 시스코 장비는 Sequence number가 0x80000000이 되면 0x80000001을 바로 만들어 업데이트함으로써 서비스 중단없이 지속적으로 사용할 수 있도록 하였다. (CCIE Routing and Switching v5.0 Official Cert Guide, Volume 1)

  그럼, OSPF 라우팅 프로토콜은 왜 0x80000001부터 시작하도록 만들었는지 확인해 보자.

  위의 그림처럼 OSPF 라우팅 프로토콜은 Sequence number의 첫번째 bit를 음수영역(bit = 1)과 양수영역 (bit = 0)을 나누는 용도로 사용하였다. 그리고, 각 영역 안에서 숫자의 크기를 비교하기로 하였다. 즉, 다음과 같이 숫자가 증가하도록 만든 것이다.

  음수영역 (1 < 2 < 3 < … < 2147483647) < 0 < 양수영역 (1 < 2 < 3 < … < 2147483647)

  = 0x800000001 < … < 0XFFFFFFFF < 0x00000000 < 0x00000001 < … < 0x7FFFFFFF

  그리고, ‘0x7FFFFFFF’ 다음에 ‘0x80000000’이 나와야 하는데 ‘0x7’은 양수영역이고 ‘0x8’은 음수영역이기 때문에 ‘0x8’이 ‘0x7’ 보다 절대로 클 수가 없다. 즉, ‘0x80000000’이라는 값을 사용하지 못하도록 하기 위해서 Sequence number를 복잡하게 만든 것이다.

  그리고, OSPF 라우팅 프로토콜은 LSA의 ‘MaxAge’(Maximum Aging Time)을 3600초(1시간)로 설정하여 1시간이 지나면 LSA가 Flush되어 사라지도록 만들었다. 불필요한 LSA 정보가 데이터베이스에 남아 있는 것을 삭제하기 위해 ‘MaxAge’를 만들었는데 다음 예제를 확인해 보도록 하자.

  Neighbor 관계가 ‘Full’ 상태가 된 후에 R2에서 데이터베이스를 확인 해보면 다음과 같다.

  이 상태에서 R1의 Interface를 ‘shutdown’ 시킨 후 Neighbor가 Down되는 것을 확인하고 데이터베이스를 확인해 보자.

  LSA Aging Time이 330초가 지났는데도 그대로 데이터베이스에 남아 있는 것을 확인할 수 있다. LSA의 자세한 정보를 확인해 보면 ‘해당 LSA를 전달한 Adv Router를 찾을 수 없다’는 메세지만 있을 뿐이다. 즉, Neighbor가 자신과 연결이 끊어졌을 뿐, Neighbor 장비가 Down된 것인지에 대한 확인을 할 수 없기 때문에 데이터베이스에 정보가 그대로 남아있게 된다.

  사라져야 할 정보가 데이터베이스에 그대로 남게 되면 데이터베이스는 시간이 지날수록 점점 더 커지게 되어 불필요한 자원 낭비가 발생할 수 있다. 그래서, 이러한 정보를 사라지게 하기 위하여 ‘MaxAge’를 만들어 1시간이 지나면 LSA는 사라지도록 하였다.

  문제는 정상적인 LSA도 1시간이 지나면 사라진다는 것이다. 이 문제를 해결하기 위하여 각 장비는 Link의 변화가 없어도 LSA를 30분에 한번씩 Sequence number를 ‘1’씩 증가시켜 Update를 하도록 하였다. Sequence number를 증가시켜 업데이트 함으로써 기존의 LSA는 새로운 LSA로 교체될 수 있도록 하였다.

  참고로, Point-to-Point 환경에서는 해당 Neighbor와 관계가 끊어지면 데이터베이스에서 Neighbor 정보가 사라지게 되는데 이는 ‘Neighbor 수립 후 OSPF Update’ 부분에서 자세히 설명하도록 하겠다.

  마지막으로, 두 대 이상의 Neighbor로부터 동일한 LSA 정보를 받으면 어떤 정보를 우선하는지 확인해 보자.

  Step 1. LSA의 Sequence number 값이 높은 LSA를 우선한다.

  Step 2. Sequence number가 동일한 경우 Checksum 값이 높은 LSA를 우선한다.

  Step 3. Checksum 값이 동일한 경우 Aging Time이 낮은 값을 우선한다.

  여기서 ‘Step 2’는 실제로 의미가 없는데, 왜 의미가 없는지는 ‘Neighbor 수립 후 OSPF Update’ 부분에서 자세히 설명하도록 하겠다.