← Interview Prep

Troubleshooting Scenarios

Physical and L1–L2 failures, counter by counter: what increments, on which side, why, and how to fix it.

Almost every "the network is broken" ticket that reaches an engineer is really an L1/L2 problem wearing an application costume. The discipline that separates a senior answer from a junior one is simple: read the interface counters, know which side they increment on, and watch the rate rather than the total. State the governing idea out loud before touching anything:

Counters are directional. Input errors are counted where the frame was received; output drops are counted where the frame was trying to leave. A CRC error means the frame arrived corrupted — so it was already damaged on the wire before this port saw it. Always compare both ends of the link; a single side never tells the whole story.

Interface counter primer

The table below is the reference every other section builds on. "Side" tells you where the counter lives: ingress (RX, the receiving port) or egress (TX, the sending port). Getting the side right is half of the diagnosis.

CounterSideMeaning & where it increments
input errorsingressAggregate of everything wrong on receive: CRC + runts + giants + overruns + ignored + frame errors. A roll-up, not a root cause — always drill into the sub-counters.
CRCingressFrame's FCS didn't match the computed checksum → the frame was corrupted on the wire. Increments on the receiving port. Points at L1 (cable/optics/EMI) or duplex mismatch.
runtsingressFrame shorter than 64 bytes with a bad FCS. Classic sign of collisions (half-duplex) or a truncating transceiver.
giantsingressFrame larger than the allowed MTU (incl. any tag) with a bad FCS. Usually an MTU/jumbo mismatch or a corrupting NIC.
frameingressFrame received with a non-integer number of bytes (dribble/alignment error) and a bad FCS. Media/duplex problem.
overruningressThe receiver's hardware couldn't hand bytes to a buffer fast enough — RX ring / DMA exhausted. Usually a receive-side performance / buffering limit, not a wire fault.
ignoredingressThe interface ran out of internal buffers/descriptors and dropped the frame. Related to overruns; a resource problem.
input queue dropsingressThe software input queue (SPD/hold-queue) filled — often means packets punted to CPU faster than the control plane can service them (see CoPP).
no bufferingressNo system buffer was available to receive the frame; discarded. Buffer-pool exhaustion, often paired with high CPU.
input discards / dropsingressFrame received cleanly but intentionally dropped: policer/rate-limit, ACL, wrong VLAN, interface not in forwarding, storm-control, unsupported protocol. No wire corruption.
output discards / dropsegressFrame ready to send but dropped because the egress queue was full — congestion, microburst, tail-drop, or a QoS/WRED policy. The buffer ran out on the way out.
output errorsegressErrors while transmitting (buffer failures, deferred-to-death). Rare on modern gear; when present, look at collisions.
collisionsegressCollision during transmit on a half-duplex segment. Normal in tiny numbers on half-duplex; any collisions on a "full-duplex" link mean a duplex mismatch.
late collisionsegressCollision detected after the first 64 bytes were sent. Never normal — the smoking gun for duplex mismatch or a cable longer than spec.
deferredegressTransmit had to wait because the medium was busy. Congestion indicator on shared/half-duplex media.
babblesegressTransmitted a frame longer than max size. Almost always a failing NIC/driver.
Memory hook: if it's corrupted on arrival, it's an input/CRC counter; if it's dropped because there was nowhere to put it on the way out, it's an output discard. Errors = something is wrong with the bits. Discards = the bits were fine, we chose (or were forced) to drop the frame.

Clearing counters — should you?

The trap that catches juniors: interface counters are cumulative since the last clear or reboot — they do not reset on their own. A port showing 8471 CRC tells you nothing until you know over what window: 8471 errors accumulated over two years of uptime is noise; 8471 in the last five minutes is a fire. Always read the "Last clearing of counters" line (Cisco) / uptime and reason about the rate, not the absolute number.

The number to trust is a rate (errors/second) or a ratio (errors ÷ total frames), not a raw total. A handful of CRCs over billions of packets is a one-off; a climbing ratio is a real fault.

Clear, or don't?

Clearing helpsClearing hurts
WhyGives a clean baseline so you can see whether errors are incrementing right now, and measure a fresh rate during a test window.You destroy the history — you can't recover the "errors vs uptime" ratio, and you can't retroactively analyse the incident.
MonitoringYour NMS/SNMP deltas will show a dip or negative spike when the on-box counter jumps back to zero — false alarms for everyone else.

The better move: compute a rate without clearing

You almost never need to clear. Take two timestamped snapshots a known interval apart and subtract — you get the current error rate and keep all history:

show interface Gi0/1        # note CRC = N1, and the time
  ... wait 60s ...
show interface Gi0/1        # CRC = N2
  => error rate = (N2 - N1) / 60  errors/sec  (0 = not incrementing now)

Even better, let monitoring do it: SNMP/streaming-telemetry deltas, or gNMI ON_CHANGE on the error leaves (see gNMI & Telemetry) give you the rate continuously without touching anything.

If you do clear — the strategy

  1. Record first. Save the full show interface output (and the "last clearing" time / uptime) before clearing, so the evidence isn't lost.
  2. Clear only the affected interface, not the whole box: clear counters Gi0/1 (Cisco IOS) / clear interfaces statistics ge-0/0/1 (Junos). Note the exact timestamp.
  3. Warn the team / NMS — the baseline reset will perturb dashboards and delta-based alerts.
  4. Watch the increment during a controlled test (link up, traffic, a specific change) and read the fresh rate.

Two things people get wrong

CRC errors

A CRC (FCS) error is the single most common L1 symptom. The frame carried a 4-byte checksum; the receiver recomputed it over the received bits and got a different value → the frame was corrupted in transit and is dropped. It increments on the ingress / receiving side, because that's the only side that can detect the mismatch.

Common causes, roughly in order of frequency

Cut-through switching caveat: a store-and-forward switch validates the FCS and drops corrupted frames, so CRC errors stop at that switch. A cut-through switch starts forwarding after reading only the destination MAC — before it has seen the FCS — so it propagates corrupted frames downstream. The result: CRC errors appear several hops away from the actual bad link. When counters show CRCs but the local cabling is clean, walk upstream toward the source. (Modern cut-through switches can auto-transition to store-and-forward when error rates rise — "adaptive cut-through" — precisely to stop this.)

What CRC counters look like

Router# show interfaces GigabitEthernet0/1
  ...
  5 minute input rate 220000 bits/sec, 41 packets/sec
     1283746 packets input, 984733120 bytes, 0 no buffer
     Received 12043 broadcasts (0 IP multicasts)
     0 runts, 0 giants, 0 throttles
     8471 input errors, 8471 CRC, 0 frame, 0 overrun, 0 ignored
     0 watchdog, 0 multicast, 0 pause input
     ...
     0 output errors, 0 collisions, 1 interface resets

Here input errors == CRC and nothing else — a clean "the bits are arriving corrupted" signature. No runts, no overruns → not congestion, not a buffer problem. Check the cable, the optics, and the duplex on both ends.

Duplex mismatch — the classic signature

This is a favorite interview question because the signature is so specific. It happens when one end auto-negotiates and the other is hard-set (or two ends disagree): a common outcome is one side at full duplex and the other at half duplex. The link comes up, small flows work, and the users complain that it "works but is painfully slow."

The tell-tale split of counters

SideWhat it seesWhy
Half-duplex endlate collisions, runts, collisions, output errorsIt believes the medium is shared and uses CSMA/CD. The full-duplex peer transmits whenever it wants, so the half-duplex side detects collisions — and because they arrive after 64 bytes, they're late collisions. Frames aborted mid-transmit show up as runts.
Full-duplex endCRC / FCS, input errors, alignment/frame errorsIt transmits whenever it likes and never expects a collision. The half-duplex peer, following CSMA/CD, backs off and truncates its own frames, so the full-duplex side receives corrupted, incomplete frames → FCS/CRC and input errors.
One-line answer for the interview: "Late collisions and runts on one end, CRC/FCS and input errors on the other, with terrible throughput under load — that's a duplex mismatch until proven otherwise." The throughput collapses specifically as offered load rises, because that's when both ends try to transmit simultaneously.

How to confirm and fix

  1. Look at both ends. If one shows late collisions and the peer shows CRC, you've confirmed it — no other fault produces that split.
  2. Check negotiated state: show interfaces status — a mismatch often reads a-full on one side and half (no "a-") on the other, or one port shows a speed/duplex the other doesn't.
  3. Fix by making both ends agree. Best practice: either autoneg on both ends, or hard-set speed and duplex on both ends. The dangerous half-state is one end auto and the other hard-coded — that's what creates the mismatch. On modern gigabit+ links, leave autoneg on both ends (gigabit essentially requires it).
Switch# show interfaces status
Port      Name    Status    Vlan   Duplex   Speed  Type
Gi1/0/5           connected 10     a-full   a-1000 10/100/1000BaseTX
Gi1/0/6           connected 10       half      100 10/100/1000BaseTX   <-- mismatch

! remedy: pin both ends identically
Switch(config)# interface Gi1/0/6
Switch(config-if)# speed 1000
Switch(config-if)# duplex full

Input vs output discards

Discards are clean frames intentionally dropped — no wire corruption. The direction tells you the whole story of why.

Output discards (egress)Input discards (ingress)
Root causeEgress congestion: the outbound queue filled and packets were tail-dropped.Ingress-side policy or resource: policer/rate-limit, ASIC/buffer limit, protocol/interface state.
Typical triggersSpeed step-down (10G→1G), many-to-one fan-in, microbursts, oversubscribed uplink, aggressive QoS/WRED/shaper dropping.Ingress policer or storm-control, CoPP punts to CPU, ACL drops, wrong/unallowed VLAN on a trunk, interface not yet forwarding (STP), unsupported protocol.
What to checkQueue depth & drops per queue, offered vs. link rate, buffer allocation, burst size. Look at the downstream/narrow link.Policer/CoPP hit counters, ACL match counts, VLAN membership, STP state, control-plane CPU.
Fix directionAdd bandwidth, tune buffers/queue-limits, shape the source, re-mark/prioritize, spread the fan-in.Raise/adjust the policer, fix the ACL/VLAN, protect the control plane, correct interface config.

The quick mental test: output discards mean "too much traffic wanted to leave through this port at once." Input discards mean "the box received it fine but a rule, a policer, or a resource limit said no." Output discards climb with utilization; input discards track a policy or a punt path.

Switch# show interfaces GigabitEthernet1/0/24 | include drops|rate
  5 minute input rate 640000 bits/sec, 120 packets/sec
  5 minute output rate 986000000 bits/sec, 92000 packets/sec
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 148213
     <-- output drops rising while the average is under line rate => microbursts

Note the trap: the 5-minute average output rate can look comfortably below line rate while Total output drops keeps climbing. That gap is the fingerprint of a microburst — see the microburst note below.

Physical-layer & optical diagnostics

When counters point at L1, go to the transceiver's own telemetry. DOM/DDM (Digital Optical Monitoring / Digital Diagnostics Monitoring) exposes real-time Tx power, Rx power, temperature, bias current, and voltage — usually via show interfaces transceiver or show interface transceiver detail.

Reading optical power (dBm)

Switch# show interfaces TenGigabitEthernet1/1/1 transceiver detail
          Optical   Optical
          Transmit  Receive
Port      Power     Power     Temperature  Voltage  Current
          (dBm)     (dBm)     (Celsius)    (Volts)  (mA)
--------  --------  --------  -----------  -------  -------
Te1/1/1    -2.3      -18.9 --  41.2         3.28     6.4
                     ^^^^^ below Rx sensitivity (-14.4 dBm) => low-light alarm

! thresholds shown by the platform:
!   Rx power:  high alarm -1.0 / high warn -2.0 / low warn -13.9 / low alarm -14.4 dBm
!   -18.9 dBm is under the low ALARM => clean the fiber, check bend radius, reseat/replace

Other L1 faults to name

SymptomLikely causeCheck
Link flapping (up/down/up)Marginal optic/cable, low light, autoneg fight, dirty connector, dying laserLog timestamps for the flap rate; DOM Rx trend; swap cable/optic
Unsupported/"GBIC not recognized"Non-matching / uncoded / third-party SFP, or wrong platform supportshow inventory, vendor/PID; try a known-good coded optic
Wavelength / type mismatchLR optic paired with SR, or different CWDM/DWDM channels on each endBoth ends must be same type & wavelength; check part numbers
Auto-negotiation failureOne end auto, one end forced; bad AN on old gearshow interfaces status; align speed/duplex config
Speed/duplex mismatchSee duplex sectionCompare both ends
Copper cable faultBroken pair, bad crimp, EMI, too-long runTDR / cable test (test cable-diagnostics tdr), swap cable

MTU / jumbo-frame mismatch

An MTU mismatch has a signature all its own: small frames pass, large frames are silently dropped. Ping with a small size works; a file transfer or anything with full-size packets stalls. Symptoms that "ping works but SSH/HTTP hangs" or "the connection establishes then freezes when data flows" often trace to MTU.

! prove it: small ping ok, large-with-DF fails at the mismatch point
Router# ping 10.0.30.22 size 1500 df-bit
  .....  Success rate is 0 percent (0/5)
Router# ping 10.0.30.22 size 1400 df-bit
  !!!!!  Success rate is 100 percent (5/5)
! => the path chokes somewhere between 1400 and 1500; find the small-MTU hop

Fix: make MTU consistent end-to-end (all switches in an L2 domain, both ends of a routed link), and never filter ICMP unreachables that PMTUD depends on. On tunnels, consider MSS clamping.

Other high-value cases

A grab-bag of failures worth being able to recognize on sight. Each has a distinctive fingerprint.

CaseSignatureDiagnosis & fix
STP loop / broadcast stormSudden 100% link utilization, sky-high CPU, MAC-address-table churn, whole VLAN unreachableA physical or logical loop with STP broken/disabled. Find the redundant path; verify STP is enabled and root is where you expect; enable storm-control, loop guard, BPDU guard.
MAC flappingLog: "host X moving from port A to port B" repeating; the same MAC learned on two portsA loop; legitimate dual-homing without MLAG/vPC; a duplicated MAC; or Wi-Fi roaming — a client moving between APs relearns its MAC on a different uplink (normal, but noisy). Trace the two ports; fix the loop or configure a proper multi-chassis LAG. If the "ports" are AP uplinks, it's expected roaming — filter/raise the flap threshold rather than chase a loop.
Err-disabled portPort err-disabled, no traffic, syslog naming the triggerTriggered by BPDU guard (a switch plugged into an edge port), port-security violation, or link-flap detection. Fix the cause, then shutdown/no shutdown or set err-disable recovery.
UDLD / unidirectional linkLink shows up but traffic flows only one way; can create STP loops on fiberOne fiber strand or one Tx/Rx path failed (broken strand, dirty connector, bad optic). UDLD detects and errdisables it. Check optics/strands.
MicroburstsOutput drops rising while 1–5 min average utilization looks lowSub-second traffic spikes overflow the egress buffer between polling samples. Averages hide them — you need per-queue drop counters and buffer/queue-depth visibility. Tune buffers, spread fan-in, or add bandwidth.
TCAM / hardware-table exhaustionTraffic works but some routes/ACLs behave oddly; syslog about TCAM/FIB full; some flows punt to CPURouting/ACL/MAC tables exceed ASIC capacity. Check show platform ... tcam/hardware utilization; adjust SDM template, summarize routes, trim ACLs.
Control-plane high CPU / CoPP puntsHigh CPU, sluggish management, input queue drops, control protocols flappingToo much traffic punted to CPU (broadcast storm, ARP flood, TTL-expiry, ACL logging, an attack). Check show processes cpu; CoPP protects the CPU by policing punted traffic — read its drop counters.
ARP incompleteNeighbor stuck Incomplete; no L2 reachability to that IPThe target isn't answering ARP: wrong VLAN, host down, ACL blocking, duplex/L1 fault dropping the reply, or wrong subnet/mask. Verify L1/L2 to the host first.

Methodology — work bottom-up

  1. Start at L1. Optics/DOM, cabling, and the interface counters come first. Most "network" problems are physical. Confirm the link is clean before blaming routing or the application.
  2. Clear the counters and watch the RATE, not the total. A total of "8000 CRCs" is meaningless — it could be from a cable pull two years ago. clear counters, then watch whether they climb now and how fast.
  3. Always compare BOTH ends of the link. Duplex mismatch, unidirectional links, and optical problems only make sense when you read both sides together.
  4. Correlate with logs and timestamps. Line up flaps, err-disable events, and MAC-move messages against when the user noticed the problem. Timestamps turn a guess into a timeline.
  5. Change one thing at a time. Swap the cable or the optic or the port — not all three — so you actually learn what fixed it. Then re-check the rate.

Likely follow-up questions

Reference companion to Life of a Packet. When the theory says the frame should arrive but it doesn't — this is where you look.