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

ЁЯУж рдзрдбрд╛ 04 тАФ Layers: рдкреЛрд╣реЛрдЪ-рд╕рд╛рдЦрд│реА

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 04 ┬╖ рдкреБрдвреЗ: lesson-05-tcp-udp


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

рдзрдбреЗ 01тАУ04. рдкрддреНрд░, рд▓рдЦреЛрдЯрд╛, рдкрд┐рд╢рд╡реА, рд╡реНрд╣реЕрди, рд░рд╕реНрддрд╛ тАФ internet рдЪреЗ layers, рдЖрдгрд┐ рд▓реЛрдХ "L4" рдЖрдгрд┐ "L7" рдореНрд╣рдгрддрд╛рдд рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдЪрд╛ рдЕрд░реНрде рдХрд╛рдп.

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

рдХреЛрдгреАрд╣реА рдиреБрд╕рддреЗ рдЙрдШрдбреЗ рдкрддреНрд░ рдШреЗрдКрди рд╢рд╣рд░рднрд░ рдлрд┐рд░рдд рдирд╛рд╣реА. рдкрддреНрд░ рдЦреЛрд▓реА рдХреНрд░рдорд╛рдВрдХ рд▓рд┐рд╣рд┐рд▓реЗрд▓реНрдпрд╛ рд▓рдЦреЛрдЯреНрдпрд╛рдд рдЬрд╛рддреЗ, рд▓рдЦреЛрдЯрд╛ рдЗрдорд╛рд░рддреАрдЪрд╛ рдкрддреНрддрд╛ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрд┐рд╢рд╡реАрдд, рдкрд┐рд╢рд╡реА рдлрдХреНрдд рдкреБрдврдЪрд╛ рдерд╛рдВрдмрд╛ рдорд╛рд╣реАрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡реНрд╣реЕрдирдордзреНрдпреЗ, рдЖрдгрд┐ рд╡реНрд╣реЕрди рд░рд╕реНрддреНрдпрд╛рд╡рд░. рджреБрд╕рд▒реНрдпрд╛ рдЯреЛрдХрд╛рд▓рд╛ рдПрдХреЗрдХ рдЖрд╡рд░рдг рдХреНрд░рдорд╛рдиреЗ рдирд┐рдШрддреЗ, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорджрддрдиреАрд╕ рдлрдХреНрдд рдЖрдкрд▓реЗрдЪ рд▓реЗрдмрд▓ рд╡рд╛рдЪрддреЛ: рдЪрд╛рд▓рдХ рдХрдзреАрдЪ рдкрд┐рд╢рд╡реА рдЙрдШрдбрдд рдирд╛рд╣реА, рдЯрдкрд╛рд▓ рдЦреЛрд▓реА рдХрдзреАрдЪ рдкрддреНрд░ рд╡рд╛рдЪрдд рдирд╛рд╣реА. рдпрд╛рд▓рд╛рдЪ encapsulation рдореНрд╣рдгрддрд╛рдд, рдЖрдгрд┐ рдореНрд╣рдгреВрдирдЪ рдкрддреНрд░рд╛рд▓рд╛ рдХрд│реВ рди рджреЗрддрд╛ рддреБрдореНрд╣реА рд░рд╕реНрддрд╛ рдмрджрд▓реВ рд╢рдХрддрд╛ (Wi-Fi рдРрд╡рдЬреА 5G).

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

flowchart LR
  A["ЁЯУЭ application<br/>HTTP ┬╖ DNS ┬╖ SSH"] --> T["тЬЙя╕П transport<br/>TCP ┬╖ UDP тАФ ports"] --> N["ЁЯОТ network<br/>IP тАФ addresses, routing"] --> D["ЁЯЪР link<br/>Ethernet ┬╖ Wi-Fi тАФ MAC"] --> P["ЁЯЫгя╕П physical<br/>copper ┬╖ fibre ┬╖ radio"]

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

Layer (TCP/IP) OSI рдЖрд╡рд░рдг header рдордзреНрдпреЗ рдХрд╛рдп рдЕрд╕рддреЗ Tools
application (L7) 7 рдкрддреНрд░ HTTP method, path, headers curl, dig
transport (L4) 4 рд▓рдЦреЛрдЯрд╛ ports, sequence numbers ss, nc
network (L3) 3 рдкрд┐рд╢рд╡реА IP addresses, TTL ping, traceroute, ip
link (L2) 2 рд╡реНрд╣реЕрди MAC addresses arp, ip link
physical (L1) 1 рд░рд╕реНрддрд╛ volts, рдкреНрд░рдХрд╛рд╢, radio cable

ЁЯдФ рдХрд╛

layers рдореБрд│реЗрдЪ internet рд╡рд╛рдвреВ рд╢рдХрд▓реЗ: HTTP рдПрдХрджрд╛рдЪ design рдЭрд╛рд▓реЗ рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░ рд╢реЛрдзрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд░рд╕реНрддреНрдпрд╛рд╡рд░реВрди рддреЗ рдкреНрд░рд╡рд╛рд╕ рдХрд░рддреЗ. debugging рдЦрд╛рд▓реВрди рд╡рд░ рдХрд╛ рдЪрд╛рд▓рддреЗ рдпрд╛рдЪреЗ рдХрд╛рд░рдгрд╣реА рд╣реЗрдЪ: рд╡реНрд╣реЕрдирдЪ рдирд┐рдШреВ рд╢рдХрдд рдирд╕реЗрд▓ (link рдирд╛рд╣реА), рддрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкрддреНрд░рд╛рд▓рд╛ рдЕрд░реНрде рдирд╛рд╣реА.

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

http() рдПрдХ TCP socket (L4) рдЙрдШрдбрддреЛ рдЖрдгрд┐ L7 рдЪрд╛ рдордЬрдХреВрд░ рд╣рд╛рддрд╛рдиреЗ рд▓рд┐рд╣рд┐рддреЛ; OS рдЦрд╛рд▓реА IP рдЖрдгрд┐ Ethernet рдЬреЛрдбрддреЗ. рджреБрд╕рд▒реНрдпрд╛ terminal рдордзреНрдпреЗ tcpdump рд╕реЛрдмрдд рдЪрд╛рд▓рд╡рд╛ рдореНрд╣рдгрдЬреЗ рдПрдХрд╛рдЪ packet рдЪрд╛ рдкреНрд░рддреНрдпреЗрдХ layer рддреБрдореНрд╣рд╛рд▓рд╛ рджрд┐рд╕реЗрд▓.

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

python3 net/demo.py http
sudo tcpdump -ni any 'tcp port 80' -c 6 2>/dev/null &      # optional: the envelopes on the wire
python3 net/demo.py http                                    # watch SYN, SYN-ACK, ACK, then PSH with your letter
ip link 2>/dev/null || ifconfig | grep -i ether             # the van's own label: the MAC address

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

http рддреБрдордЪреА request line, 200 OK status line рдЖрдгрд┐ body рдЪрд╛ рдЖрдХрд╛рд░ рдЫрд╛рдкрддреЛ. tcpdump (рдЪрд╛рд▓рд╡рд▓рд╛ рдЕрд╕реЗрд▓ рддрд░) HTTP рдЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ byte рдЖрдзреА three-way handshake рджрд╛рдЦрд╡рддреЛ тАФ рдкрддреНрд░рд╛рдЖрдзреА рд▓рдЦреЛрдЯрд╛ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рддреЛ.

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

HTTP рдореНрд╣рдгрдЬреЗ TCP рд╡рд░, TCP рдореНрд╣рдгрдЬреЗ IP рд╡рд░, рдЖрдгрд┐ IP рддреБрдордЪреНрдпрд╛ Wi-Fi рд╡рд░ рдкреНрд░рд╡рд╛рд╕ рдХрд░рдгрд╛рд░рд╛ рдордЬрдХреВрд░ тАФ рдЖрдгрд┐ рдХреЛрдгрддреЗ tool рдХреЛрдгрддрд╛ layer рдкрд╛рд╣рддреЗ рд╣реЗ рддреБрдореНрд╣реА рд╕рд╛рдВрдЧреВ рд╢рдХрддрд╛.

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

ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: "L4 load balancer", "L7 policy", "L2 adjacency", "VPN рд╡рд░ MTU mismatch" тАФ рдпрд╛рддрд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдХреНрдп рдПрдЦрд╛рджреЗ device рдХреЛрдгрддреЗ рдЖрд╡рд░рдг рд╡рд╛рдЪрддреЗ рдпрд╛рдмрджреНрджрд▓рдЪреЗ рдЖрд╣реЗ.

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

рдзрдбрд╛ 05 тАФ TCP рд╡рд┐рд░реБрджреНрдз UDP: рджреЛрди рд▓рдЦреЛрдЯреЗ, рдЖрдгрд┐ handshake рдореБрд│реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рдорд┐рд│рддреЗ.

ЁЯУж Lesson 04 тАФ The layers: the delivery chain

ЁЯУН You are here: Lesson 04 of 12 ┬╖ Next: lesson-05-tcp-udp


ЁЯУж What's in this branch

Lessons 01тАУ04. Letter, envelope, bag, van, road тАФ the layers of the internet, and what "L4" and "L7" mean when people say them.

ЁЯзТ Explain like I'm 5

Nobody carries a bare letter across town. The letter goes in an envelope with the room number, the envelope in a bag with the building's address, the bag in a van that only knows the next stop, and the van on a road. At the other end each wrapper comes off in turn, and each helper reads only their own label: the driver never opens a bag, the postroom never reads a letter. That is encapsulation, and it is why you can change the road (Wi-Fi to 5G) without the letter noticing.

ЁЯЧ║я╕П Diagram

flowchart LR
  A["ЁЯУЭ application<br/>HTTP ┬╖ DNS ┬╖ SSH"] --> T["тЬЙя╕П transport<br/>TCP ┬╖ UDP тАФ ports"] --> N["ЁЯОТ network<br/>IP тАФ addresses, routing"] --> D["ЁЯЪР link<br/>Ethernet ┬╖ Wi-Fi тАФ MAC"] --> P["ЁЯЫгя╕П physical<br/>copper ┬╖ fibre ┬╖ radio"]

тЭУ What

Layer (TCP/IP) OSI The wrapper Header carries Tools
application (L7) 7 the letter HTTP method, path, headers curl, dig
transport (L4) 4 the envelope ports, sequence numbers ss, nc
network (L3) 3 the bag IP addresses, TTL ping, traceroute, ip
link (L2) 2 the van MAC addresses arp, ip link
physical (L1) 1 the road volts, light, radio the cable

ЁЯдФ Why

Layers are why the internet could grow: HTTP was designed once and rides every road invented since. They are also why debugging works bottom-up: if the van cannot leave (no link), no letter matters.

ЁЯФз How (in this repo)

http() opens a TCP socket (L4) and writes the L7 text by hand; the OS adds IP and Ethernet below. Run it with tcpdump in another terminal and you see every layer of the same packet.

ЁЯзк Try it

python3 net/demo.py http
sudo tcpdump -ni any 'tcp port 80' -c 6 2>/dev/null &      # optional: the envelopes on the wire
python3 net/demo.py http                                    # watch SYN, SYN-ACK, ACK, then PSH with your letter
ip link 2>/dev/null || ifconfig | grep -i ether             # the van's own label: the MAC address

тЬЕ Verify тАФ what you should see

http prints your request line, the 200 OK status line and the body size. tcpdump (if you ran it) shows the three-way handshake before the first byte of HTTP тАФ the envelope exists before the letter.

ЁЯПБ What you just proved

HTTP is text riding on TCP riding on IP riding on your Wi-Fi тАФ and you can name which tool looks at which layer.

тЪая╕П Common mistakes

ЁЯПн Why this matters in production: "L4 load balancer", "L7 policy", "L2 adjacency", "MTU mismatch on the VPN" тАФ every one of these is a sentence about which wrapper a device reads.

тПня╕П Next

Lesson 05 тАФ TCP vs UDP: the two envelopes, and what a handshake buys you.

тЖР Previousports socketsNext тЖТtcp udp

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