ЁЯЪк рдзрдбрд╛ 03 тАФ Ports рдЖрдгрд┐ sockets: рдЦреЛрд▓реА рдХреНрд░рдорд╛рдВрдХ рдЖрдгрд┐ рдмрд╛рдХреЗ
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 03 ┬╖ рдкреБрдвреЗ: lesson-04-layers
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ03. рд▓рдЦреЛрдЯреНрдпрд╛рд╡рд░рдЪрд╛ рдЦреЛрд▓реА рдХреНрд░рдорд╛рдВрдХ, рдЖрдгрд┐ рдЬреНрдпрд╛ рдмрд╛рдХрд╛рд╡рд░ рд╕рдВрднрд╛рд╖рдг рдкреНрд░рддреНрдпрдХреНрд╖ рдШрдбрддреЗ рддреЗ рдмрд╛рдХ.
- net/demo.py тАФ
portsрд╡рд┐рднрд╛рдЧ рдиреЗрд╣рдореАрдЪреНрдпрд╛ рджрд╛рд░рд╛рдВрд╡рд░ knock рдХрд░рддреЛ;tcpрд╡рд┐рднрд╛рдЧ рдПрдХрд╛ connection рдЪреА рджреЛрдиреНрд╣реА рдмрд╛рдХреЗ рджрд╛рдЦрд╡рддреЛ
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдПрдХ рдЗрдорд╛рд░рдд, рдЕрдиреЗрдХ рдЦреЛрд▓реНрдпрд╛. рдкрддреНрддрд╛ рд▓рдЦреЛрдЯреНрдпрд╛рд▓рд╛ рдЗрдорд╛рд░рддреАрдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрд╡рддреЛ; рдЦреЛрд▓реА рдХреНрд░рдорд╛рдВрдХ рддреЛ рдпреЛрдЧреНрдп рд╡реНрдпрдХреНрддреАрдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрд╡рддреЛ: рдЦреЛрд▓реА 80 рдореНрд╣рдгрдЬреЗ web office, 443 рдореНрд╣рдгрдЬреЗ рд╕реАрд▓ рдХреЗрд▓реЗрд▓реЗ web office, 22 рдореНрд╣рдгрдЬреЗ рд░рдЦрд╡рд╛рд▓рджрд╛рд░рд╛рдЪреЗ рджрд╛рд░, 5432 рдореНрд╣рдгрдЬреЗ рдиреЛрдВрджреАрдВрдЪреА рдЦреЛрд▓реА. server рдЖрдкрд▓реНрдпрд╛ рдЦреЛрд▓реАрдд рджрд╛рд░ рдЙрдШрдбреЗ рдареЗрд╡реВрди рдмрд╕рд▓реЗрд▓рд╛ рдЕрд╕рддреЛ, рдРрдХрдд. рдЖрдд рдпреЗрдгрд╛рд▒реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд╣реБрдгреНрдпрд╛рд▓рд╛ рд╕реНрд╡рддрдГрдЪреЗ рдмрд╛рдХ рдорд┐рд│рддреЗ тАФ рдПрдХ socket тАФ рддреНрдпрд╛рдореБрд│реЗ рдХрд╛рд░рдХреВрди рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЕрдиреЗрдХрд╛рдВрдирд╛ рд╕реЗрд╡рд╛ рджреЗрдК рд╢рдХрддреЛ.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
V1["visitor 192.168.0.12:51234"] --> D1["desk 1"]
V2["visitor 10.1.2.3:60002"] --> D2["desk 2"]
subgraph room["ЁЯПл 93.184.216.34 тАФ room 443 (LISTENING)"]
D1 ; D2
end
тЭУ рдХрд╛рдп
- port рдореНрд╣рдгрдЬреЗ 16-bit рдЖрдХрдбрд╛, 0тАУ65535. рд╕реБрдкреНрд░рд╕рд┐рджреНрдз рдЦреЛрд▓реНрдпрд╛ 0тАУ1023 (рдЙрдШрдбрд╛рдпрд▓рд╛ root рд▓рд╛рдЧрддреЛ); 1024тАУ49151 registered; рдмрд╛рдХреАрдЪреЗ ephemeral, clients рдирд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрдкрдгреЗ рджрд┐рд▓реЗ рдЬрд╛рддрд╛рдд.
- socket рдореНрд╣рдгрдЬреЗ рдПрдХ рдЯреЛрдХ; connection рдореНрд╣рдгрдЬреЗ 4-tuple
(local ip, local port, remote ip, remote port). server рдЪрд╛ port рд╕рд░реНрд╡рд╛рдВрд╕рд╛рдареА рддреЛрдЪ рд░рд╛рд╣рддреЛ; client рдЪрд╛ port рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрднрд╛рд╖рдг рд╡реЗрдЧрд│реЗ рдмрдирд╡рддреЛ. LISTENрд╡рд┐рд░реБрджреНрдзESTABLISHED: рдПрдХ listening socket connections рд╕реНрд╡реАрдХрд╛рд░рддреЛ; рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡реАрдХрд╛рд░рд▓реЗрд▓реЗ connection рд╣рд╛ рдПрдХ рдирд╡рд╛ socket рдЕрд╕рддреЛ.
ЁЯдФ рдХрд╛
"Address already in use", "connection refused", "port 8080 рдХреЛрдгрддреНрдпрд╛ process рдХрдбреЗ рдЖрд╣реЗ", "app localhost рд╡рд░ рдРрдХрддреЗ рдкрдг container рд▓рд╛ рддреА рджрд┐рд╕рдд рдирд╛рд╣реА" тАФ рд╣реЗ рд╕рдЧрд│реЗ рдЦреЛрд▓реАрдЪреЗ рдкреНрд░рд╢реНрди рдЖрд╣реЗрдд. Firewalls (рдзрдбрд╛ 10) рдореНрд╣рдгрдЬреЗ рдЦреЛрд▓реНрдпрд╛рдВрдЪреНрдпрд╛ рдпрд╛рджреНрдпрд╛; load balancers (рдзрдбрд╛ 11) рдореНрд╣рдгрдЬреЗ рдЦреЛрд▓реНрдпрд╛рдВрд╕рдореЛрд░рдЪреА рдмрд╛рдХреЗ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
ports() рдкреНрд░рддреНрдпреЗрдХ рд╕реБрдкреНрд░рд╕рд┐рджреНрдз port рд╡рд░ 200 ms timeout рдиреЗ connect_ex call рдХрд░рддреЛ:
0 рдореНрд╣рдгрдЬреЗ knock рд▓рд╛ рдХреЛрдгреАрддрд░реА рдЙрддреНрддрд░ рджрд┐рд▓реЗ. tcp() getsockname() рдЖрдгрд┐
getpeername() рдЫрд╛рдкрддреЛ тАФ рдПрдХрд╛ connection рдЪреА рджреЛрди рдЯреЛрдХреЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 net/demo.py ports
python3 -m http.server 8080 & # open room 8080
python3 net/demo.py ports | grep 8080 # now it says open
ss -ltnp 2>/dev/null || lsof -nP -iTCP -sTCP:LISTEN # who is listening where
kill %1
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
рдЖрдзреА 8080 тАж closed, рдирдВрддрд░ open тЖР someone is listening; ss/lsof рдордзреНрдпреЗ
*:8080 рд╡рд░ python рджрд┐рд╕рддреЛ. 127.0.0.1 рд▓рд╛ bind рдХреЗрд▓реЗ рддрд░ рдЗрддрд░ machines рдирд╛ рддреЛ рдЧрд╛рдарддрд╛
рдпреЗрдд рдирд╛рд╣реА; 0.0.0.0 рд▓рд╛ bind рдХреЗрд▓реЗ рддрд░ рдпреЗрддреЛ тАФ container рдЪреА рдЪреВрдХ рдПрдХрд╛ рдУрд│реАрдд рд╣реАрдЪ.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
port рдореНрд╣рдгрдЬреЗ рдЦреЛрд▓реА, socket рдореНрд╣рдгрдЬреЗ рдмрд╛рдХ, рдЖрдгрд┐ рддреБрдореНрд╣реА рдЧрд╛рдареВ рд╢рдХрддрд╛ рдЕрд╢рд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА machine рд╡рд░ рдХреЛрдгрддреНрдпрд╛ рдЦреЛрд▓реНрдпрд╛ рдЙрдШрдбреНрдпрд╛ рдЖрд╣реЗрдд рддреЗ рддреБрдореНрд╣реА рд╕рд╛рдВрдЧреВ рд╢рдХрддрд╛.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- container рдЪреНрдпрд╛ рдЖрдд
127.0.0.1рд╡рд░ рдРрдХрдгреЗ рдЖрдгрд┐ host рдХрд╛ connect рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА рдпрд╛рдЪреЗ рдЖрд╢реНрдЪрд░реНрдп рд╡рд╛рдЯрдгреЗ. - рджреЛрди services рдПрдХрд╛рдЪ port рд╕рд╛рдареА configure рдХрд░рдгреЗ: рджреБрд╕рд░реА "address in use" рджреЗрдКрди рдмрдВрдж рдкрдбрддреЗ.
- рдмрдВрдж port рдЖрдгрд┐ firewall рдиреЗ рдЕрдбрд╡рд▓реЗрд▓рд╛ port рд╕рд╛рд░рдЦреЗрдЪ рджрд┐рд╕рддрд╛рдд рдЕрд╕реЗ рд╕рдордЬрдгреЗ (рддреЗ рд╕рд╛рд░рдЦреЗ рджрд┐рд╕рдд рдирд╛рд╣реАрдд тАФ рдзрдбрд╛ 10).
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: app 8080 рд╡рд░ рдРрдХрддреЗ, health check 8081 рддрдкрд╛рд╕рддреЛ, sidecar 15020 рдШреЗрддреЛ, debugger 5005 тАФ рдкреНрд░рддреНрдпреЗрдХ incident report рдПрдХрд╛ рдЦреЛрд▓реАрдЪреЗ рдирд╛рд╡ рдШреЗрддреЛ. рдХреЛрдгрддреНрдпрд╛рд╣реА box рд╡рд░
ss -ltnpрд╣реА рдкрд╣рд┐рд▓реА command.
тПня╕П рдкреБрдвреЗ
рдзрдбрд╛ 04 тАФ layers: рдкрддреНрд░рд╛рдкрд╛рд╕реВрди рд░рд╕реНрддреНрдпрд╛рдкрд░реНрдпрдВрддрдЪреА рдкреЛрд╣реЛрдЪ-рд╕рд╛рдЦрд│реА, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ layer рдлрдХреНрдд рдЖрдкрд▓реНрдпрд╛ рд╢реЗрдЬрд╛рд▒реНрдпрд╛рдВрдирд╛рдЪ рдХрд╛ рдУрд│рдЦрддреЛ.