rfc-visual
GitHub

RFC 2328 · April 1998 · J. Moy

OSPF Version 2

INTERNET STANDARDIETF stream
11 verified errata7 held for document update

Index fetched 2026-10-19 from rfc-editor.org

How it works

Built by hand from RFC 2328. Every arrow, step and field cites the RFC sentence it comes from, and an automated test checks each quote against the RFC text. Provisional: not yet reviewed by a second engineer. Help verify this visual

100%

RFC 2328 §10.10 Figure 14 shows an example of an adjacency forming. Routers RT1 and RT2 are both connected to a broadcast network. It is assumed that RT2 is the Designated Router for the network, and that RT2 has a higher Router ID than Router RT1.

  1. 1. RT1 → RT2: Hello(DR=0,seen=0)

    RT1's interface comes up and it sends Hellos without knowing any Designated Router or neighbor. RT2 hears this Hello and moves RT1 to Init.

    RT1: — · RT2: Init

    RFC 2328 §10.10 Hello(DR=0,seen=0) ------------------------------> Hello (DR=RT2,seen=RT1,...) Init
  2. 2. RT2 → RT1: Hello (DR=RT2,seen=RT1,...)

    RT2's next Hello says it is the Designated Router and that it has heard RT1. RT1 now starts to bring up the adjacency and goes to ExStart.

    RT1: ExStart · RT2: —

    RFC 2328 §10.10 Hello (DR=RT2,seen=RT1,...) Init <------------------------------ ExStart D-D (Seq=x,I,M,Master)
  3. 3. RT1 → RT2: D-D (Seq=x,I,M,Master)

    RT1 sends an empty Database Description (D-D) packet claiming to be master, with the I, M and MS bits set.

    RT1: — · RT2: ExStart

    RFC 2328 §10.10 ExStart D-D (Seq=x,I,M,Master) ------------------------------> D-D (Seq=y,I,M,Master) ExStart
  4. 4. RT2 → RT1: D-D (Seq=y,I,M,Master)

    RT2 also claims master. RT2 has the higher Router ID, so RT1 becomes slave, adopts RT2's DD sequence number y and moves to Exchange.

    RT1: Exchange · RT2: —

    RFC 2328 §10.10 D-D (Seq=y,I,M,Master) ExStart <------------------------------ Exchange D-D (Seq=y,M,Slave)
  5. 5. RT1 → RT2: D-D (Seq=y,M,Slave)

    RT1 answers as slave using sequence number y. RT2 moves to Exchange.

    RT1: — · RT2: Exchange

    RFC 2328 §10.10 Exchange D-D (Seq=y,M,Slave) ------------------------------> D-D (Seq=y+1,M,Master) Exchange
  6. 6. RT2 → RT1: D-D (Seq=y+1,M,Master)

    The master (RT2) polls with the next sequence number, describing more of its database.

    RFC 2328 §10.10 D-D (Seq=y+1,M,Master) Exchange <------------------------------
  7. 7. RT1 → RT2: D-D (Seq=y+1,M,Slave)

    The slave (RT1) responds with the same sequence number. Polls and responses continue like this.

    RFC 2328 §10.10 D-D (Seq=y+1,M,Slave) ------------------------------>
  8. 8. RT2 → RT1: D-D (Seq=y+n, Master)

    The last poll from the master has the M (more) bit off.

    RFC 2328 §10.10 D-D (Seq=y+n, Master) <------------------------------
  9. 9. RT1 → RT2: D-D (Seq=y+n, Slave)

    The exchange ends when both the poll and its response have the M bit off. RT2's database is already up to date, so it goes straight to Full. RT1 still needs some LSAs, so it goes to Loading.

    RT1: Loading · RT2: Full

    RFC 2328 §10.10 D-D (Seq=y+n, Slave) Loading ------------------------------> LS Request Full
  10. 10. RT1 → RT2: LS Request

    RT1 asks RT2 for the LSAs it is missing with a Link State Request packet.

    RFC 2328 §10.10 LS Request Full ------------------------------> LS Update
  11. 11. RT2 → RT1: LS Update

    RT2 answers with a Link State Update packet carrying those LSAs.

    RFC 2328 §10.10 LS Update <------------------------------ LS Request
  12. 12. RT1 → RT2: LS Request

    RT1 requests the rest of what it still needs.

    RFC 2328 §10.10 LS Request ------------------------------> LS Update
  13. 13. RT2 → RT1: LS Update

    Once RT1 has updated the necessary parts of its database, it is Full too. The two routers are fully adjacent.

    RT1: Full · RT2: —

    RFC 2328 §10.10 LS Update <------------------------------ Full

Not shown: The OSPF packet header (Appendix A.3.1): the validator does not recognise appendix section numbers in this RFC, so its fields cannot be cited; KillNbr and LLDown (same effect as InactivityTimer: any state to Down) and BadLSReq (same effect as SeqNumberMismatch); The 'or greater' rules drawn only from their lowest state: AdjOK? no (ExStart or greater to 2-Way), SeqNumberMismatch (Exchange or greater to ExStart), 1-WayReceived (2-Way or greater to Init); Self-loops with no state change (HelloReceived in Init or greater, 2-WayReceived in 2-Way or greater, 1-WayReceived in Init); Whether to become adjacent (section 10.4), Designated Router election, and the master/slave and DD sequence-number rules (sections 10.6, 10.8); Packet formats for Hello, Database Description, Link State Request, Update and Acknowledgment (Appendix A.3).

Lineage

Text

Loading the RFC text…