RFC 2328 · April 1998 · J. Moy
OSPF Version 2
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
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. 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.10Hello(DR=0,seen=0) ------------------------------> Hello (DR=RT2,seen=RT1,...) Init
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.10Hello (DR=RT2,seen=RT1,...) Init <------------------------------ ExStart D-D (Seq=x,I,M,Master)
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.10ExStart D-D (Seq=x,I,M,Master) ------------------------------> D-D (Seq=y,I,M,Master) ExStart
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.10D-D (Seq=y,I,M,Master) ExStart <------------------------------ Exchange D-D (Seq=y,M,Slave)
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.10Exchange D-D (Seq=y,M,Slave) ------------------------------> D-D (Seq=y+1,M,Master) Exchange
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.10D-D (Seq=y+1,M,Master) Exchange <------------------------------
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.10D-D (Seq=y+1,M,Slave) ------------------------------>
8. RT2 → RT1: D-D (Seq=y+n, Master)
The last poll from the master has the M (more) bit off.
RFC 2328 §10.10D-D (Seq=y+n, Master) <------------------------------
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.10D-D (Seq=y+n, Slave) Loading ------------------------------> LS Request Full
10. RT1 → RT2: LS Request
RT1 asks RT2 for the LSAs it is missing with a Link State Request packet.
RFC 2328 §10.10LS Request Full ------------------------------> LS Update
11. RT2 → RT1: LS Update
RT2 answers with a Link State Update packet carrying those LSAs.
RFC 2328 §10.10LS Update <------------------------------ LS Request
12. RT1 → RT2: LS Request
RT1 requests the rest of what it still needs.
RFC 2328 §10.10LS Request ------------------------------> LS Update
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.10LS 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
Updated by (8)
- RFC 9454 — Update to OSPF Terminology
- RFC 9355 — OSPF Bidirectional Forwarding Detection (BFD) Strict-Mode
- RFC 8042 — OSPF Two-Part Metric
- RFC 7474 — Security Extension for OSPFv2 When Using Manual Key Management
- RFC 6860 — Hiding Transit-Only Networks in OSPF
- RFC 6845 — OSPF Hybrid Broadcast and Point-to-Multipoint Interface Type
- RFC 6549 — OSPFv2 Multi-Instance Extensions
- RFC 5709 — OSPFv2 HMAC-SHA Cryptographic Authentication
Obsoletes (1)
Text
Loading the RFC text…