Troubleshooting OSPF Neighbor Adjacency
OSPF is one of the most widely deployed interior routing protocols in enterprise networks — and OSPF neighbour adjacency failures are among the most frequently encountered and most time-consuming faults to diagnose without a systematic approach. When OSPF neighbours refuse to form, routes disappear from the routing table, traffic is black-holed, and the failure is completely invisible at Layer 1 and 2 — the physical link is up, frames are forwarding, yet no routing information is exchanged. The cause is almost always one of a small set of well-defined parameter mismatches: OSPF validates five fields in every Hello packet and rejects the Hello silently if any of them do not match. An additional sixth parameter — MTU — blocks database exchange at the EXSTART state, allowing the neighbour to reach EXSTART but never FULL.
The three primary diagnostic commands are
show ip ospf neighbor (neighbour state and dead
timer), show ip ospf interface [name] (all
per-interface OSPF parameters in one output), and
debug ip ospf events (live Hello processing —
shows exactly which field caused a rejection). Together these
three commands diagnose every common OSPF adjacency failure
without requiring packet captures or external tools.
This guide assumes Layers 1, 2, and 3 are confirmed healthy — the physical link is up/up, the interfaces have correctly configured IP addresses on the same subnet, and basic IP reachability between the two router interfaces exists. Verify those first using Troubleshooting Layer 1, Troubleshooting Layer 2, and Troubleshooting Layer 3. For OSPF configuration from scratch see OSPF Single-Area Configuration and OSPF Multi-Area Configuration.
1. OSPF Neighbour Formation — Core Concepts
The OSPF Neighbour State Machine
OSPF neighbours progress through a defined sequence of states from DOWN to FULL. The state at which a neighbour stalls immediately identifies which class of fault is responsible — making the state machine the primary diagnostic tool even before running any commands:
DOWN ──► INIT ──► 2WAY ──► EXSTART ──► EXCHANGE ──► LOADING ──► FULL
DOWN No Hellos received at all
Cause: interface not in OSPF process, wrong network statement,
ACL blocking multicast 224.0.0.5, passive interface
INIT Hellos received from peer but router's own RID not seen
in peer's neighbour list
Cause: unidirectional communication — ACL blocking in one
direction, Layer 2 asymmetric fault
2WAY Bidirectional Hello exchange confirmed — both see each other
Normal FINAL state for DROTHERs on broadcast networks
(not a fault if both are DROTHER on multi-access)
EXSTART Master/slave election for DBD exchange begun
EXCHANGE DBD packets being exchanged — full topology summary
Stuck here: MTU mismatch — one side's DBD packets exceed
peer's MTU and are silently dropped
LOADING LSR/LSU exchange to fill in missing LSAs
Stuck here rarely — usually a corrupted LSA or retransmit loop
FULL Databases synchronised — all LSAs exchanged
Desired end state:
Point-to-point links: FULL/ -
Broadcast (DR): FULL/DR
Broadcast (BDR): FULL/BDR
Broadcast (DROTHER): 2WAY/DROTHER ← correct, not a fault
The Six OSPF Hello Validation Fields
Before forming a neighbour relationship, OSPF validates every incoming Hello against the local interface configuration. A mismatch in any of the first five fields causes the Hello to be silently dropped — no error message is generated, the neighbour simply never appears. The sixth (MTU) does not affect Hello processing but blocks DBD exchange:
| # | Parameter | Must Match? | State Where Failure Shows | How to Check |
|---|---|---|---|---|
| 1 | Area ID | Yes — both interfaces on same link must be in identical area | Stuck at DOWN / never reaches INIT | show ip ospf interface [int] — Area field |
| 2 | Hello / Dead timers | Yes — both must be identical on each end | Neighbour forms then drops (flapping) if dead timer > 4× peer hello | show ip ospf interface [int] — Timer intervals line |
| 3 | Authentication | Yes — type (none/plain/MD5) and key must match | Stuck at DOWN — Hellos discarded before processing | show ip ospf interface [int] — Simple password / MD5 |
| 4 | Stub area flag | Yes — both must agree on stub / not-stub / NSSA | Stuck at DOWN | show ip ospf — Area type listing |
| 5 | Network type (subnet) | Subnet must be same — /30 both sides, etc. Network type (broadcast vs P2P) mismatch causes FULL but no routes exchanged | Reaches FULL but routes missing or DR election fails | show ip ospf interface [int] — Network Type field |
| 6 | MTU | Yes during DBD exchange — mismatch causes DBD drops | Stuck at EXSTART / EXCHANGE | show interfaces [int] — MTU line; show ip ospf interface [int] |
OSPF Network Types and DR/BDR Election
The OSPF network type configured on an interface determines whether DR/BDR election occurs and how many Hello packets are needed. A mismatch in network type between two routers on the same link is a subtle fault — the neighbour may reach FULL but route exchange is broken or unreliable:
| Network Type | IOS Default On | DR/BDR Election | Hello / Dead | Multicast Used |
|---|---|---|---|---|
| broadcast | Ethernet (GigabitEthernet, FastEthernet) | Yes | 10 / 40 sec | 224.0.0.5 (all OSPF), 224.0.0.6 (DR/BDR) |
| point-to-point | Serial (HDLC, PPP), GRE tunnels | No | 10 / 40 sec | 224.0.0.5 |
| non-broadcast (NBMA) | Frame Relay (multipoint), ATM | Yes | 30 / 120 sec | Unicast only — neighbours must be manually configured |
| point-to-multipoint | Frame Relay (hub-and-spoke) | No | 30 / 120 sec | 224.0.0.5 |
| point-to-multipoint non-broadcast | Manual override only | No | 30 / 120 sec | Unicast only |
| loopback | Loopback interfaces | No | — | Advertised as /32 regardless of configured mask |
ping [peer-interface-ip] from the local router.
If the ping fails, the OSPF issue is masking a Layer 3 problem
(wrong subnet mask, no route, ACL). Check
show ip route to confirm
routing is in place before investigating OSPF.
OSPF cannot form a neighbour
relationship if basic IP reachability between the two interface
addresses is broken. A successful ping confirms Layers 1–3 are
healthy and the OSPF investigation can begin.
2. Lab Topology & Scenarios
This lab covers six OSPF adjacency fault scenarios across a
three-router topology. All routers run OSPF process 1. Each
scenario is independent and begins with the
show ip ospf neighbor output showing the fault:
10.0.12.0/30 10.0.23.0/30
NetsTuts_R1 ──────────────────── NetsTuts_R2 ──────────────────── NetsTuts_R3
Gi0/0: 10.0.12.1/30 Gi0/0: 10.0.12.2/30 Gi0/0: 10.0.23.6/30
RID: 1.1.1.1 Gi0/1: 10.0.23.5/30 RID: 3.3.3.3
RID: 2.2.2.2
Loopback interfaces (for stable Router IDs):
R1 Lo0: 1.1.1.1/32 R2 Lo0: 2.2.2.2/32 R3 Lo0: 3.3.3.3/32
Stub networks:
R1: 192.168.10.0/24 R2: 192.168.20.0/24 R3: 192.168.30.0/24
Design intent:
All three routers in OSPF area 0 (backbone)
R1–R2 link: Gi0/0 both sides (Ethernet — broadcast network type)
R2–R3 link: Gi0/1 / Gi0/0 (Ethernet — broadcast network type)
Fault Scenarios:
Scenario 1 — R1–R2 neighbour absent (area mismatch: R1=area 0, R2=area 1)
Scenario 2 — R1–R2 neighbour flapping every 40 s (hello timer mismatch)
Scenario 3 — R2–R3 neighbour stuck at EXSTART (MTU mismatch)
Scenario 4 — R1–R2 neighbour absent (authentication mismatch)
Scenario 5 — R2–R3 neighbour stuck at 2WAY with no FULL (network type mismatch)
Scenario 6 — R1 sees no neighbour at all (passive interface / wrong network statement)
| Scenario | Link | show ip ospf neighbor State | Root Cause |
|---|---|---|---|
| 1 | R1–R2 | Empty — no neighbour entry | Area ID mismatch (R1: area 0, R2: area 1 on same link) |
| 2 | R1–R2 | FULL then DOWN every 40 s | Hello timer mismatch (R1: 10 s, R2: 20 s — dead timer expires) |
| 3 | R2–R3 | EXSTART — never advances | MTU mismatch (R2: 1500, R3: 1476 — DBD packets dropped) |
| 4 | R1–R2 | Empty — no neighbour entry | Authentication mismatch (R1: MD5, R2: no auth) |
| 5 | R2–R3 | FULL/DR and FULL/BDR but routes missing | Network type mismatch (R2: broadcast, R3: point-to-point) |
| 6 | R1–R2 | Empty — no neighbour entry | R1's Gi0/0 is passive-interface — OSPF Hellos suppressed |
3. Scenario 1 — Area ID Mismatch
R1 and R2 are directly connected on Gi0/0 with IPs on the
10.0.12.0/30 subnet. Both routers are running OSPF process 1.
show ip ospf neighbor is empty on both routers.
Layer 1 and 2 are healthy — the ping between 10.0.12.1 and
10.0.12.2 succeeds.
Step 1 — Confirm No Neighbour and Verify Basic Reachability
NetsTuts_R1#show ip ospf neighbor ! ── Empty output ────────────────────────────────────────────────── NetsTuts_R1#ping 10.0.12.2 Sending 5, 100-byte ICMP Echos to 10.0.12.2: !!!!! Success rate is 100 percent (5/5)
Step 2 — Compare Area IDs with show ip ospf interface
NetsTuts_R1#show ip ospf interface GigabitEthernet0/0
GigabitEthernet0/0 is up, line protocol is up
Internet Address 10.0.12.1/30, Area 0, Attached via Network Statement
Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1
Transmit Delay is 1 sec, State DR, Priority 1
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
oob-resync timeout 40
Hello due in 00:00:04
Supports Link-local Signaling (LLS)
Neighbor Count is 0, Adjacent neighbor count is 0
NetsTuts_R2#show ip ospf interface GigabitEthernet0/0
GigabitEthernet0/0 is up, line protocol is up
Internet Address 10.0.12.2/30, Area 1, Attached via Network Statement
Process ID 1, Router ID 2.2.2.2, Network Type BROADCAST, Cost: 1
Transmit Delay is 1 sec, State DR, Priority 1
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:07
Neighbor Count is 0, Adjacent neighbor count is 0
Step 3 — Confirm with debug ip ospf events
NetsTuts_R1#debug ip ospf events OSPF events debugging is on OSPF: Rcv hello from 2.2.2.2 area 1 on GigabitEthernet0/0 from 10.0.12.2 OSPF: Mismatched hello parameters from 10.0.12.2 OSPF: Dead R 40 C 40, Hello R 10 C 10 Mask R 255.255.255.252 C 255.255.255.252 OSPF: area mismatch: my area 0 peer area 1 NetsTuts_R1#undebug all
debug ip ospf events is the definitive tool for
Hello parameter failures — it shows exactly which field caused
the rejection. The line area mismatch: my area 0 peer
area 1 pinpoints the fault without any ambiguity. The
debug also shows that the Hello timer (10/10), Dead timer
(40/40), and subnet mask (255.255.255.252) all match — only
the area is wrong. This isolates the fix to a single parameter.
Always run undebug all immediately after capturing
the needed output.
Step 4 — Fix the Area Mismatch
! ── Decision: both ends of the R1–R2 link must be in the same area ! ── Design intent is area 0 — fix R2's network statement ───────── NetsTuts_R2(config)#router ospf 1 NetsTuts_R2(config-router)#no network 10.0.12.0 0.0.0.3 area 1 NetsTuts_R2(config-router)#network 10.0.12.0 0.0.0.3 area 0 NetsTuts_R2(config-router)#exit ! ── Verify neighbour forms ──────────────────────────────────────── NetsTuts_R2#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 1.1.1.1 1 FULL/BDR 00:00:37 10.0.12.1 GigabitEthernet0/0
Area Mismatch — Common Causes and Prevention
| Scenario | Likely Cause | Prevention |
|---|---|---|
| Two area 0 routers with link in area 1 | Copy-paste error — wrong area number in network statement for that link | Always verify with show ip ospf interface after any OSPF config change |
| ABR with wrong area on one interface | Area boundary router misconfigured — one side area 0, other side wrong area number | Document the area topology and cross-check each interface area assignment |
| New router added with area 0 but existing is non-backbone | New device assumed all OSPF is area 0 — not true in multi-area deployments | Check the existing router's area before configuring the new one |
4. Scenario 2 — Hello / Dead Timer Mismatch
R1 and R2 form a neighbour relationship briefly but it drops
every 40 seconds and immediately re-forms. The syslog shows
alternating %OSPF-5-ADJCHG: FULL to DOWN and
DOWN to FULL messages at a precise 40-second
interval. This is called OSPF flapping.
Step 1 — Observe the Flapping Pattern
NetsTuts_R1#show logging | include OSPF Mar 7 20:10:00: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Gi0/0 from LOADING to FULL Mar 7 20:10:40: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Gi0/0 from FULL to DOWN Mar 7 20:10:41: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Gi0/0 from LOADING to FULL Mar 7 20:11:21: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Gi0/0 from FULL to DOWN
Step 2 — Compare Timers on Both Interfaces
NetsTuts_R1#show ip ospf interface GigabitEthernet0/0 ... Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5 Hello due in 00:00:03 NetsTuts_R2#show ip ospf interface GigabitEthernet0/0 ... Timer intervals configured, Hello 20, Dead 80, Wait 80, Retransmit 5 Hello due in 00:00:18
Step 3 — Fix the Timer Mismatch
! ── Option A: Correct R2 to match R1's defaults (10/40) ────────── NetsTuts_R2(config)#interface GigabitEthernet0/0 NetsTuts_R2(config-if)#ip ospf hello-interval 10 NetsTuts_R2(config-if)#ip ospf dead-interval 40 NetsTuts_R2(config-if)#exit ! ── Option B: Remove custom timers and restore IOS defaults ─────── NetsTuts_R2(config)#interface GigabitEthernet0/0 NetsTuts_R2(config-if)#no ip ospf hello-interval NetsTuts_R2(config-if)#no ip ospf dead-interval NetsTuts_R2(config-if)#exit ! ── Option C: Use fast OSPF timers (sub-second) on BOTH sides ───── NetsTuts_R1(config)#interface GigabitEthernet0/0 NetsTuts_R1(config-if)#ip ospf dead-interval minimal hello-multiplier 5 ! ── Dead interval = 1 second, Hello every 200 ms (5 per second) NetsTuts_R2(config)#interface GigabitEthernet0/0 NetsTuts_R2(config-if)#ip ospf dead-interval minimal hello-multiplier 5 NetsTuts_R2(config-if)#exit ! ── Verify stable adjacency ─────────────────────────────────────── NetsTuts_R1#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 2.2.2.2 1 FULL/BDR 00:00:36 10.0.12.2 GigabitEthernet0/0 ! ── Dead Time should reset every 10 s (from 40 s) — never reach 0
Timer Mismatch Impact at Different Hello Intervals
| R1 Hello / Dead | R2 Hello / Dead | Result | Drop Interval |
|---|---|---|---|
| 10 / 40 | 10 / 40 | Stable — 4 Hellos per dead interval | Never drops |
| 10 / 40 | 20 / 80 | Flapping — R1's dead timer (40 s) expires before R2's Hello (20 s) arrives twice | Every 40 s |
| 10 / 40 | 30 / 120 | Flapping — R1's dead timer expires well before R2's second Hello | Every 40 s |
| 30 / 120 | 30 / 120 | Stable — NBMA defaults, 4 Hellos per dead interval | Never drops |
| 10 / 40 | 10 / 60 | Stable — Hellos arrive every 10 s, dead timer (40 s) never expires on either side | Never drops (but non-standard — not recommended) |
5. Scenario 3 — MTU Mismatch (Stuck at EXSTART)
R2 and R3 are connected via Gi0/1 and Gi0/0 respectively.
Hellos are exchanging successfully — the neighbour appears in
show ip ospf neighbor — but the state is stuck
at EXSTART for several minutes without
progressing to EXCHANGE. No routes are being learned.
Step 1 — Observe the Stuck State
NetsTuts_R2#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 3.3.3.3 1 EXSTART/DR 00:00:37 10.0.23.6 GigabitEthernet0/1 ! ── State has been EXSTART for over 3 minutes ───────────────────── ! ── Dead Time still counting down and resetting — Hellos ARE flowing ! ── But state never advances to EXCHANGE ─────────────────────────
Step 2 — Check MTU on Both Interfaces
NetsTuts_R2#show interfaces GigabitEthernet0/1 GigabitEthernet0/1 is up, line protocol is up Hardware is ISR4321-2x1GE, address is 0c1a.2b3c.0201 Internet address is 10.0.23.5/30 MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec NetsTuts_R3#show interfaces GigabitEthernet0/0 GigabitEthernet0/0 is up, line protocol is up Hardware is ISR4321-2x1GE, address is 0c1a.2b3c.0301 Internet address is 10.0.23.6/30 MTU 1476 bytes, BW 1000000 Kbit/sec, DLY 10 usec
Step 3 — Confirm with debug ip ospf events
NetsTuts_R2#debug ip ospf events OSPF events debugging is on OSPF: Rcv DBD from 3.3.3.3 on GigabitEthernet0/1 seq 0x1A2B opt 0x52 flag 0x7 len 32 OSPF: First DBD and we are not SLAVE OSPF: Retransmitting DBD to 3.3.3.3 on GigabitEthernet0/1 OSPF: Retransmitting DBD to 3.3.3.3 on GigabitEthernet0/1 OSPF: Retransmitting DBD to 3.3.3.3 on GigabitEthernet0/1 ! ── Continuous retransmission — DBD exchange never completes ────── NetsTuts_R2#undebug all
Step 4 — Fix: Align MTUs or Use mtu-ignore
! ── Fix A: Align the MTU on R3 to match R2 ─────────────────────── NetsTuts_R3(config)#interface GigabitEthernet0/0 NetsTuts_R3(config-if)#ip mtu 1500 NetsTuts_R3(config-if)#exit ! ── Fix B (workaround): Ignore MTU during DBD exchange ─────────── ! ── Apply on BOTH interfaces for symmetry ───────────────────────── NetsTuts_R2(config)#interface GigabitEthernet0/1 NetsTuts_R2(config-if)#ip ospf mtu-ignore NetsTuts_R2(config-if)#exit NetsTuts_R3(config)#interface GigabitEthernet0/0 NetsTuts_R3(config-if)#ip ospf mtu-ignore NetsTuts_R3(config-if)#exit ! ── Note: ip ospf mtu-ignore does NOT change the actual MTU ────── ! ── It only tells OSPF to skip MTU validation during DBD exchange. ! ── Packets larger than the smaller MTU may still be fragmented. ! ── Fix A (aligning actual MTU) is always preferable. ! ── Verify adjacency advances past EXSTART ─────────────────────── NetsTuts_R2#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 3.3.3.3 1 FULL/DR 00:00:38 10.0.23.6 GigabitEthernet0/1
ip ospf mtu-ignore masks the problem
but does not prevent larger packets from being fragmented or
dropped at Layer 2, which can cause other performance issues.
Use ip ospf mtu-ignore only as a temporary
workaround when you cannot immediately change the MTU (e.g.,
during a change freeze window) and document it for follow-up.
Common Causes of MTU Mismatch on OSPF Links
| Cause | Typical MTU Values | Fix |
|---|---|---|
| GRE tunnel overlay changing underlay MTU | Physical: 1500 / Tunnel-facing: 1476 (1500 - 24 byte GRE header) | Set ip mtu 1476 on both physical interfaces or ip ospf mtu-ignore |
| PPPoE WAN link reducing MTU | LAN: 1500 / PPPoE WAN: 1492 (1500 - 8 byte PPPoE header) | Set ip mtu 1492 on the WAN-facing interface |
| Jumbo frames on one side only | One side: 9000 (jumbo) / Other: 1500 (standard) | Align both interfaces to the same MTU — lower to 1500 if jumbo not supported end-to-end |
| Misconfigured ip mtu command | Any non-standard value set by accident or from a template | no ip mtu to restore default, or set explicitly to 1500 |
6. Scenario 4 — Authentication Mismatch
R1 was recently hardened — OSPF MD5 authentication was enabled on all its interfaces as part of a security policy. After the change, the R1–R2 neighbour disappeared and has not re-formed. R2 has not yet been updated with the authentication configuration.
Step 1 — Confirm Neighbour is Absent
NetsTuts_R1#show ip ospf neighbor ! ── Empty ───────────────────────────────────────────────────────── NetsTuts_R1#ping 10.0.12.2 !!!!! ! ── IP reachability still works — fault is OSPF-specific ─────────
Step 2 — Check Authentication Configuration
NetsTuts_R1#show ip ospf interface GigabitEthernet0/0 GigabitEthernet0/0 is up, line protocol is up Internet Address 10.0.12.1/30, Area 0 Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1 Timer intervals configured, Hello 10, Dead 40 Simple password authentication enabled ← Auth type shown ! ── or: Message digest authentication enabled ─────────────────── NetsTuts_R2#show ip ospf interface GigabitEthernet0/0 GigabitEthernet0/0 is up, line protocol is up Internet Address 10.0.12.2/30, Area 0 Process ID 1, Router ID 2.2.2.2, Network Type BROADCAST, Cost: 1 Timer intervals configured, Hello 10, Dead 40 ! ── No authentication line — R2 has no OSPF auth configured ─────
Simple password authentication
enabled (or MD5 if key chain is used), while R2's
interface has no authentication line — authentication is
disabled. OSPF authentication validation happens before all
other Hello field checks — if authentication fails, the Hello
is discarded immediately and the sender does not receive any
error notification. The neighbour never reaches INIT state.
Step 3 — Confirm with debug ip ospf events
NetsTuts_R1#debug ip ospf events
OSPF: Rcv pkt from 10.0.12.2, GigabitEthernet0/0 :
Mismatch Authentication type. Input packet specified type 0,
we use type 2
! ── Type 0 = no auth (R2), Type 2 = MD5 (R1) ────────────────────
NetsTuts_R2#debug ip ospf events
OSPF: Rcv pkt from 10.0.12.1, GigabitEthernet0/0 :
Mismatch Authentication Key - No key configured but pkt has
a key, or there is key mismatch
NetsTuts_R1#undebug all
NetsTuts_R2#undebug all
Step 4 — Fix the Authentication Mismatch
! ── Check what R1 is using ──────────────────────────────────────── NetsTuts_R1#show running-config interface GigabitEthernet0/0 interface GigabitEthernet0/0 ip address 10.0.12.1 255.255.255.252 ip ospf authentication message-digest ip ospf message-digest-key 1 md5 NetsTuts@OSPF ip ospf hello-interval 10 ! ── Configure matching auth on R2 ───────────────────────────────── NetsTuts_R2(config)#interface GigabitEthernet0/0 NetsTuts_R2(config-if)#ip ospf authentication message-digest NetsTuts_R2(config-if)#ip ospf message-digest-key 1 md5 NetsTuts@OSPF NetsTuts_R2(config-if)#exit ! ── Verify neighbour forms ──────────────────────────────────────── NetsTuts_R1#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 2.2.2.2 1 FULL/BDR 00:00:38 10.0.12.2 GigabitEthernet0/0
NetsTuts@OSPF) must all match on both interfaces.
A mismatch in the key ID alone (e.g., R1 uses key ID 1, R2
uses key ID 2) also causes authentication failure even if
the key string is the same — OSPF uses the key ID to select
which key to validate against. The adjacency forms
immediately after matching authentication is configured on R2.
OSPF Authentication Types — Summary
| Type | IOS Command (Interface) | Security | Notes |
|---|---|---|---|
| Type 0 — None | no ip ospf authentication (default) |
None — Hellos are unauthenticated | Default — fine for lab, not recommended for production |
| Type 1 — Plain text | ip ospf authentication + ip ospf authentication-key [key] |
Low — key visible in plain text in packet captures | Prevents accidental neighbour formation — not secure against captures |
| Type 2 — MD5 | ip ospf authentication message-digest + ip ospf message-digest-key [id] md5 [key] |
Medium — key is MD5-hashed in the packet | Recommended for production — prevents rogue router injection |
7. Scenario 5 — Network Type Mismatch
R2 and R3 have a stable OSPF neighbour relationship — both show
FULL state in show ip ospf neighbor. However,
routes learned from R3 are not appearing in R2's routing table,
and vice versa. The link is an Ethernet point-to-point connection
between two routers (no switches, no other OSPF routers on
this segment).
Step 1 — Check Neighbour State and DR/BDR Roles
NetsTuts_R2#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 3.3.3.3 1 FULL/DR 00:00:37 10.0.23.6 GigabitEthernet0/1 NetsTuts_R3#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 2.2.2.2 0 FULL/DROTHER 00:00:35 10.0.23.5 GigabitEthernet0/0
Step 2 — Check Network Types on Both Interfaces
NetsTuts_R2#show ip ospf interface GigabitEthernet0/1 GigabitEthernet0/1 is up, line protocol is up Internet Address 10.0.23.5/30, Area 0 Process ID 1, Router ID 2.2.2.2, Network Type BROADCAST, Cost: 1 Transmit Delay is 1 sec, State BDR, Priority 1 Timer intervals configured, Hello 10, Dead 40 NetsTuts_R3#show ip ospf interface GigabitEthernet0/0 GigabitEthernet0/0 is up, line protocol is up Internet Address 10.0.23.6/30, Area 0 Process ID 1, Router ID 3.3.3.3, Network Type POINT_TO_POINT, Cost: 1 Transmit Delay is 1 sec, State POINT_TO_POINT Timer intervals configured, Hello 10, Dead 40 Neighbor Count is 1, Adjacent neighbor count is 1
Step 3 — Fix the Network Type
! ── For a two-router Ethernet P2P link, point-to-point is preferred ! ── (no DR/BDR election, faster convergence) ────────────────────── ! ── Set BOTH interfaces to the same network type ───────────────── NetsTuts_R2(config)#interface GigabitEthernet0/1 NetsTuts_R2(config-if)#ip ospf network point-to-point NetsTuts_R2(config-if)#exit ! ── Verify both are now point-to-point ─────────────────────────── NetsTuts_R2#show ip ospf interface GigabitEthernet0/1 ... Network Type POINT_TO_POINT, Cost: 1 Transmit Delay is 1 sec, State POINT_TO_POINT ... Neighbor Count is 1, Adjacent neighbor count is 1 NetsTuts_R2#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 3.3.3.3 0 FULL/ - 00:00:39 10.0.23.6 GigabitEthernet0/1 NetsTuts_R2#show ip route ospf O 192.168.30.0/24 [110/2] via 10.0.23.6, 00:00:14, GigabitEthernet0/1
FULL/ -
(the dash indicates no DR/BDR — correct for P2P), and OSPF
routes from R3 immediately appear in R2's routing table.
Using ip ospf network point-to-point on Ethernet
links between exactly two routers is a best practice — it
eliminates the DR/BDR election overhead and speeds up
convergence. If there are more than two OSPF routers on the
same Ethernet segment (e.g., a shared LAN), broadcast mode
with DR/BDR is required.
Network Type Mismatch Outcomes
| Router A Type | Router B Type | Neighbour Forms? | Routes Exchanged? | Symptom |
|---|---|---|---|---|
| broadcast | broadcast | Yes | Yes | Normal — DR/BDR election occurs |
| point-to-point | point-to-point | Yes | Yes | Normal — no DR/BDR, FULL/- |
| broadcast | point-to-point | Yes — reaches FULL | Partial / broken | Routes may be missing — inconsistent DR roles, LSA flooding unreliable |
| broadcast | non-broadcast | Maybe — timers differ (10/40 vs 30/120) | No | Timer mismatch also present — neighbour flaps or never forms |
8. Scenario 6 — Passive Interface / Wrong Network Statement
R1 has no OSPF neighbours at all after initial configuration — not even on the R1–R2 link. R2 shows no neighbour for R1 either. The OSPF process is running on R1. The ping between 10.0.12.1 and 10.0.12.2 succeeds.
Step 1 — Check OSPF Process and Network Statements
NetsTuts_R1#show ip ospf
Routing Process "ospf 1" with ID 1.1.1.1
Start time: 00:12:44.221, Time elapsed: 00:45:12.009
Supports only single TOS(TOS0) routes
...
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
Area BACKBONE(0)
Number of interfaces in this area is 2
...
Active interfaces: GigabitEthernet0/1
Passive interfaces: GigabitEthernet0/0
show ip ospf command reveals the problem
immediately — Gi0/0 (the R1–R2 link) is listed as a
Passive interface. A passive OSPF interface
does not send or receive OSPF Hello packets — it is
advertised into OSPF as a connected network but participates
in no neighbour relationships. This is intentional for stub
networks facing end hosts (to prevent hosts from becoming
OSPF neighbours) but disastrous if accidentally applied to a
router-to-router link.
Step 2 — Find the Passive Interface Configuration
NetsTuts_R1#show running-config | section router ospf router ospf 1 passive-interface GigabitEthernet0/0 network 10.0.12.0 0.0.0.3 area 0 network 192.168.10.0 0.0.0.255 area 0
passive-interface GigabitEthernet0/0
command is suppressing all OSPF Hello packets on the R1–R2
link. This was likely a copy-paste or template error — the
passive-interface command was intended for Gi0/1 (the stub
network facing end hosts), not Gi0/0 (the inter-router link).
The network statement correctly covers the 10.0.12.0/30
subnet — the only problem is the passive-interface.
Step 3 — Check for Wrong Network Statement (Secondary Cause)
! ── Alternative: What if passive-interface is not the issue? ────── ! ── Check if network statement covers the interface IP ─────────── NetsTuts_R1#show ip ospf interface GigabitEthernet0/0 %OSPF: OSPF not enabled on GigabitEthernet0/0 ! ── Interface is not in any OSPF network statement ─────────────── ! ── Check what network statement is configured ─────────────────── NetsTuts_R1#show running-config | section router ospf router ospf 1 network 10.0.13.0 0.0.0.3 area 0 ! ^^^^^^ Wrong — should be 10.0.12.0 not 10.0.13.0 ────── network 192.168.10.0 0.0.0.255 area 0 ! ── 10.0.12.1 (Gi0/0 address) is NOT covered by 10.0.13.0/30 ──── ! ── OSPF is not enabled on Gi0/0 at all ──────────────────────────
show ip ospf interface [int] returns
%OSPF: OSPF not enabled on [interface], the
interface's IP address is not matched by any OSPF network
statement — OSPF is completely absent from that interface.
A one-digit typo in the network statement (10.0.13.0 instead
of 10.0.12.0) causes the interface to be silently excluded
from OSPF. No error is generated — OSPF simply ignores the
interface.
Step 4 — Fix Both Issues
! ── Fix A: Remove passive-interface from the router link ───────── NetsTuts_R1(config)#router ospf 1 NetsTuts_R1(config-router)#no passive-interface GigabitEthernet0/0 NetsTuts_R1(config-router)#exit ! ── Fix B: Correct the wrong network statement ──────────────────── NetsTuts_R1(config)#router ospf 1 NetsTuts_R1(config-router)#no network 10.0.13.0 0.0.0.3 area 0 NetsTuts_R1(config-router)#network 10.0.12.0 0.0.0.3 area 0 NetsTuts_R1(config-router)#exit ! ── Verify OSPF is now enabled on Gi0/0 ───────────────────────── NetsTuts_R1#show ip ospf interface GigabitEthernet0/0 GigabitEthernet0/0 is up, line protocol is up Internet Address 10.0.12.1/30, Area 0, Attached via Network Statement ... Neighbor Count is 1, Adjacent neighbor count is 1 NetsTuts_R1#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 2.2.2.2 1 FULL/BDR 00:00:37 10.0.12.2 GigabitEthernet0/0
passive-interface default
to make all interfaces passive, then use
no passive-interface [int] explicitly for each
router-to-router link. This approach is fail-safe — new
interfaces default to passive and never accidentally become
OSPF-speaking toward end hosts.
Passive Interface — Correct vs Incorrect Usage
| Interface Type | Passive-Interface? | Reason |
|---|---|---|
| Router-to-router link (inter-router) | ❌ No — must not be passive | OSPF Hellos must flow between routers to form adjacency |
| Stub LAN facing end hosts only | ✅ Yes — should be passive | Prevents unnecessary Hellos on user-facing segments; the network is still advertised into OSPF |
| Loopback interface | ✅ Yes — passive by nature | Loopbacks cannot form adjacencies; marking passive is optional but consistent with best practice |
| WAN link to ISP (not running OSPF) | ✅ Yes — passive if OSPF-enabled | Prevents OSPF Hellos being sent to ISP devices that do not understand them |
9. Full Diagnostic Reference & Decision Tree
show ip ospf neighbor — Complete Field Guide
NetsTuts_R2#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 1.1.1.1 1 FULL/BDR 00:00:36 10.0.12.1 GigabitEthernet0/0 ← [1] 3.3.3.3 0 FULL/ - 00:00:38 10.0.23.6 GigabitEthernet0/1 ← [2] ! ── Field meanings ─────────────────────────────────────────────── ! Neighbor ID : OSPF Router ID of the peer (highest IP on loopback, ! or highest interface IP if no loopback) ! Pri : OSPF priority used for DR/BDR election on this link ! 0 = never eligible to be DR or BDR ! State : Current neighbour state / DR role ! FULL/BDR [1] : Full adjacency; this router is the BDR on that link ! FULL/ - [2] : Full adjacency; point-to-point — no DR/BDR ! FULL/DR : Full adjacency; this router is the DR ! 2WAY/DROTHER : 2-way only; neither router is DR/BDR (correct for DROTHERs) ! EXSTART/DR : Stuck in master/slave election — check MTU ! INIT : Hellos received but not bidirectional — check ACL ! Dead Time : Countdown to declaring neighbour dead ! Should reset every hello-interval seconds — never reach 0 ! If steadily counting down to 0 → Hello not arriving ! Address : Source IP of peer's Hello packets (peer's interface IP) ! Interface : Local interface on which the neighbour is seen
show ip ospf interface — The Primary Comparison Tool
NetsTuts_R2#show ip ospf interface GigabitEthernet0/0
GigabitEthernet0/0 is up, line protocol is up
Internet Address 10.0.12.2/30, Area 0 ← [A] Area ID
Attached via Network Statement
Process ID 1, Router ID 2.2.2.2
Network Type BROADCAST, Cost: 1 ← [B] Network type
Transmit Delay is 1 sec, State BDR, Priority 1 ← [C] DR/BDR state
Designated Router (ID) 1.1.1.1, Interface address 10.0.12.1
Backup Designated Router (ID) 2.2.2.2, Interface address 10.0.12.2
Timer intervals configured, Hello 10, Dead 40 ← [D] Timers
Wait 40, Retransmit 5
Hello due in 00:00:08
Supports Link-local Signaling (LLS)
Message digest authentication enabled ← [E] Auth type
Youngest key id is 1
Neighbor Count is 1, Adjacent neighbor count is 1 ← [F] Neighbour count
| Marker | Field | What to Check | Must Match Peer? |
|---|---|---|---|
| [A] | Area | Area number — compare with peer's same field | Yes — must be identical |
| [B] | Network Type | BROADCAST / POINT_TO_POINT / NON_BROADCAST — compare with peer | Yes — mismatch causes route exchange failure even if FULL state reached |
| [C] | State / Priority | DR / BDR / DROTHER / POINT_TO_POINT — check for unexpected DR roles | No — but should be consistent with topology (P2P should show POINT_TO_POINT) |
| [D] | Hello / Dead | Hello interval and dead interval — compare with peer | Yes — must be identical on both ends |
| [E] | Authentication | None / Simple password / Message digest — compare with peer | Yes — type and key must match |
| [F] | Neighbour Count | Should be ≥ 1 if a neighbour is expected on this link | N/A — reflects current neighbour state |
OSPF Adjacency Troubleshooting Decision Tree
| Symptom | First Check | Key Finding | Fix |
|---|---|---|---|
| No neighbour — empty table, ping fails | show ip interface brief — interface status |
Interface down/down or wrong subnet | Fix Layer 1/2/3 first — OSPF cannot run on a down interface |
| No neighbour — empty table, ping succeeds | show ip ospf interface [int] on both routers |
Area, auth, or timer mismatch; or interface passive / not in OSPF | Compare [A][D][E] fields — correct the mismatched parameter |
| No neighbour — interface shows "OSPF not enabled" | show run | section router ospf |
Network statement does not cover interface IP, or wrong wildcard mask | Correct the network statement to include the interface IP |
| No neighbour — passive interface suspected | show ip ospf — passive interfaces section |
Router-to-router interface listed as passive | no passive-interface [int] under router ospf |
| Neighbour stuck at INIT | show ip access-lists on both routers |
ACL blocking 224.0.0.5 in one direction | Permit OSPF multicast (224.0.0.5) in both directions — see ACL Configuration |
| Neighbour flapping (forms then drops regularly) | show ip ospf interface [int] on both routers |
Hello/dead timer mismatch — drop interval = dead timer of faster side | ip ospf hello-interval and ip ospf dead-interval — align both ends |
| Neighbour stuck at EXSTART | show interfaces [int] on both routers |
MTU mismatch — different MTU values | Align IP MTU with ip mtu [value] or apply ip ospf mtu-ignore as workaround |
| Neighbour FULL but routes missing | show ip ospf interface [int] — Network Type field |
Network type mismatch (broadcast vs point-to-point) | ip ospf network [type] — set same type on both ends |
| Neighbour FULL — specific routes absent | show ip ospf database — check LSA for missing network |
Network not in OSPF process on originating router | Add correct network statement or use redistribute connected |
| Neighbour absent after security change | debug ip ospf events — auth mismatch messages |
Authentication type or key mismatch | Match auth type, key ID, and key string on both interfaces |
Key Points & Exam Tips
- Always verify basic IP connectivity (
ping [peer-ip]) before investigating OSPF — a Layer 1/2/3 fault masquerading as an OSPF issue wastes time. OSPF cannot form neighbours without bidirectional IP reachability. - The neighbour state identifies the fault class immediately: empty/DOWN = Hello not arriving or failing validation; INIT = one-directional only; EXSTART = MTU mismatch; FULL with no routes = network type mismatch or missing network statement.
- OSPF validates five Hello fields before forming a neighbour: area ID, hello/dead timers, authentication, stub area flag, and subnet mask. A mismatch in any of these causes silent Hello rejection — no error message is generated.
show ip ospf interface [int]is the most important OSPF diagnostic command — run it on both ends of a failing link and compare area, network type, timers, and authentication type side by side.debug ip ospf eventsshows exactly which field caused a Hello rejection with a clear message likearea mismatchorMismatch Authentication type. Always follow withundebug allimmediately after capturing output. For persistent monitoring of neighbour state changes use SNMP traps on the%OSPF-5-ADJCHGevent.- OSPF neighbour flapping at a precise interval equal to the dead timer is always a hello/dead timer mismatch — the slower router's Hello arrives after the faster router's dead timer expires.
- A neighbour stuck at EXSTART with Hellos flowing normally is always an MTU mismatch until proven otherwise. Check
show interfaces [int]MTU on both sides. - Network type mismatch (broadcast vs point-to-point) is subtle — the neighbour reaches FULL state but routes are not exchanged. Always check the Network Type field in
show ip ospf interfacewhen routes are missing despite FULL adjacency. - A passive-interface on a router-to-router link suppresses all OSPF Hellos — the neighbour never forms. Use
show ip ospfto see which interfaces are passive. Usepassive-interface default+no passive-interfaceper router link as a secure baseline. - On the CCNA/CCNP exam: know all seven neighbour states and what failure each state implies, the five Hello validation fields, the difference between EXSTART failure (MTU) and FULL-but-no-routes (network type), and the correct output of
show ip ospf neighborfor each link type (FULL/-, FULL/DR, 2WAY/DROTHER).