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.
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.
| Counter | Side | Meaning & where it increments |
|---|---|---|
| input errors | ingress | Aggregate 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. |
| CRC | ingress | Frame'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. |
| runts | ingress | Frame shorter than 64 bytes with a bad FCS. Classic sign of collisions (half-duplex) or a truncating transceiver. |
| giants | ingress | Frame larger than the allowed MTU (incl. any tag) with a bad FCS. Usually an MTU/jumbo mismatch or a corrupting NIC. |
| frame | ingress | Frame received with a non-integer number of bytes (dribble/alignment error) and a bad FCS. Media/duplex problem. |
| overrun | ingress | The 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. |
| ignored | ingress | The interface ran out of internal buffers/descriptors and dropped the frame. Related to overruns; a resource problem. |
| input queue drops | ingress | The software input queue (SPD/hold-queue) filled — often means packets punted to CPU faster than the control plane can service them (see CoPP). |
| no buffer | ingress | No system buffer was available to receive the frame; discarded. Buffer-pool exhaustion, often paired with high CPU. |
| input discards / drops | ingress | Frame received cleanly but intentionally dropped: policer/rate-limit, ACL, wrong VLAN, interface not in forwarding, storm-control, unsupported protocol. No wire corruption. |
| output discards / drops | egress | Frame 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 errors | egress | Errors while transmitting (buffer failures, deferred-to-death). Rare on modern gear; when present, look at collisions. |
| collisions | egress | Collision 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 collisions | egress | Collision detected after the first 64 bytes were sent. Never normal — the smoking gun for duplex mismatch or a cable longer than spec. |
| deferred | egress | Transmit had to wait because the medium was busy. Congestion indicator on shared/half-duplex media. |
| babbles | egress | Transmitted 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.
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.
| Clearing helps | Clearing hurts | |
|---|---|---|
| Why | Gives 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. |
| Monitoring | — | Your NMS/SNMP deltas will show a dip or negative spike when the on-box counter jumps back to zero — false alarms for everyone else. |
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.
show interface output (and the "last clearing" time /
uptime) before clearing, so the evidence isn't lost.clear counters Gi0/1
(Cisco IOS) / clear interfaces statistics ge-0/0/1 (Junos). Note the exact timestamp.clear counters may reset the CLI
view while the SNMP ifCounters (or certain hardware counters) keep running, or vice versa — don't
assume one clear resets everything. Some hardware counters only zero on reboot.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.
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.)
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.
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."
| Side | What it sees | Why |
|---|---|---|
| Half-duplex end | late collisions, runts, collisions, output errors | It 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 end | CRC / FCS, input errors, alignment/frame errors | It 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.
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.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
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 cause | Egress 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 triggers | Speed 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 check | Queue 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 direction | Add 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.
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.
0 dBm = 1 mW; every
-3 dB is roughly half the power. More negative = weaker.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
| Symptom | Likely cause | Check |
|---|---|---|
| Link flapping (up/down/up) | Marginal optic/cable, low light, autoneg fight, dirty connector, dying laser | Log timestamps for the flap rate; DOM Rx trend; swap cable/optic |
| Unsupported/"GBIC not recognized" | Non-matching / uncoded / third-party SFP, or wrong platform support | show inventory, vendor/PID; try a known-good coded optic |
| Wavelength / type mismatch | LR optic paired with SR, or different CWDM/DWDM channels on each end | Both ends must be same type & wavelength; check part numbers |
| Auto-negotiation failure | One end auto, one end forced; bad AN on old gear | show interfaces status; align speed/duplex config |
| Speed/duplex mismatch | See duplex section | Compare both ends |
| Copper cable fault | Broken pair, bad crimp, EMI, too-long run | TDR / cable test (test cable-diagnostics tdr), swap cable |
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.
ping succeeds, ping with a large
size and DF set fails, throughput is fine for interactive traffic and zero for bulk transfers.! 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.
A grab-bag of failures worth being able to recognize on sight. Each has a distinctive fingerprint.
| Case | Signature | Diagnosis & fix |
|---|---|---|
| STP loop / broadcast storm | Sudden 100% link utilization, sky-high CPU, MAC-address-table churn, whole VLAN unreachable | A 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 flapping | Log: "host X moving from port A to port B" repeating; the same MAC learned on two ports | A 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 port | Port err-disabled, no traffic, syslog naming the trigger | Triggered 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 link | Link shows up but traffic flows only one way; can create STP loops on fiber | One fiber strand or one Tx/Rx path failed (broken strand, dirty connector, bad optic). UDLD detects and errdisables it. Check optics/strands. |
| Microbursts | Output drops rising while 1–5 min average utilization looks low | Sub-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 exhaustion | Traffic works but some routes/ACLs behave oddly; syslog about TCAM/FIB full; some flows punt to CPU | Routing/ACL/MAC tables exceed ASIC capacity. Check show platform ... tcam/hardware utilization; adjust SDM template, summarize routes, trim ACLs. |
| Control-plane high CPU / CoPP punts | High CPU, sluggish management, input queue drops, control protocols flapping | Too 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 incomplete | Neighbor stuck Incomplete; no L2 reachability to that IP | The 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. |
clear counters, then watch whether they climb now and how fast.