ЁЯУж рдзрдбрд╛ 04 тАФ Layers: рдкреЛрд╣реЛрдЪ-рд╕рд╛рдЦрд│реА
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 04 ┬╖ рдкреБрдвреЗ: lesson-05-tcp-udp
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ04. рдкрддреНрд░, рд▓рдЦреЛрдЯрд╛, рдкрд┐рд╢рд╡реА, рд╡реНрд╣реЕрди, рд░рд╕реНрддрд╛ тАФ internet рдЪреЗ layers, рдЖрдгрд┐ рд▓реЛрдХ "L4" рдЖрдгрд┐ "L7" рдореНрд╣рдгрддрд╛рдд рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдЪрд╛ рдЕрд░реНрде рдХрд╛рдп.
- net/demo.py тАФ
httpрд╡рд┐рднрд╛рдЧ рдПрдХ рдкрддреНрд░ (HTTP) рдереЗрдЯ рд▓рдЦреЛрдЯреНрдпрд╛рдд (TCP) рд▓рд┐рд╣рд┐рддреЛ, рддреНрдпрд╛рдореБрд│реЗ рджреЛрди layers рдПрдХрдореЗрдХрд╛рдВрдирд╛ рдХреБрдареЗ рднрд┐рдбрддрд╛рдд рддреЗ рджрд┐рд╕рддреЗ
ЁЯзТ 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 |
- Encapsulation: рдкреНрд░рддреНрдпреЗрдХ layer рдЖрдкрд▓рд╛ header рдкреБрдвреЗ рдЬреЛрдбрддреЛ. wire рд╡рд░рдЪрд╛ packet рдореНрд╣рдгрдЬреЗ рдПрдХрд╛ frame рдордзреНрдпреЗ headers рдЪреНрдпрд╛ рдЖрдд headers.
- L4 / L7 рд╣реЗ рд╢рдмреНрдж load balancers рдЖрдгрд┐ firewalls рд╡рд╛рдкрд░рддрд╛рдд: L4 рд▓рд╛ ports рджрд┐рд╕рддрд╛рдд, L7 рд▓рд╛ request рджрд┐рд╕рддреЗ.
ЁЯдФ рдХрд╛
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 рдкрд╛рд╣рддреЗ рд╣реЗ рддреБрдореНрд╣реА рд╕рд╛рдВрдЧреВ рд╢рдХрддрд╛.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- L3 рдмрд┐рдШрдбрд▓реЗрд▓рд╛ рдЕрд╕рддрд╛рдирд╛ (route рдирд╛рд╣реА) L7 (app) debug рдХрд░рдгреЗ. рддрд│рд╛рдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░рд╛.
- "OSI model рдордзреНрдпреЗ 7 layers рдЖрд╣реЗрдд" рдЕрд╕реЗ, рдЬрдгреВ internet рд╕рд╛рддрд╣реА рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рд╡рд╛рдкрд░рддреЗ рдЕрд╢рд╛ рдерд╛рдЯрд╛рдд рдореНрд╣рдгрдгреЗ. рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ 5 рд╢рд┐рдХрд╛.
- MTU рд╡рд┐рд╕рд░рдгреЗ: ~1500 bytes рдкреЗрдХреНрд╖рд╛ рдореЛрдареА рдкрд┐рд╢рд╡реА рддреБрдХрдбреНрдпрд╛рдВрдд (fragment) рдХреЗрд▓реА рдЬрд╛рддреЗ рдХрд┐рдВрд╡рд╛ рдЯрд╛рдХреВрди рджрд┐рд▓реА рдЬрд╛рддреЗ.
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: "L4 load balancer", "L7 policy", "L2 adjacency", "VPN рд╡рд░ MTU mismatch" тАФ рдпрд╛рддрд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдХреНрдп рдПрдЦрд╛рджреЗ device рдХреЛрдгрддреЗ рдЖрд╡рд░рдг рд╡рд╛рдЪрддреЗ рдпрд╛рдмрджреНрджрд▓рдЪреЗ рдЖрд╣реЗ.
тПня╕П рдкреБрдвреЗ
рдзрдбрд╛ 05 тАФ TCP рд╡рд┐рд░реБрджреНрдз UDP: рджреЛрди рд▓рдЦреЛрдЯреЗ, рдЖрдгрд┐ handshake рдореБрд│реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рдорд┐рд│рддреЗ.