OSPF Neighbor Flapping Between EXSTART and EXCHANGE
R1 and R2 are directly connected over Gi0/1 in OSPF area 0 on 10.10.12.0/30. Both interfaces are up/up, and ping between 10.10.12.1 and 10.10.12.2 succeeds at every payload size below 1400 bytes. show ip ospf neighbor on both routers shows the adjacency cycling between EXSTART and EXCHANGE and never reaching FULL, and neither router holds a single OSPF-learned route. A floating static keeps the branch reachable, so the ticket was opened three days late. Area ID, hello and dead timers, network type, and authentication all match. R2's Gi0/1 was recently rebuilt from the carrier's handoff template, which sets the interface MTU to 1400; R1's Gi0/1 still reports 1500. Your change policy forbids altering MTU on production interfaces without a maintenance window.
1. What is the most likely root cause? Name the specific evidence in the setup that supports it, and the exact commands you would run to confirm before changing anything.
Read the worked answer
Root cause: an interface MTU mismatch (1500 vs 1400) that breaks the database description exchange.
Reasoning:
- Hello processing already works, because the timers, area, and authentication match. That is why the neighbor gets as far as two-way/ExStart at all.
- The next step is the DBD exchange, and each DBD carries the sender's interface MTU. A router that receives a DBD advertising an MTU larger than its own interface discards it, so master/slave election never completes. The adjacency oscillates between EXSTART and EXCHANGE instead of failing cleanly: that flapping is the signature, not an authentication problem (auth failures normally stop the neighbor from forming at all).
- Ping succeeding proves nothing about MTU, because small packets and fragments fit inside 1400 bytes.
Confirm with:
show ip ospf interface gi0/1 ! on both routers, read the MTU field
show interfaces gi0/1 | include MTU
show ip ospf neighbor ! record state and how often it cycles
A supporting test (ping 10.10.12.2 size 1500 df-bit fails, size 1400 succeeds) points at a path-MTU problem, but a ping failure could originate anywhere along the path. The authoritative check is comparing the OSPF interface MTU on both ends.
2. You cannot change MTU outside a maintenance window tonight. Compare `ip ospf mtu-ignore` with aligning both interfaces to 1400. State which you apply now, which you schedule, and the risk each carries.
Read the worked answer
Apply ip ospf mtu-ignore now as a monitored stopgap; schedule MTU alignment as the real fix.
ip ospf mtu-ignore tells the local router to stop checking the MTU field in received DBDs. It is one line, needs no window, is trivially reverted, and the adjacency forms immediately.
Its risk: it removes the guard without fixing the underlying mismatch. OSPF does not negotiate per-packet size, so any OSPF packet larger than roughly 1400 bytes (a full DBD, a large LSA bundle) must still cross a link that cannot carry it in one piece. The result is retransmissions, intermittent SPF churn, and routes that flap instead of a stable, cleanly failing adjacency. That is a worse failure mode than the one you have, so pair it with adjacency-state monitoring and a dated change ticket.
Scheduled fix: set mtu 1400 on R1 Gi0/1 to match R2 during the window (changing MTU can reset the interface and will re-form the adjacency), then remove ip ospf mtu-ignore so the guard is restored. Before you do, verify that 1400 is a real path limit and not a leftover from the template: if the physical path supports 1500, restoring 1500 on both ends is the better repair. If you later run eBGP or other TCP across the link, add ip tcp adjust-mss 1360 so TCP negotiates a segment size that fits the 1400-byte MTU.
3. Assume both interfaces really are at 1500. What else produces EXSTART/EXCHANGE, and what did the floating static route cost you in this incident?
Read the worked answer
Duplicate OSPF router IDs. If two routers use the same RID (very common when both are built from one template with router-id 1.1.1.1), a router sees its own RID inside a neighbor's DBD and the exchange cannot complete, so the state sits in or oscillates around EXSTART/EXCHANGE. Check show ip ospf and show ip protocols on both sides and compare the local RID with the neighbor's reported RID. Also rule out an MTU problem on any device in the middle of the path, and confirm the network types match (show ip ospf interface).
What the static cost you:
- It masked the failure. Users had reachability, so the ticket was raised three days late, and the monitoring system never alerted because it was testing reachability, not adjacency state. Add an OSPF neighbor-state alert.
- No reconvergence. A static does not reroute when the preferred path degrades; if the OSPF path had come back healthy, traffic would still have followed the static.
- Manual growth. Every new prefix at the branch has to be added by hand, and any mismatch between the static's next hop and reality black-holes traffic silently.