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

ЁЯУо рдзрдбрд╛ 01 тАФ networking рдХрд╛: рд╢рд╛рд│реЗрдЪреЗ рдЯрдкрд╛рд▓

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 01 ┬╖ рдкреБрдвреЗ: lesson-02-ip-addresses


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

networking рдХреЛрдгрддреА рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рддреЗ тАФ рдЖрдгрд┐ рдПрдХрдЪ рдЪрд┐рддреНрд░ (рдкрддреНрддрд╛, рдЦреЛрд▓реА рдХреНрд░рдорд╛рдВрдХ рдЖрдгрд┐ рд░рд╕реНрддрд╛ рдЕрд╕рд▓реЗрд▓реЗ рдкрддреНрд░) рдЬреЗ рдпрд╛рдирдВрддрд░рдЪрд╛ рдкреНрд░рддреНрдпреЗрдХ рдзрдбрд╛ рд╕рдордЬрд╛рд╡рддреЗ. рд╕рдВрдкреВрд░реНрдг рдХреЛрд░реНрд╕рднрд░ рддреБрдореНрд╣реА рд╡рд╛рдкрд░рд╛рд▓ рдЕрд╢рд╛ рдЦрд▒реНрдпрд╛ files:

ЁЯОТ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдЖрдзреА: рддреБрдореНрд╣рд╛рд▓рд╛ Python 3 рдЖрдгрд┐ рдПрдХ terminal рд▓рд╛рдЧреЗрд▓. online рд╡рд┐рднрд╛рдЧрд╛рдВрдирд╛ (DNS, HTTP, TLS) internet рд▓рд╛рдЧрддреЗ; рддреЗ рдирд╕реЗрд▓ рддрд░ рддреЗ рдирдореНрд░рдкрдгреЗ рд╡рдЧрд│рд▓реЗ рдЬрд╛рддрд╛рдд. рдЪрд╛рдВрдЧрд▓реЗ рд╢реЗрдЬрд╛рд░реА: API рд╢рд╛рд│рд╛ (рд▓рдЦреЛрдЯреНрдпрд╛рдЪреНрдпрд╛ рдЖрдд рдХрд╛рдп рдкреНрд░рд╡рд╛рд╕ рдХрд░рддреЗ) рдЖрдгрд┐ AWS рд╢рд╛рд│рд╛ (рд╣реАрдЪ рдЗрдорд╛рд░рдд, рддрд╛рд╕рд╛рдЪреНрдпрд╛ рднрд╛рдбреНрдпрд╛рдиреЗ).

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

рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЗрдорд╛рд░рддреАрдВрдордзрд▓реНрдпрд╛ рджреЛрди рдореБрд▓рд╛рдВрдирд╛ рдЪрд┐рдареНрдареНрдпрд╛ рдкрд╛рдард╡рд╛рдпрдЪреНрдпрд╛ рдЖрд╣реЗрдд. рдиреБрд╕рддреА рдЪрд┐рдареНрдареА рдХреБрдареЗрдЪ рдЬрд╛рдд рдирд╛рд╣реА. рддрд┐рд▓рд╛ рдПрдХ рд▓рдЦреЛрдЯрд╛ рд▓рд╛рдЧрддреЛ тАФ рдЬреНрдпрд╛рд╡рд░ рджреБрд╕рд▒реНрдпрд╛ рдЗрдорд╛рд░рддреАрдЪрд╛ рдкрддреНрддрд╛, рддреНрдпрд╛ рдореБрд▓рд╛рдЪрд╛ рдЦреЛрд▓реА рдХреНрд░рдорд╛рдВрдХ рдЕрд╕рддреЛ тАФ рдЖрдгрд┐ рджреЛрди рдЗрдорд╛рд░рддреАрдВрдордзрд▓рд╛ рдПрдХ рд░рд╕реНрддрд╛ рд▓рд╛рдЧрддреЛ. рдкрд╛рдард╡рдгрд╛рд▒реНрдпрд╛рд▓рд╛ рдПрдХ рдкрд╛рд╡рддреА рд╣рд╡реА рдЕрд╕рддреЗ тАФ рдХрд┐рдВрд╡рд╛ рдореИрджрд╛рдирд╛рдкрд▓реАрдХрдбреЗ рдорд╛рд░рд▓реЗрд▓реНрдпрд╛ рд╣рд╛рдХреЗрд╕рд╛рдареА рдкрд╛рд╡рддреА рдЕрдЬрд┐рдмрд╛рдд рдирдХреЛ.

рд╣реЗрдЪ рд╕рдВрдкреВрд░реНрдг networking рдЖрд╣реЗ. рдкрддреНрддрд╛ рдореНрд╣рдгрдЬреЗ IP address. рдЦреЛрд▓реА рдореНрд╣рдгрдЬреЗ port. рд░рд╕реНрддрд╛ рдореНрд╣рдгрдЬреЗ рддреБрдордЪреНрдпрд╛ рдЦрд╛рд▓рдЪреЗ layers (Wi-Fi, cables, routers). рдкрд╛рд╡рддреА рдореНрд╣рдгрдЬреЗ TCP; рд╣рд╛рдХ рдореНрд╣рдгрдЬреЗ UDP. "рд╡рд┐рдЬреНрдЮрд╛рди рдкреНрд░рдпреЛрдЧрд╢рд╛рд│рд╛" рдпрд╛ рдирд╛рд╡рд╛рдЪреЗ рдЦреЛрд▓реА рдХреНрд░рдорд╛рдВрдХрд╛рдд рд░реВрдкрд╛рдВрддрд░ рдХрд░рдгрд╛рд░реА рд╢рд╛рд│реЗрдЪреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореНрд╣рдгрдЬреЗ DNS. corridor рдордзрд▓реНрдпрд╛ рдХреЛрдгрд╛рд▓рд╛рд╣реА рд╡рд╛рдЪрддрд╛ рди рдпреЗрдгрд╛рд░рд╛ рд╕реАрд▓ рдХреЗрд▓реЗрд▓рд╛ рд▓рдЦреЛрдЯрд╛ рдореНрд╣рдгрдЬреЗ TLS. рдЖрдд рдХреЛрдг рдпреЗрдК рд╢рдХрддреЗ рд╣реЗ рддрдкрд╛рд╕рдгрд╛рд░реЗ рдлрд╛рдЯрдХ рдореНрд╣рдгрдЬреЗ firewall. рдмрд╛рд░рд╛ рдзрдбреЗ, рдПрдХ рдЯрдкрд╛рд▓ рдЦреЛрд▓реА.

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

flowchart LR
  L["ЁЯТ╗ your laptop<br/>a letter: GET /grades"] --> E["тЬЙя╕П the envelope<br/>to 93.184.216.34 : 443<br/>from 192.168.0.12 : 51234"] --> R["ЁЯЪз the road<br/>router тЖТ ISP тЖТ тАж"] --> S["ЁЯПл the server<br/>room 443 тЖТ the web program"]

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

ЁЯдФ рдХрд╛

рдкреНрд░рддреНрдпреЗрдХ "site рдмрдВрдж рдЖрд╣реЗ", "рдорд╛рдЭреНрдпрд╛ machine рд╡рд░ рддрд░ рдЪрд╛рд▓рддреЗ", "рджреБрд╕рд▒реНрдпрд╛ region рдордзреВрди database рд╣рд│реВ рдЖрд╣реЗ" рд╣рд╛ рдЯрдкрд╛рд▓ рдЦреЛрд▓реАрдЪрд╛рдЪ рдкреНрд░рд╢реНрди рдЕрд╕рддреЛ. рдЬреНрдпрд╛ engineers рдирд╛ рд▓рдЦреЛрдЯрд╛ рд╡рд╛рдЪрддрд╛ рдпреЗрддреЛ рддреЗ рдХрд╛рд╣реА рдорд┐рдирд┐рдЯрд╛рдВрдд рджреЛрд╖ рд╢реЛрдзрддрд╛рдд; рдЬреНрдпрд╛рдВрдирд╛ рдпреЗрдд рдирд╛рд╣реА рддреЗ рдЕрдбрдЪрдг рдЬрд╛рдИрдкрд░реНрдпрдВрдд рдЧреЛрд╖реНрдЯреА restart рдХрд░рдд рд░рд╛рд╣рддрд╛рдд.

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

net/demo.py рд╣реА рд╕рд╛рдд рд╡рд┐рднрд╛рдЧрд╛рдВрдЪреА рдПрдХрдЪ file рдЖрд╣реЗ; рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд╛рдЧ standard library рдЪреНрдпрд╛ socket рдЖрдгрд┐ ssl рдЪреНрдпрд╛ рдХрд╛рд╣реА рдУрд│реАрдВрдЪрд╛: threads рдордзреНрдпреЗ рдПрдХ TCP server рдЖрдгрд┐ client, packets рд╣рд░рд╡рдгрд╛рд░рд╛ UDP sender, рдПрдХ port knocker, byte by byte рдмрд╛рдВрдзрд▓реЗрд▓реА DNS query, рдереЗрдЯ socket рд╡рд░ рд▓рд┐рд╣рд┐рд▓реЗрд▓реА HTTP request, certificate рдЫрд╛рдкрдгрд╛рд░рд╛ TLS handshake, рдЖрдгрд┐ рдПрдХ route рддрдкрд╛рд╕рдгреА. рдкреБрдврдЪрд╛ рдкреНрд░рддреНрдпреЗрдХ рдзрдбрд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдХрдбреЗ рдмреЛрдЯ рджрд╛рдЦрд╡рддреЛ.

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

python3 net/demo.py tcp ports        # two offline sections: a handshake and receipts, then a knock on the usual rooms
python3 net/demo.py                  # all seven (the online ones need the internet)
ip addr 2>/dev/null || ifconfig      # your building's address(es) тАФ find the 192.168.x.x or 10.x.x.x one

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

tcp рд╡рд┐рднрд╛рдЧ рддреБрдордЪрд╛ socket рдЖрдгрд┐ рдХрд╛рд░рдХреБрдирд╛рдЪрд╛ socket рдЕрд╢рд╛ рджреЛрди ip:port рдЬреЛрдбреНрдпрд╛ рдЫрд╛рдкрддреЛ, рдордЧ receipt: 31 bytes. ports рд╡рд┐рднрд╛рдЧ рдкреНрд░рддреНрдпреЗрдХ рд╕реБрдкреНрд░рд╕рд┐рджреНрдз рдЦреЛрд▓реАрд╕рд╛рдареА рдПрдХ рдУрд│ рдЫрд╛рдкрддреЛ, laptop рд╡рд░ рддреНрдпрд╛рддрд▓реНрдпрд╛ рдмрд╣реБрддреЗрдХ closed рдЕрд╕рддрд╛рдд. net/expected-output.txt рд╢реА рддреБрд▓рдирд╛ рдХрд░рд╛ тАФ port numbers рд╡реЗрдЧрд│реЗ рдЕрд╕рддрд╛рдд, рдЖрдХрд╛рд░ рддреЛрдЪ рдЕрд╕рддреЛ.

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

network рд╡рд░рдЪреЗ рд╕рдВрднрд╛рд╖рдг рдореНрд╣рдгрдЬреЗ рджреЛрди address:port рдЬреЛрдбреНрдпрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдордзрд▓рд╛ рд░рд╕реНрддрд╛ тАФ рдЖрдгрд┐ рддреБрдореНрд╣реА Python рдордзреВрди рддреАрди рдУрд│реАрдВрдд рддреЗ рдЙрдШрдбреВ рд╢рдХрддрд╛.

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

ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: рдкреНрд░рддреНрдпреЗрдХ outage ticket рд╕рд╣рд╛ рдкреИрдХреА рдПрдХ рдкреНрд░рд╢реНрди рдЕрд╕рддреЛ тАФ рдирд╛рд╡, рдкреЛрд╣реЛрдЪ, route, рдЦреЛрд▓реА, рд╕реАрд▓, рдХреА рдкрддреНрд░ тАФ рдЖрдгрд┐ рдзрдбрд╛ 12 рдЪреА рд╢рд┐рдбреА рддреЗ рдХреНрд░рдорд╛рдиреЗ рд╡рд┐рдЪрд╛рд░рддреЗ. рдЯрдкрд╛рд▓ рдЦреЛрд▓реА рд╢рд┐рдХрдгреЗ рдореНрд╣рдгрдЬреЗ triage рд╢рд┐рдХрдгреЗ.

тПня╕П рдкреБрдвреЗ

рдзрдбрд╛ 02 тАФ IP addresses рдЖрдгрд┐ subnets: 192.168.0.12/24 рдЦрд░реЛрдЦрд░ рдХрд╛рдп рд╕рд╛рдВрдЧрддреЛ, рдЖрдгрд┐ рдкреГрдереНрд╡реАрд╡рд░рдЪреА рджреЛрди рдШрд░реЗ рддреЛ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдХрд╛ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛рдд.

ЁЯУо Lesson 01 тАФ Why networking: the school post

ЁЯУН You are here: Lesson 01 of 12 ┬╖ Next: lesson-02-ip-addresses


ЁЯУж What's in this branch

The problem networking solves тАФ and the one picture (a letter with an address, a room number and a road) that explains every lesson after this. Real files you will use all the way through:

ЁЯОТ Before you start: you need Python 3 and a terminal. The online sections (DNS, HTTP, TLS) need the internet and skip politely without it. Good neighbours: the API school (what travels inside the envelope) and the AWS school (this building, rented by the hour).

ЁЯзТ Explain like I'm 5

Two children in different buildings want to pass notes. A note alone goes nowhere. It needs an envelope with the other building's address, the room number of the child, and a road between the buildings. And the sender would like a receipt тАФ or, for a shout across the playground, no receipt at all.

That is the whole of networking. The address is an IP address. The room is a port. The road is the layers below you (Wi-Fi, cables, routers). The receipt is TCP; the shout is UDP. The school directory that turns "the science lab" into a room number is DNS. The sealed envelope nobody on the corridor can read is TLS. The gate that checks who may enter is the firewall. Twelve lessons, one post room.

ЁЯЧ║я╕П Diagram

flowchart LR
  L["ЁЯТ╗ your laptop<br/>a letter: GET /grades"] --> E["тЬЙя╕П the envelope<br/>to 93.184.216.34 : 443<br/>from 192.168.0.12 : 51234"] --> R["ЁЯЪз the road<br/>router тЖТ ISP тЖТ тАж"] --> S["ЁЯПл the server<br/>room 443 тЖТ the web program"]

тЭУ What

ЁЯдФ Why

Every "the site is down", "it works on my machine", "the database is slow from the other region" is a post-room question. Engineers who can read an envelope find the fault in minutes; those who cannot restart things until it goes away.

ЁЯФз How (in this repo)

net/demo.py is one file with seven sections, each a few lines of the standard library's socket and ssl: a TCP server and client in threads, a lossy UDP sender, a port knocker, a DNS query built byte by byte, an HTTP request written straight onto a socket, a TLS handshake that prints the certificate, and a route check. Every later lesson points at its section.

ЁЯзк Try it

python3 net/demo.py tcp ports        # two offline sections: a handshake and receipts, then a knock on the usual rooms
python3 net/demo.py                  # all seven (the online ones need the internet)
ip addr 2>/dev/null || ifconfig      # your building's address(es) тАФ find the 192.168.x.x or 10.x.x.x one

тЬЕ Verify тАФ what you should see

The tcp section prints your socket and the clerk's socket as two ip:port pairs, then receipt: 31 bytes. The ports section prints one line per well-known room, most of them closed on a laptop. Compare with net/expected-output.txt тАФ the port numbers differ, the shape does not.

ЁЯПБ What you just proved

A conversation on a network is two address:port pairs and a road between them тАФ and you can open one from Python in three lines.

тЪая╕П Common mistakes

ЁЯПн Why this matters in production: every outage ticket is one of six questions тАФ name, reach, route, room, seal, or letter тАФ and lesson 12's ladder asks them in order. Learning the post room is learning to triage.

тПня╕П Next

Lesson 02 тАФ IP addresses & subnets: what 192.168.0.12/24 really says, and why two homes on earth can share it.

тЖР Course homeall lessonsNext тЖТip addresses

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