← Module 09 · Operations & Troubleshooting

Network Troubleshooting & Diagnostic Tools

Make the next test answer a question. A long command history is not the same thing as an explanation.

Short answer: define the failure precisely, find its scope, form a testable hypothesis, and collect evidence that can rule it out. Change one relevant thing with a rollback plan, then repeat the original failing operation. Connectivity tests only prove the protocol, destination, and conditions they actually exercised.

Useful foundations: route selection, neighbor resolution, and DNS resolution.

Think like a bicycle mechanic

A rider reports that a bicycle makes a clicking sound. A mechanic asks whether it happens while pedaling, braking, or coasting, then reproduces it and isolates a component. Replacing the wheel, chain, and pedals together might silence it without explaining why. A network report such as "the internet is down" needs the same refinement: which application, client, network, destination, and time? A DNS error is different from a TCP timeout or an HTTP 403.

A repeatable workflow

  1. Define: record the exact operation, error, timestamp/time zone, source interface, and destination name/IP/port. Note VPN and proxy use.
  2. Scope: compare one affected and one unaffected client, or the same client on two approved paths. Keep other conditions comparable.
  3. Hypothesize: "The client received the wrong DNS server" predicts a resolver mismatch. "The network is broken" predicts nothing specific.
  4. Test: inspect the configured resolver and query the intended one. Decide in advance what result would contradict your hypothesis.
  5. Change and verify: apply an authorized, reversible correction. Repeat the original test and check related services, not just a convenient ping.

Checking the bicycle's chain while coasting tells you little about a noise that happens only under pedal load. Likewise, a successful TCP connection from your admin laptop doesn't reproduce a user's Wi-Fi path, identity, proxy, or application request.

HTTPS DEPENDENCIES: CHOOSE THE RELEVANT BOUNDARY Link + IP configRoute + neighborDNS answer TCP connectionTLS handshakeHTTP response A successful lower-level test does not certify the levels above it
A dependency checklist, not a mandatory command order. HTTP/3 uses QUIC over UDP, and an explicit proxy changes which endpoint the client contacts.

Inspect before changing

The following are read-only inspection commands. Linux examples assume iproute2; tools and output vary by distribution. Record only the relevant fields and protect internal names, addresses, and identifiers before sharing output.

QuestionWindows PowerShellLinux shell
Address, gateway, DNS?Get-NetIPConfigurationip address show; resolvectl status on systemd-resolved hosts
Installed IPv4 routes?Get-NetRoute -AddressFamily IPv4ip -4 route show
Selected route to the target?Find-NetRoute -RemoteIPAddress 192.0.2.20ip route get 192.0.2.20
Neighbor state?Get-NetNeighbor -AddressFamily IPv4ip neigh show
Local TCP listeners?Get-NetTCPConnection -State Listenss -lnt

192.0.2.20 is a documentation address, not a real test service. Substitute an approved target. An IPv4 169.254.x.x address on a DHCP-configured client may indicate that no usable DHCP lease was obtained; it doesn't by itself identify why. A missing ARP entry can simply mean the client hasn't tried that neighbor recently. For IPv6, inspect IPv6 routes and NDP instead of assuming the IPv4 result covers both families.

Active tests and their limits

TestWindows / Linux exampleWhat it does not prove
Four ICMP echo requestsping -n 4 192.0.2.20 / ping -c 4 192.0.2.20No reply doesn't prove the host is down; ICMP may be filtered or rate-limited
Observed hopstracert -d 192.0.2.20 / traceroute -n 192.0.2.20Missing intermediate replies don't prove forwarding loss; probe protocols and return paths differ
DNS A recordResolve-DnsName app.example -Type A / dig app.example AA response doesn't prove it is the intended answer or the resolver path used by the application
TCP portTest-NetConnection 192.0.2.20 -Port 443 / nc -vz -w 3 192.0.2.20 443 (OpenBSD-style netcat)A completed handshake doesn't prove TLS, HTTP, authentication, or UDP/QUIC works
HTTPS requestcurl.exe --connect-timeout 3 --max-time 10 -I https://app.example/ / use curl on LinuxHEAD may behave differently from GET; curl may use different proxy/trust settings than the browser

app.example is reserved for documentation. Replace it with your approved service name. In Windows PowerShell, use curl.exe to avoid the older curl alias for Invoke-WebRequest. Do not use -k to hide a certificate failure. A trust error is evidence to investigate, not a successful health check with an inconvenient warning.

Worked case: name resolution fails, the service responds

In a synthetic lab, a client has 10.20.0.42/24, gateway 10.20.0.1, and a configured resolver at 10.20.0.53. An approved HTTPS endpoint is 192.0.2.20. The application name fails to resolve. Start by recording the failing query and resolver, then run these separate, bounded Windows checks after substituting real lab values:

Resolve-DnsName app.example -Server 10.20.0.53 -Type A
Test-NetConnection 192.0.2.20 -Port 443
curl.exe --connect-timeout 3 --max-time 10 --resolve app.example:443:192.0.2.20 -I https://app.example/

--resolve supplies an address while retaining the URL hostname for TLS SNI, certificate verification, and HTTP host selection. Using https://192.0.2.20/ instead would change those conditions. The bypass comparison assumes a direct connection; an HTTPS proxy may resolve/connect to the origin itself. Inspect approved proxy settings rather than bypassing organizational controls.

Synthetic observationSupported conclusionNext check
DNS query times outNo usable reply from that resolver during the testResolver health and the DNS path; timeout is not NXDOMAIN
TCP 443 succeedsA TCP connection to that address/port completedKeep testing the intended TLS name and HTTP operation
Named curl bypass validates TLS and receives HTTP 200That direct endpoint answered the test request without DNS lookupInvestigate the resolution path; this is not proof that every application dependency is healthy

The mechanic now has a repeatable test under load, not a guess. Compare the configured DNS server with the intended DHCP option or managed configuration, then investigate that discrepancy. Don't replace corporate DNS with a public resolver as a blanket fix: private names and split DNS may require the original infrastructure.

Common misreadings

LEAVE A REPRODUCIBLE HANDOFF

Record the symptom, scope, timestamp/time zone, tested source/destination/protocol, exact command, result, hypothesis, change, and verification. Keep captures and sensitive output in approved storage. Recovery and root-cause confirmation are separate outcomes.

Go deeper with packet capture, ICMP, MTU and fragmentation, and the full request path.

Sources