ЁЯПл The SchoolтА║ЁЯХ╕я╕П NetworkingтА║ЁЯФз рдзрдбрд╛ 12 тАФ network рдЪреЗ debugging: рддрдкрд╛рд╕рдгреАрдЪреА рд╢рд┐рдбреА
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯФз рдзрдбрд╛ 12 тАФ network рдЪреЗ debugging: рддрдкрд╛рд╕рдгреАрдЪреА рд╢рд┐рдбреА

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 12 ┬╖ ЁЯОУ рд╢реЗрд╡рдЯрдЪрд╛


ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ

рдзрдбреЗ 01тАУ12 тАФ рд╕рдВрдкреВрд░реНрдг рдХреЛрд░реНрд╕. "рдмрдВрдж рдкрдбрд▓реЗ" рдЪреЗ рд░реВрдкрд╛рдВрддрд░ рдирд╛рд╡ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХрд╛рд░рдгрд╛рдд рдХрд░рдгрд╛рд░реА рд╢рд┐рдбреА, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрд░реАрд╡рд░рдЪреА рд╕рд╛рдзрдирдкреЗрдЯреА.

ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ

рдкрддреНрд░ рдкреЛрд╣реЛрдЪрдд рдирд╛рд╣реА рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдЗрдорд╛рд░рддреАрд╡рд░ рдУрд░рдбрдд рдирд╛рд╣реА. рддреБрдореНрд╣реА рдПрдХ рд╢рд┐рдбреА рдЪрдврддрд╛: рдирд╛рд╡ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдЖрд╣реЗ рдХрд╛? рдорд▓рд╛ рдЗрдорд╛рд░рддреАрдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрддрд╛ рддрд░реА рдпреЗрддреЗ рдХрд╛? рдХреЛрдгрддрд╛ corridor рдЪреБрдХрддреЛ? рдЦреЛрд▓реА рдЙрдШрдбреА рдЖрд╣реЗ рдХрд╛? рд╕реАрд▓ рд╡реИрдз рдЖрд╣реЗ рдХрд╛? рдкрддреНрд░ рд╕реНрд╡рддрдГ рдиреАрдЯ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗ рдХрд╛? рддреНрдпрд╛рдирдВрддрд░рдЪ: рдХрд╛рд░рдХреБрдирд╛рдиреЗ log рдордзреНрдпреЗ рдХрд╛рдп рд▓рд┐рд╣рд┐рд▓реЗ? рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрд░реАрд▓рд╛ рдПрдХ tool рдЕрд╕рддреЗ, рдЖрдгрд┐ рдЬреА рдкрд╣рд┐рд▓реА рдкрд╛рдпрд░реА fail рд╣реЛрддреЗ рддреАрдЪ рдХрд╛рд░рдг рд╕рд╛рдВрдЧрддреЗ.

ЁЯЧ║я╕П рдЖрдХреГрддреА

flowchart LR
  A["1 DNS<br/>dig +short"] --> B["2 reach<br/>ping"] --> C["3 route<br/>traceroute"] --> D["4 port<br/>nc -zv"] --> E["5 TLS<br/>openssl s_client"] --> F["6 HTTP<br/>curl -v"] --> G["7 logs<br/>the app"]

тЭУ рдХрд╛рдп

рдкрд╛рдпрд░реА рдкреНрд░рд╢реНрди Tool рдХрд╛рд░рдг рд╕рд╛рдВрдЧрдгрд╛рд░реА error
1 DNS рдЖрд╣реЗ рдХрд╛? dig +short, nslookup NXDOMAIN, рдЬреБрдирд╛ рдкрддреНрддрд╛
2 рдорд▓рд╛ рдкреЛрд╣реЛрдЪрддрд╛ рдпреЗрддреЗ рдХрд╛? ping, mtr 100% loss (рдХрд┐рдВрд╡рд╛ ping рдЕрдбрд╡рд▓реЗрд▓рд╛ тАФ рддрд░реАрд╣реА рдкрд╛рдпрд░реА 4 рддрдкрд╛рд╕рд╛)
3 рдХреЛрдгрддрд╛ corridor? traceroute, tracepath hops рдПрдХрд╛ router рд╡рд░ рдерд╛рдВрдмрддрд╛рдд
4 рдЦреЛрд▓реА рдЙрдШрдбреА рдЖрд╣реЗ рдХрд╛? nc -zv, ss -ltnp refused (рд░рд┐рдХрд╛рдореА) рд╡рд┐рд░реБрджреНрдз timed out (рдлрд╛рдЯрдХ)
5 рд╕реАрд▓ рд╡реИрдз рдЖрд╣реЗ рдХрд╛? openssl s_client, curl -v expired, рдЪреБрдХреАрдЪреЗ рдирд╛рд╡, рдЕрдиреЛрд│рдЦреА CA
6 рдкрддреНрд░ рдмрд░реЛрдмрд░ рдЖрд╣реЗ рдХрд╛? curl -v, tcpdump 4xx рддреБрдордЪреА рдЪрд┐рдареНрдареА, 5xx рддреНрдпрд╛рдВрдЪреЗ рдХрд╛рд░реНрдпрд╛рд▓рдп, рдЕрдбрдХрдгреЗ = length рдирд╛рд╣реА
7 рдЖрдд рдХрд╛рдп рдШрдбрд▓реЗ? app рдЪреЗ logs, request id рдмрд╛рдХреА рд╕рдЧрд│реЗ

ЁЯдФ рдХрд╛

рдХреНрд░рдо рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рдЖрд╣реЗ: DNS рдЪреА рдЪреВрдХ рдкреБрдврдЪреА рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрд░реА fail рдХрд░реЗрд▓ рдЖрдгрд┐ TLS debugging рдордзреНрдпреЗ рддрд╛рд╕рднрд░ рд╡рд╛рдпрд╛ рдШрд╛рд▓рд╡реЗрд▓. рд▓рдХреНрд╖рдгрд╛рдкрд╛рд╕реВрди рдХрд╛рд░рдгрд╛рдкрд░реНрдпрдВрддрдЪрд╛ рд╕рд░реНрд╡рд╛рдд рдЬрд▓рдж рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рд╣реА рд╢рд┐рдбреА, рдЖрдгрд┐ рддреА laptop, VM рдЖрдгрд┐ pod рд╡рд░ рд╕рд╛рд░рдЦреАрдЪ рдЖрд╣реЗ.

ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)

net/lab.sh HOST standard tools рдиреЗ рдкрд╛рдпрд▒реНрдпрд╛ 1тАУ6 рдЪрд╛рд▓рд╡рддреЛ рдЖрдгрд┐ рд╢реЗрд╡рдЯреА triage рдЪрд╛ рдХреНрд░рдо рдЫрд╛рдкрддреЛ; рдПрдЦрд╛рджреЗ tool рдирд╕реЗрд▓ рддрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрд░реА рдкрд░реНрдпрд╛рдпреА рдорд╛рд░реНрдЧ рд╡рд╛рдкрд░рддреЗ.

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛

bash net/lab.sh example.com
bash net/lab.sh nonexistent.example        # rung 1 fails: NXDOMAIN тАФ stop there
bash net/lab.sh 203.0.113.1                # a documentation address: rung 2 fails тАФ unreachable
bash net/lab.sh expired.badssl.com         # rungs 1тАУ4 pass, rung 5 fails тАФ the seal
sudo tcpdump -ni any 'port 53' -c 4 &  dig +short example.com    # optional: the directory question on the wire

тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ

example.com рд╡рд┐рд░реБрджреНрдз рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрд░реА pass рд╣реЛрддреЗ рдЖрдгрд┐ curl HTTP/2 200 рдЫрд╛рдкрддреЛ. рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдШрдбрд▓реЗрд▓реНрдпрд╛ host рд╡рд┐рд░реБрджреНрдз рдиреЗрдордХреА рдПрдХрдЪ рдкрд╛рдпрд░реА рдЖрдзреА fail рд╣реЛрддреЗ, рдЖрдгрд┐ рддрд┐рдЪрд╛ рд╕рдВрджреЗрд╢ рдХрд╛рд░рдг рд╕рд╛рдВрдЧрддреЛ: NXDOMAIN, unreachable, certificate expired.

ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ

рдХреЛрдгрддреЗрд╣реА "рдмрдВрдж рдкрдбрд▓реЗ" рдШреЗрдКрди, рджреЛрди рдорд┐рдирд┐рдЯрд╛рдВрдЪреНрдпрд╛ рдЖрдд, рд╕рд╛рдд рдкреИрдХреА рдХреЛрдгрддреА рдЧреЛрд╖реНрдЯ рдЪреБрдХрд▓реА рдЖрд╣реЗ рддреЗ рддреБрдореНрд╣реА рд╕рд╛рдВрдЧреВ рд╢рдХрддрд╛ тАФ рддреЗ рд╕рд┐рджреНрдз рдХрд░рдгрд╛рд▒реНрдпрд╛ command рд╕рд╣.

тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛

ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: рд╣реАрдЪ рд╢рд┐рдбреА рдореНрд╣рдгрдЬреЗ runbook. рддреБрдордЪреА hostnames рднрд░реВрди рддреА on-call doc рдордзреНрдпреЗ рдареЗрд╡рд╛; рдкрд╣рд┐рд▓реНрдпрд╛ responder рд▓рд╛ рдкрд╣рд╛рдЯреЗ 3 рд╡рд╛рдЬрддрд╛ рддреА рдЖрдард╡рд╛рд╡реА рд▓рд╛рдЧреВ рдирдпреЗ.

ЁЯПЖ Capstone

рддреБрдореНрд╣реА рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдПрдХрд╛ service рд╕рд╛рдареА рдПрдХрд╛ рдкрд╛рдирд╛рдЪрд╛ runbook рд▓рд┐рд╣рд╛: рддрд┐рдЪреЗ рдирд╛рд╡, рдкрддреНрддрд╛, port, certificate expiry, рд╕рдореЛрд░рдЪрд╛ load balancer, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рдиреЗрдордХреНрдпрд╛ command рд╕рд╣ рд╕рд╛рдд рдкрд╛рдпрд▒реНрдпрд╛. рдордЧ рдореБрджреНрджрд╛рдо рдПрдХ рдкрд╛рдпрд░реА рдореЛрдбрд╛ (рдЪреБрдХреАрдЪреА /etc/hosts рдиреЛрдВрдж, рдмрдВрдж port) рдЖрдгрд┐ runbook рддреА рд╢реЛрдзрддреЛ рд╣реЗ рд╕рд┐рджреНрдз рдХрд░рд╛.

ЁЯОУ рдХреЛрд░реНрд╕ рдкреВрд░реНрдг рдЭрд╛рд▓рд╛

рдЕрднреНрдпрд╛рд╕ рдпреЛрдЬрдирд╛ рдмрд╛рд░рд╛ рдзрдбреНрдпрд╛рдВрд╡рд░ рдЦреВрдг рдХрд░рддреЗ; quiz рддреЗ рддрдкрд╛рд╕рддреЗ; AWS рд╢рд╛рд│рд╛ рд╣реА рдЗрдорд╛рд░рдд рддрд╛рд╕рд╛рдЪреНрдпрд╛ рднрд╛рдбреНрдпрд╛рдиреЗ рджреЗрддреЗ, рдЖрдгрд┐ School portal рдордзреНрдпреЗ certificate рдЖрд╣реЗ.

ЁЯФз Lesson 12 тАФ Debugging the network: the triage ladder

ЁЯУН You are here: Lesson 12 of 12 ┬╖ ЁЯОУ The last one


ЁЯУж What's in this branch

Lessons 01тАУ12 тАФ the whole course. The ladder that turns "it's down" into a named cause, and the toolbox on each rung.

ЁЯзТ Explain like I'm 5

When a letter does not arrive, you do not shout at the building. You climb a ladder: Is the name in the directory? Can I reach the building at all? Which corridor goes wrong? Is the room open? Is the seal valid? Is the letter itself well-formed? Only then: what did the clerk write in the log? Each rung has one tool, and the first rung that fails names the cause.

ЁЯЧ║я╕П Diagram

flowchart LR
  A["1 DNS<br/>dig +short"] --> B["2 reach<br/>ping"] --> C["3 route<br/>traceroute"] --> D["4 port<br/>nc -zv"] --> E["5 TLS<br/>openssl s_client"] --> F["6 HTTP<br/>curl -v"] --> G["7 logs<br/>the app"]

тЭУ What

Rung Question Tool The error that names it
1 is it DNS? dig +short, nslookup NXDOMAIN, stale address
2 can I reach it? ping, mtr 100% loss (or ping blocked тАФ check rung 4 anyway)
3 which corridor? traceroute, tracepath hops stop at one router
4 is the room open? nc -zv, ss -ltnp refused (empty) vs timed out (gate)
5 is the seal valid? openssl s_client, curl -v expired, wrong name, unknown CA
6 is the letter right? curl -v, tcpdump 4xx your slip, 5xx their office, hang = no length
7 what happened inside? the app's logs, request id everything else

ЁЯдФ Why

Order matters: a DNS mistake will fail every later rung and waste an hour of TLS debugging. The ladder is the fastest path from symptom to cause, and it is the same on a laptop, a VM and a pod.

ЁЯФз How (in this repo)

net/lab.sh HOST runs rungs 1тАУ6 with the standard tools and prints the triage order at the end; each falls back when a tool is missing.

ЁЯзк Try it

bash net/lab.sh example.com
bash net/lab.sh nonexistent.example        # rung 1 fails: NXDOMAIN тАФ stop there
bash net/lab.sh 203.0.113.1                # a documentation address: rung 2 fails тАФ unreachable
bash net/lab.sh expired.badssl.com         # rungs 1тАУ4 pass, rung 5 fails тАФ the seal
sudo tcpdump -ni any 'port 53' -c 4 &  dig +short example.com    # optional: the directory question on the wire

тЬЕ Verify тАФ what you should see

Against example.com every rung passes and curl prints HTTP/2 200. Against each broken host exactly one rung fails first, and its message names the cause: NXDOMAIN, unreachable, certificate expired.

ЁЯПБ What you just proved

You can take any "it's down" and, in under two minutes, say which of seven things is wrong тАФ with the command that proved it.

тЪая╕П Common mistakes

ЁЯПн Why this matters in production: this ladder is the runbook. Put it in the on-call doc with your hostnames filled in; the first responder should never have to remember it at 3 a.m.

ЁЯПЖ Capstone

Write a one-page runbook for a service you use: its name, address, port, certificate expiry, the load balancer in front, and the seven rungs with the exact command for each. Then break one rung on purpose (a wrong /etc/hosts entry, a closed port) and prove the runbook finds it.

ЁЯОУ The course is complete

The study plan ticks the twelve off; the quiz checks them; the AWS school rents this building by the hour, and the School portal has the certificate.

тЖР Previousload balancers cdnFinished! Take the quiz тЖТcheck what stuck

This page is the lesson's README from the lesson-12-debugging branch, shown here so the whole School stays on one site. Code files open on GitHub at the same branch.