@c Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
@cindex OSPF Fundamentals
@node OSPF Fundamentals
@section OSPF Fundamentals

@cindex Link-state routing protocol
@cindex Distance-vector routing protocol
@acronym{OSPF} is, mostly, a link-state routing protocol. In contrast
to @dfn{distance-vector} protocols, such as @acronym{RIP} or
@acronym{BGP}, where routers describe available @dfn{paths} (i.e@. routes) 
to each other, in @dfn{link-state} protocols routers instead
describe the state of their links to their immediate neighbouring
routers.

@cindex Link State Announcement
@cindex Link State Advertisement
@cindex LSA flooding
@cindex Link State DataBase
Each router describes their link-state information in a message known
as an @acronym{LSA,Link State Advertisement}, which is then propogated
through to all other routers in a link-state routing domain, by a
process called @dfn{flooding}. Each router thus builds up an
@acronym{LSDB,Link State Database} of all the link-state messages. From
this collection of LSAs in the LSDB, each router can then calculate the
shortest path to any other router, based on some common metric, by
using an algorithm such as @url{http://www.cs.utexas.edu/users/EWD/,
Edgser Dijkstra}'s @acronym{SPF,Shortest Path First}.

@cindex Link-state routing protocol advantages
By describing connectivity of a network in this way, in terms of
routers and links rather than in terms of the paths through a network,
a link-state protocol can use less bandwidth and converge more quickly
than other protocols. A link-state protocol need distribute only one
link-state message throughout the link-state domain when a link on any
single given router changes state, in order for all routers to
reconverge on the best paths through the network. In contrast, distance
vector protocols can require a progression of different path update
messages from a series of different routers in order to converge.

@cindex Link-state routing protocol disadvantages
The disadvantage to a link-state protocol is that the process of
computing the best paths can be relatively intensive when compared to
distance-vector protocols, in which near to no computation need be done
other than (potentially) select between multiple routes. This overhead
is mostly negligible for modern embedded CPUs, even for networks with
thousands of nodes. The primary scaling overhead lies more in coping
with the ever greater frequency of LSA updates as the size of a
link-state area increases, in managing the @acronym{LSDB} and required
flooding.

This section aims to give a distilled, but accurate, description of the
more important workings of @acronym{OSPF}@ which an administrator may need
to know to be able best configure and trouble-shoot @acronym{OSPF}@.

@subsection OSPF Mechanisms

@acronym{OSPF} defines a range of mechanisms, concerned with detecting,
describing and propogating state through a network. These mechanisms
will nearly all be covered in greater detail further on. They may be
broadly classed as:

@table @dfn
@cindex OSPF Hello Protocol overview
@item The Hello Protocol

@cindex OSPF Hello Protocol
The OSPF Hello protocol allows OSPF to quickly detect changes in
two-way reachability between routers on a link. OSPF can additionally
avail of other sources of reachability information, such as link-state
information provided by hardware, or through dedicated reachability
protocols such as @acronym{BFD,Bi-directional Forwarding Detection}.

OSPF also uses the Hello protocol to propagate certain state between
routers sharing a link, for example:

@itemize @bullet
@item Hello protocol configured state, such as the dead-interval.
@item Router priority, for DR/BDR election.
@item DR/BDR election results.
@item Any optional capabilities supported by each router.
@end itemize

The Hello protocol is comparatively trivial and will not be explored in
greater detail than here.

@cindex OSPF LSA overview 
@item LSAs

At the heart of @acronym{OSPF} are @acronym{LSA,Link State
Advertisement} messages. Despite the name, some @acronym{LSA}s do not,
strictly speaking, describe link-state information. Common
@acronym{LSA}s describe information such as:

@itemize @bullet
@item
Routers, in terms of their links.
@item
Networks, in terms of attached routers.
@item
Routes, external to a link-state domain:

@itemize @bullet
@item External Routes

Routes entirely external to @acronym{OSPF}@. Routers originating such
routes are known as @acronym{ASBR,Autonomous-System Border Router}
routers.

@item Summary Routes

Routes which summarise routing information relating to OSPF areas
external to the OSPF link-state area at hand, originated by
@acronym{ABR,Area Boundary Router} routers.
@end itemize
@end itemize

@item LSA Flooding
OSPF defines several related mechanisms, used to manage synchronisation of
@acronym{LSDB}s between neighbours as neighbours form adjacencies and
the propogation, or @dfn{flooding} of new or updated @acronym{LSA}s.

@xref{OSPF Flooding}.

@cindex OSPF Areas overview
@item Areas
OSPF provides for the protocol to be broken up into multiple smaller
and independent link-state areas. Each area must be connected to a
common backbone area by an @acronym{ABR,Area Boundary Router}. These
@acronym{ABR} routers are responsible for summarising the link-state
routing information of an area into @dfn{Summary LSAs}, possibly in a
condensed (i.e. aggregated) form, and then originating these summaries
into all other areas the @acronym{ABR} is connected to.

Note that only summaries and external routes are passed between areas.
As these describe @emph{paths}, rather than any router link-states,
routing between areas hence is by @dfn{distance-vector}, @strong{not}
link-state.

@xref{OSPF Areas}.
@end table

@subsection OSPF LSAs

@acronym{LSA}s are the core object in OSPF@. Everything else in OSPF
revolves around detecting what to describe in LSAs, when to update
them, how to flood them throughout a network and how to calculate
routes from them. 

There are a variety of different @acronym{LSA}s, for purposes such
as describing actual link-state information, describing paths (i.e.
routes), describing bandwidth usage of links for 
@acronym{TE,Traffic Engineering} purposes, and even arbitrary data
by way of @emph{Opaque} @acronym{LSA}s.

@subsubsection LSA Header
All LSAs share a common header with the following information:

@itemize @bullet
@item Type

Different types of @acronym{LSA}s describe different things in
@acronym{OSPF}@. Types include:

@itemize @bullet
@item Router LSA
@item Network LSA
@item Network Summary LSA
@item Router Summary LSA
@item AS-External LSA
@end itemize

The specifics of the different types of LSA are examined below.

@item Advertising Router

The Router ID of the router originating the LSA, see @ref{ospf router-id}.

@item LSA ID

The ID of the LSA, which is typically derived in some way from the
information the LSA describes, e.g. a Router LSA uses the Router ID as
the LSA ID, a Network LSA will have the IP address of the @acronym{DR}
as its LSA ID@.

The combination of the Type, ID and Advertising Router ID must uniquely
identify the @acronym{LSA}@. There can however be multiple instances of
an LSA with the same Type, LSA ID and Advertising Router ID, see
@ref{OSPF LSA sequence number,,LSA Sequence Number}.

@item Age

A number to allow stale @acronym{LSA}s to, eventually, be purged by routers
from their @acronym{LSDB}s.

The value nominally is one of seconds. An age of 3600, i.e. 1 hour, is
called the @dfn{MaxAge}. MaxAge LSAs are ignored in routing
calculations. LSAs must be periodically refreshed by their Advertising
Router before reaching MaxAge if they are to remain valid.

Routers may deliberately flood LSAs with the age artificially set to
3600 to indicate an LSA is no longer valid. This is called
@dfn{flushing} of an LSA@.

It is not abnormal to see stale LSAs in the LSDB, this can occur where
a router has shutdown without flushing its LSA(s), e.g. where it has
become disconnected from the network. Such LSAs do little harm.

@anchor{OSPF LSA sequence number}
@item Sequence Number

A number used to distinguish newer instances of an LSA from older instances.
@end itemize

@subsubsection Link-State LSAs
Of all the various kinds of @acronym{LSA}s, just two types comprise the
actual link-state part of @acronym{OSPF}, Router @acronym{LSA}s and
Network @acronym{LSA}s. These LSA types are absolutely core to the
protocol. 

Instances of these LSAs are specific to the link-state area in which
they are originated. Routes calculated from these two LSA types are
called @dfn{intra-area routes}.

@itemize @bullet
@item Router LSA

Each OSPF Router must originate a router @acronym{LSA} to describe
itself. In it, the router lists each of its @acronym{OSPF} enabled
interfaces, for the given link-state area, in terms of:

@itemize @bullet
@item Cost

The output cost of that interface, scaled inversely to some commonly known
reference value, @xref{OSPF auto-cost reference-bandwidth,,auto-cost
reference-bandwidth}.

@item Link Type
@itemize @bullet
@item Transit Network

A link to a multi-access network, on which the router has at least one
Full adjacency with another router.

@item @acronym{PtP,Point-to-Point}

A link to a single remote router, with a Full adjacency. No
@acronym{DR, Designated Router} is elected on such links; no network
LSA is originated for such a link.

@item Stub

A link with no adjacent neighbours, or a host route.
@end itemize

@item Link ID and Data

These values depend on the Link Type:

@multitable @columnfractions .18 .32 .32
@headitem Link Type @tab Link ID @tab Link Data

@item Transit
@tab Link IP address of the @acronym{DR}
@tab Interface IP address

@item Point-to-Point
@tab Router ID of the remote router
@tab Local interface IP address,
or the @acronym{ifindex,MIB-II interface index} 
for unnumbered links

@item Stub
@tab IP address
@tab Subnet Mask

@end multitable
@end itemize

Links on a router may be listed multiple times in the Router LSA, e.g.
a @acronym{PtP} interface on which OSPF is enabled must @emph{always}
be described by a Stub link in the Router @acronym{LSA}, in addition to
being listed as PtP link in the Router @acronym{LSA} if the adjacency
with the remote router is Full.

Stub links may also be used as a way to describe links on which OSPF is
@emph{not} spoken, known as @dfn{passive interfaces}, see @ref{OSPF
passive-interface,,passive-interface}.

@item Network LSA

On multi-access links (e.g. ethernets, certain kinds of ATM and X@.25
configurations), routers elect a @acronym{DR}@. The @acronym{DR} is
responsible for originating a Network @acronym{LSA}, which helps reduce
the information needed to describe multi-access networks with multiple
routers attached. The @acronym{DR} also acts as a hub for the flooding of
@acronym{LSA}s on that link, thus reducing flooding overheads.

The contents of the Network LSA describes the:

@itemize @bullet
@item Subnet Mask

As the @acronym{LSA} ID of a Network LSA must be the IP address of the
@acronym{DR}, the Subnet Mask together with the @acronym{LSA} ID gives
you the network address.

@item Attached Routers

Each router fully-adjacent with the @acronym{DR} is listed in the LSA,
by their Router-ID. This allows the corresponding Router @acronym{LSA}s to be
easily retrieved from the @acronym{LSDB}@.
@end itemize
@end itemize

Summary of Link State LSAs:

@multitable @columnfractions .18 .32 .40
@headitem LSA Type @tab LSA ID Describes @tab LSA Data Describes

@item Router LSA 
@tab The Router ID 
@tab The @acronym{OSPF} enabled links of the router, within
     a specific link-state area.

@item Network LSA
@tab The IP address of the @acronym{DR} for the network
@tab The Subnet Mask of the network, and the Router IDs of all routers
     on the network.
@end multitable

With an LSDB composed of just these two types of @acronym{LSA}, it is
possible to construct a directed graph of the connectivity between all
routers and networks in a given OSPF link-state area. So, not
surprisingly, when OSPF routers build updated routing tables, the first
stage of @acronym{SPF} calculation concerns itself only with these two
LSA types. 

@subsubsection Link-State LSA Examples

The example below (@pxref{OSPF Link-State LSA Example}) shows two
@acronym{LSA}s, both originated by the same router (Router ID
192.168.0.49) and with the same @acronym{LSA} ID (192.168.0.49), but of
different LSA types.

The first LSA being the router LSA describing 192.168.0.49's links: 2 links
to multi-access networks with fully-adjacent neighbours (i.e. Transit
links) and 1 being a Stub link (no adjacent neighbours).

The second LSA being a Network LSA, for which 192.168.0.49 is the
@acronym{DR}, listing the Router IDs of 4 routers on that network which
are fully adjacent with 192.168.0.49.

@anchor{OSPF Link-State LSA Example}
@example
# show ip ospf database router 192.168.0.49

       OSPF Router with ID (192.168.0.53)


                Router Link States (Area 0.0.0.0)

  LS age: 38
  Options: 0x2  : *|-|-|-|-|-|E|*
  LS Flags: 0x6  
  Flags: 0x2 : ASBR
  LS Type: router-LSA
  Link State ID: 192.168.0.49 
  Advertising Router: 192.168.0.49
  LS Seq Number: 80000f90
  Checksum: 0x518b
  Length: 60
   Number of Links: 3

    Link connected to: a Transit Network
     (Link ID) Designated Router address: 192.168.1.3
     (Link Data) Router Interface address: 192.168.1.3
      Number of TOS metrics: 0
       TOS 0 Metric: 10

    Link connected to: a Transit Network
     (Link ID) Designated Router address: 192.168.0.49
     (Link Data) Router Interface address: 192.168.0.49
      Number of TOS metrics: 0
       TOS 0 Metric: 10

    Link connected to: Stub Network
     (Link ID) Net: 192.168.3.190
     (Link Data) Network Mask: 255.255.255.255
      Number of TOS metrics: 0
       TOS 0 Metric: 39063
# show ip ospf database network 192.168.0.49

       OSPF Router with ID (192.168.0.53)


                Net Link States (Area 0.0.0.0)

  LS age: 285
  Options: 0x2  : *|-|-|-|-|-|E|*
  LS Flags: 0x6  
  LS Type: network-LSA
  Link State ID: 192.168.0.49 (address of Designated Router)
  Advertising Router: 192.168.0.49
  LS Seq Number: 80000074
  Checksum: 0x0103
  Length: 40
  Network Mask: /29
        Attached Router: 192.168.0.49
        Attached Router: 192.168.0.52
        Attached Router: 192.168.0.53
        Attached Router: 192.168.0.54
@end example

Note that from one LSA, you can find the other. E.g. Given the
Network-LSA you have a list of Router IDs on that network, from which
you can then look up, in the local @acronym{LSDB}, the matching Router
LSA@. From that Router-LSA you may (potentially) find links to other
Transit networks and Routers IDs which can be used to lookup the
corresponding Router or Network LSA@. And in that fashion, one can find
all the Routers and Networks reachable from that starting @acronym{LSA}@.

Given the Router LSA instead, you have the IP address of the
@acronym{DR} of any attached transit links. Network LSAs will have that IP
as their LSA ID, so you can then look up that Network LSA and from that
find all the attached routers on that link, leading potentially to more
links and Network and Router LSAs, etc. etc.

From just the above two @acronym{LSA}s, one can already see the
following partial topology:
@example
@group

      
   --------------------- Network: ......
            |            Designated Router IP: 192.168.1.3
            |
      IP: 192.168.1.3
       (transit link)
        (cost: 10)
   Router ID: 192.168.0.49(stub)---------- IP: 192.168.3.190/32
        (cost: 10)        (cost: 39063)
       (transit link)
      IP: 192.168.0.49
            |
            |
------------------------------ Network: 192.168.0.48/29
  |        |           |       Designated Router IP: 192.168.0.49
  |        |           |
  |        |     Router ID: 192.168.0.54
  |        |
  |   Router ID: 192.168.0.53
  |
Router ID: 192.168.0.52
@end group
@end example

Note the Router IDs, though they look like IP addresses and often are
IP addresses, are not strictly speaking IP addresses, nor need they be
reachable addresses (though, OSPF will calculate routes to Router IDs).

@subsubsection External LSAs

External, or "Type 5", @acronym{LSA}s describe routing information which is
entirely external to @acronym{OSPF}, and is "injected" into
@acronym{OSPF}@. Such routing information may have come from another
routing protocol, such as RIP or BGP, they may represent static routes
or they may represent a default route.

An @acronym{OSPF} router which originates External @acronym{LSA}s is known as an
@acronym{ASBR,AS Boundary Router}. Unlike the link-state @acronym{LSA}s, and
most other @acronym{LSA}s, which are flooded only within the area in
which they originate, External @acronym{LSA}s are flooded through-out
the @acronym{OSPF} network to all areas capable of carrying External
@acronym{LSA}s (@pxref{OSPF Areas}).

Routes internal to OSPF (intra-area or inter-area) are always preferred
over external routes.

The External @acronym{LSA} describes the following:

@itemize @bullet
@item IP Network number

The IP Network number of the route is described by the @acronym{LSA} ID
field.

@item IP Network Mask

The body of the External LSA describes the IP Network Mask of the
route. This, together with the @acronym{LSA} ID, describes the prefix
of the IP route concerned.

@item Metric

The cost of the External Route. This cost may be an OSPF cost (also
known as a "Type 1" metric), i.e. equivalent to the normal OSPF costs,
or an externally derived cost ("Type 2" metric) which is not comparable
to OSPF costs and always considered larger than any OSPF cost. Where
there are both Type 1 and 2 External routes for a route, the Type 1 is
always preferred.

@item Forwarding Address

The address of the router to forward packets to for the route. This may
be, and usually is, left as 0 to specify that the ASBR originating the
External @acronym{LSA} should be used. There must be an internal OSPF
route to the forwarding address, for the forwarding address to be
useable.

@item Tag

An arbitrary 4-bytes of data, not interpreted by OSPF, which may
carry whatever information about the route which OSPF speakers desire.
@end itemize

@subsubsection AS External LSA Example

To illustrate, below is an example of an External @acronym{LSA} in the
@acronym{LSDB} of an OSPF router. It describes a route to the IP prefix
of 192.168.165.0/24, originated by the ASBR with Router-ID
192.168.0.49. The metric of 20 is external to OSPF. The forwarding
address is 0, so the route should forward to the originating ASBR if
selected.

@example
@group
# show ip ospf database external 192.168.165.0
  LS age: 995
  Options: 0x2  : *|-|-|-|-|-|E|*
  LS Flags: 0x9
  LS Type: AS-external-LSA
  Link State ID: 192.168.165.0 (External Network Number)
  Advertising Router: 192.168.0.49
  LS Seq Number: 800001d8
  Checksum: 0xea27
  Length: 36
  Network Mask: /24
        Metric Type: 2 (Larger than any link state path)
        TOS: 0
        Metric: 20
        Forward Address: 0.0.0.0
        External Route Tag: 0
@end group
@end example

We can add this to our partial topology from above, which now looks
like:
@example
@group
   --------------------- Network: ......
            |            Designated Router IP: 192.168.1.3
            |
      IP: 192.168.1.3      /---- External route: 192.168.165.0/24
       (transit link)     /                Cost: 20 (External metric)
        (cost: 10)       /
   Router ID: 192.168.0.49(stub)---------- IP: 192.168.3.190/32
        (cost: 10)        (cost: 39063)
       (transit link)
      IP: 192.168.0.49
            |
            |
------------------------------ Network: 192.168.0.48/29
  |        |           |       Designated Router IP: 192.168.0.49
  |        |           |
  |        |     Router ID: 192.168.0.54
  |        |
  |   Router ID: 192.168.0.53
  |
Router ID: 192.168.0.52
@end group
@end example

@subsubsection Summary LSAs

Summary LSAs are created by @acronym{ABR}s to summarise the destinations available within one area to other areas. These LSAs may describe IP networks, potentially in aggregated form, or @acronym{ASBR} routers. 

@anchor{OSPF Flooding}
@subsection OSPF Flooding

@anchor{OSPF Areas}
@subsection OSPF Areas
