ЁЯУм рдзрдбрд╛ 05 тАФ TCP рд╡рд┐рд░реБрджреНрдз UDP: рдиреЛрдВрджрдгреАрдХреГрдд рдЯрдкрд╛рд▓ рд╡рд┐рд░реБрджреНрдз рд▓рд╛рдЙрдбрд╕реНрдкреАрдХрд░
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 05 ┬╖ рдкреБрдвреЗ: lesson-06-dns
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ05. transport рдЪреЗ рджреЛрди рдХрд░рд╛рд░, рдЦрд▒реНрдпрд╛ sockets рд╡рд░ рдкрд╛рд╣рд┐рд▓реЗрд▓реЗ.
- net/demo.py тАФ
tcp: рдПрдХ handshake, рддреАрди рддреБрдХрдбреЗ, рдПрдХ рдкрд╛рд╡рддреА;udp: рджрд╣рд╛ рдЖрд░реЛрд│реНрдпрд╛, рдХрд╛рд╣реА рд╣рд░рд╡рд▓реЗрд▓реНрдпрд╛
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдиреЛрдВрджрдгреАрдХреГрдд рдЯрдкрд╛рд▓ (TCP): рдкрд╣рд┐рд▓реНрдпрд╛ рдкрддреНрд░рд╛рдЖрдзреА рджреЛрдиреНрд╣реА рдХрд╛рд░реНрдпрд╛рд▓рдпреЗ рдмреЛрд▓рд╛рдпрд▓рд╛ рддрдпрд╛рд░ рд╣реЛрддрд╛рдд тАФ "рддрдпрд╛рд░?" "рддрдпрд╛рд░!" "рдЪрд▓рд╛" тАФ рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрддреНрд░рд╛рд▓рд╛ рдХреНрд░рдорд╛рдВрдХ рдЕрд╕рддреЛ, рддреНрдпрд╛рд╡рд░ рд╕рд╣реА рдШреЗрддрд▓реА рдЬрд╛рддреЗ, рд╣рд░рд╡рд▓реЗ рддрд░ рдкреБрдиреНрд╣рд╛ рдкрд╛рдард╡рд▓реЗ рдЬрд╛рддреЗ, рдЖрдгрд┐ рдХреНрд░рдорд╛рдиреЗ рджрд┐рд▓реЗ рдЬрд╛рддреЗ. рд╕реБрд░реБрд╡рд╛рдд рд╣рд│реВ, рдкрдг рдХрд╛рд╣реАрд╣реА рд╣рд░рд╡рдд рдирд╛рд╣реА.
рд▓рд╛рдЙрдбрд╕реНрдкреАрдХрд░ (UDP): рддреБрдореНрд╣реА рдШреЛрд╖рдгрд╛ рдПрдХрджрд╛рдЪ рдУрд░рдбреВрди рд╕рд╛рдВрдЧрддрд╛. рдХрд░рд╛рд░ рдирд╛рд╣реА, рдХреНрд░рдорд╛рдВрдХ рдирд╛рд╣реАрдд, рдкрд╛рд╡рддреА рдирд╛рд╣реА. corridor рдордзрд▓реНрдпрд╛ рдХрд╛рд╣реА рд▓реЛрдХрд╛рдВрдирд╛ рддреА рдРрдХреВ рдпреЗрдд рдирд╛рд╣реА. рдЭрдЯрдкрдЯ, рд╕реНрд╡рд╕реНрдд, рдЖрдгрд┐ рдЙрд╢рд┐рд░рд╛рдкреЗрдХреНрд╖рд╛ рдкреБрдиреНрд╣рд╛ рд╕рд╛рдВрдЧрдгреЗ рдмрд░реЗ рдЕрд╕рддреЗ рддреЗрд╡реНрд╣рд╛ рдЕрдЧрджреА рдпреЛрдЧреНрдп тАФ video frame, game рдордзрд▓реА position, directory рд▓рд╛ рд╡рд┐рдЪрд╛рд░рд▓реЗрд▓рд╛ рдкреНрд░рд╢реНрди.
ЁЯЧ║я╕П рдЖрдХреГрддреА
sequenceDiagram
participant C as client
participant S as server
Note over C,S: TCP тАФ registered post
C->>S: SYN
S->>C: SYN-ACK
C->>S: ACK (a pipe exists)
C->>S: bytes #1..31
S->>C: ACK 31 ┬╖ "receipt"
Note over C,S: UDP тАФ the loudspeaker
C-->>S: datagram (maybe)
C-->>S: datagram (lost)
тЭУ рдХрд╛рдп
- TCP: connection-oriented, рднрд░рд╡рд╢рд╛рдЪрд╛, рдХреНрд░рдорд╛рдиреЗ, flow- рдЖрдгрд┐ congestion-controlled. рдПрдХ stream: рд╕рдВрджреЗрд╢рд╛рдВрдирд╛ рд╕реАрдорд╛ рдирд╕рддрд╛рдд тАФ рдШреЗрдгрд╛рд▒реНрдпрд╛рд▓рд╛ рдлрдХреНрдд bytes рджрд┐рд╕рддрд╛рдд, рдореНрд╣рдгреВрди protocols рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рд╕реАрдорд╛ рдЬреЛрдбрддрд╛рдд (newline, length prefix, HTTP рдЪреА рд░рд┐рдХрд╛рдореА рдУрд│).
- UDP: connection рд╢рд┐рд╡рд╛рдп datagrams; рд╣рд░рд╡реВ рд╢рдХрддрд╛рдд, рджреЛрдирджрд╛ рдпреЗрдК рд╢рдХрддрд╛рдд, рдХреНрд░рдо рдмрджрд▓реВ рд╢рдХрддреЛ; рдЫреЛрдЯрд╛ header; рдмрд╛рдХреАрдЪреЗ application рд╕рд╛рдВрднрд╛рд│рддреЗ.
- Ports рджреЛрдШрд╛рдВрдЪреЗрд╣реА рдЕрд╕рддрд╛рдд.
443/tcpрдЖрдгрд┐443/udpрдпрд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдЦреЛрд▓реНрдпрд╛ рдЖрд╣реЗрдд.
ЁЯдФ рдХрд╛
рдЪреБрдХреАрдЪрд╛ рдирд┐рд╡рдбрд▓рд╛ рддрд░ рдПрдХрддрд░ рдЕрдЪреВрдХрддрд╛ рдЬрд╛рддреЗ рдХрд┐рдВрд╡рд╛ latency рд╡рд╛рдврддреЗ. Web, mail, databases: TCP. DNS, video, voice, games, HTTP/3: UDP, рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рд╣реБрд╢рд╛рд░реАрд╕рд╣.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
tcp() рдПрдХ listening socket bind рдХрд░рддреЛ, рдПрдХрд╛ thread рдордзреНрдпреЗ accept рдХрд░рддреЛ, рдЖрдгрд┐ client
рдерд╛рдВрдмреЗ рдШреЗрдд рддреАрди рддреБрдХрдбреЗ рдкрд╛рдард╡рддреЛ тАФ stream рд▓рд╛ рдХрдбрд╛ рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ рдХрд╛рд░рдХреВрди newline рдпреЗрдИрдкрд░реНрдпрдВрдд
рд╡рд╛рдЪрддреЛ. udp() рдореБрджреНрджрд╛рдо 30% рдкрд╛рдард╡рдгреА рдЯрд╛рдХреВрди рджреЗрддреЛ рдЖрдгрд┐ рдХрд╛рдп рдкреЛрд╣реЛрдЪрд▓реЗ рддреЗ рджрд╛рдЦрд╡рддреЛ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 net/demo.py tcp udp
python3 - <<'EOF'
import socket; s=socket.socket(); s.settimeout(1)
print(s.connect_ex(("127.0.0.1", 9))) # nothing listens on 9: refused fast (111/61) тАФ a closed room
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
TCP: "sent 3 pieces; the clerk answered: receipt: 31 bytes". UDP: "10 тАж, 6 heard" (seed рдард░рд▓реЗрд▓рд╛ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдмрд░реЛрдмрд░ рд╕рд╣рд╛). рдмрдВрдж рдЦреЛрд▓реА рд▓рдЧреЗрдЪ рд╢реВрдиреНрдп рдирд╕рд▓реЗрд▓рд╛ code рдкрд░рдд рдХрд░рддреЗ тАФ рдзрдбрд╛ 10 рдордзрд▓реНрдпрд╛ firewall рдиреЗ рдЕрдбрд╡рд▓реЗрд▓реНрдпрд╛ port рдЪреНрдпрд╛ рд╢рд╛рдВрддрддреЗрд╢реА рддреБрд▓рдирд╛ рдХрд░рд╛.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
TCP рдЪреНрдпрд╛ рд╣рдореА рдЦрд▒реНрдпрд╛ рдЖрд╣реЗрдд рдЖрдгрд┐ рджрд┐рд╕рддрд╛рдд; UDP рдордзрд▓реЗ рд╣рд░рд╡рдгреЗ рдЦрд░реЗ рдЖрд╣реЗ рдЖрдгрд┐ рджрд┐рд╕рддреЗ; рдЖрдгрд┐ TCP stream рд╡рд░ рд╕рдВрджреЗрд╢рд╛рдВрдЪреНрдпрд╛ рд╕реАрдорд╛ рддреБрдореНрд╣рд╛рд▓рд╛рдЪ рдЬреЛрдбрд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрддрд╛рдд.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рдПрдХ
send= рдПрдХrecvрдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рдгреЗ. streams рддреБрдЯрддрд╛рдд рдЖрдгрд┐ рдЬреБрд│рддрд╛рдд; рддреБрдордЪреНрдпрд╛ рд╕рдВрджреЗрд╢рд╛рдВрдирд╛ frame рдХрд░рд╛. - UDP рд╡рд╛рдкрд░рдгреЗ рдЖрдгрд┐ "рдХрдзреАрдХрдзреА" рдореНрд╣рдгрдЬреЗ "production рдордзреНрдпреЗ, рд░реЛрдЬ" рд╣реЗ рд╡рд┐рд╕рд░рдгреЗ.
- рддреБрдордЪреНрдпрд╛рдЪ protocol рдордзрд▓реНрдпрд╛ рдЧрд╣рд╛рд│ newline рдореБрд│реЗ рдЕрдбрдХрд▓реЗрд▓реНрдпрд╛ рдЧреЛрд╖реНрдЯреАрд╕рд╛рдареА network рд▓рд╛ рджреЛрд╖ рджреЗрдгреЗ.
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: head-of-line blocking, connection pools, keep-alive, рдЖрдгрд┐ 3-way handshake рдЪрд╛ round trip тАФ рд╣реА рд╕рдЧрд│реА TCP рдЪреА рддрдереНрдпреЗ p99 latency рдореНрд╣рдгреВрди рджрд┐рд╕рддрд╛рдд. рдиреЗрдордХреЗ рддреЗ рд╕реЛрдбрд╡рдгреНрдпрд╛рд╕рд╛рдареАрдЪ HTTP/3 UDP рд╡рд░ рдЧреЗрд▓рд╛.
тПня╕П рдкреБрдвреЗ
рдзрдбрд╛ 06 тАФ DNS: рдирд╛рд╡рд╛рдЪреЗ рдкрддреНрддреНрдпрд╛рдд рд░реВрдкрд╛рдВрддрд░ рдХрд░рдгрд╛рд░реА directory, рдЖрдгрд┐ рддреА рдкреНрд░рддреНрдпреЗрдХ outage рдЪреА рд╕реБрд░реБрд╡рд╛рдд рдХрд╛ рдЕрд╕рддреЗ.