แแแแแ แฏแแแ แงแแแแแก, แแ แแฅแแแ แกแแจแ, แแฎแแแแซแฆแแแแแแแ Backend แขแแกแขแแ แแแแก FunCorp-แจแ. แฉแแแ, แแกแแแ แ แแแแ แช แแแแ แแ แกแฎแแแ, แแแแแแฎแแ แชแแแแแ แกแแ แแแกแแ แแ แแแแขแแ แแแฃแแ แแ แฅแแขแแฅแขแฃแ แ. แแก แแ แแ แแฎแ แแ แแแแ แขแแแแแก แแฃแจแแแแแก, แ แแแแแ... แฃแคแ แ แแแแแแแ แแแแแแฃแแ แกแแ แแแกแแก แชแแ-แชแแแแ แขแแกแขแแ แแแ, แแแแ แแ, แแแแ แ แแฎแ แแ, แกแแญแแ แแ แกแแ แแแกแแแแก แแ แแแแแแแแแ แฃแ แแแแ แแฅแแแแแแแก แขแแกแขแแ แแแ, แ แแช แฎแจแแ แแ แฎแแแแ แฅแกแแแจแ.
แแ แกแขแแขแแแจแ แแ แแแกแแฃแแ แแ แแ แแแแฃแแแแฃแ แแ แแแ แแแแแ, แ แแแแแแแช แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แซแแ แแแแแ แกแชแแแแ แแแแก แจแแกแแแแฌแแแแแแ, แ แแแแแแแช แแฆแฌแแ แก แแแแแแแชแแแก แแฃแจแแแแแก แฅแกแแแแก แแ แแแแแแแแแก แแ แกแแแแแแกแแก.
แฅแกแแแแก แแ แแแแแแแแแก แกแแแฃแแแชแแ
แ แแแแ แช แฌแแกแ, แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แขแแกแขแแ แแแ แฎแแแแ แกแแขแแกแขแ แกแแ แแแ แแแแ แแแ แแ แแแขแแ แแแข แแแแจแแ แแ. แแแแชแ แฌแแ แแแแแแก แแแ แแแแจแ, แงแแแแแคแแ แ แจแแแซแแแแ แแ แช แแกแ แแแฃแแ แแงแแก, แแแแขแแ แฎแแแแแฎแแ แแญแแ แแแแแ แแ แแแ แแแแแแก แขแแกแขแแ แแแ แชแฃแแ แแแแจแแ แแก แแแ แแแแแจแ. Linux-แแ แฃแขแแแแขแ แแแแแฎแแแ แแแแ แแแแแแ แ แแแ แแแแแแก แกแแแฃแแแชแแแก แแแแชแแแแจแ tc.
tc(แแแแ . แแแซแ แแแแแก แแแแขแ แแแแแแ) แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแแคแแแฃแ แแ แแ แฅแกแแแแก แแแแแขแแแแก แแแแแชแแแ แกแแกแขแแแแจแ. แแ แแ แแแ แแแแก แแฅแแก แแแแ แจแแกแแซแแแแแแแแแ, แจแแแแซแแแแ แแแขแ แฌแแแแแแฎแแ แแแ แจแแกแแฎแแ
แแแแแ แแแแฃแจแแแ แแฅแ แกแแ แแแ แ แกแแ แแแ แแ (แแแแแแแงแแแ
ncat -l 127.0.0.1 12345 -k -c 'xargs -n1 -i echo "Response: {}"'
แแแแแแขแกแ แแ แกแแ แแแ แก แจแแ แแก แฃแ แแแแ แแฅแแแแแแแก แแแแแแฃแ แแขแแแแ แงแแแแ แแ แแแก แแแแแแญแแแก แแแขแแแฃแ แแ แฉแแแแแแแก แแแแแแ, แแแแฌแแ แ แแแ แขแแแ แแแแแแแก แกแแ แแแขแ, แ แแแแแแช แแแแแแแแก แแแแฎแแแแแก. แขแแกแขแ แฉแแแแก แแฅแ แกแแ แแแ แแ.
แแแแแแขแแก แฌแงแแ แ แแแแ
#!/bin/python
import socket
import time
HOST = '127.0.0.1'
PORT = 12345
BUFFER_SIZE = 1024
MESSAGE = "Testn"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
t1 = time.time()
print "[time before connection: %.5f]" % t1
s.connect((HOST, PORT))
print "[time after connection, before sending: %.5f]" % time.time()
s.send(MESSAGE)
print "[time after sending, before receiving: %.5f]" % time.time()
data = s.recv(BUFFER_SIZE)
print "[time after receiving, before closing: %.5f]" % time.time()
s.close()
t2 = time.time()
print "[time after closing: %.5f]" % t2
print "[total duration: %.5f]" % (t2 - t1)
print data
แแแแแ แแแแฃแจแแแ แแ แจแแแฎแแแแ แขแ แแคแแแก แแแขแแ แคแแแกแแ lo แแ แแแ แขแ 12345:
[user@host ~]# python client.py
[time before connection: 1578652979.44837]
[time after connection, before sending: 1578652979.44889]
[time after sending, before receiving: 1578652979.44894]
[time after receiving, before closing: 1578652979.45922]
[time after closing: 1578652979.45928]
[total duration: 0.01091]
Response: Test
แกแแขแ แแแกแแแ แขแ แแแแแแกแแงแ แแแ
[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
10:42:59.448601 IP 127.0.0.1.54054 > 127.0.0.1.12345: Flags [S], seq 3383332866, win 43690, options [mss 65495,sackOK,TS val 606325685 ecr 0,nop,wscale 7], length 0
10:42:59.448612 IP 127.0.0.1.12345 > 127.0.0.1.54054: Flags [S.], seq 2584700178, ack 3383332867, win 43690, options [mss 65495,sackOK,TS val 606325685 ecr 606325685,nop,wscale 7], length 0
10:42:59.448622 IP 127.0.0.1.54054 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 606325685 ecr 606325685], length 0
10:42:59.448923 IP 127.0.0.1.54054 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 606325685 ecr 606325685], length 5
10:42:59.448930 IP 127.0.0.1.12345 > 127.0.0.1.54054: Flags [.], ack 6, win 342, options [nop,nop,TS val 606325685 ecr 606325685], length 0
10:42:59.459118 IP 127.0.0.1.12345 > 127.0.0.1.54054: Flags [P.], seq 1:15, ack 6, win 342, options [nop,nop,TS val 606325696 ecr 606325685], length 14
10:42:59.459213 IP 127.0.0.1.54054 > 127.0.0.1.12345: Flags [.], ack 15, win 342, options [nop,nop,TS val 606325696 ecr 606325696], length 0
10:42:59.459268 IP 127.0.0.1.54054 > 127.0.0.1.12345: Flags [F.], seq 6, ack 15, win 342, options [nop,nop,TS val 606325696 ecr 606325696], length 0
10:42:59.460184 IP 127.0.0.1.12345 > 127.0.0.1.54054: Flags [F.], seq 15, ack 7, win 342, options [nop,nop,TS val 606325697 ecr 606325696], length 0
10:42:59.460196 IP 127.0.0.1.54054 > 127.0.0.1.12345: Flags [.], ack 16, win 342, options [nop,nop,TS val 606325697 ecr 606325697], length 0
แงแแแแแคแแ แ แกแขแแแแแ แขแฃแแแ: แกแแแแฎแ แแแ แฎแแแแก แฉแแแแ แแแแแ, PSH/ACK แแ ACK แแ แฏแแ แกแแแแกแฃแฎแแ - แแก แแ แแก แแแแฎแแแแแกแ แแ แแแกแฃแฎแแก แแแชแแแ แแแแแแขแกแ แแ แกแแ แแแ แก แจแแ แแก แแ FIN/ACK แแ ACK แแ แฏแแ - แแแแจแแ แแก แแแกแ แฃแแแแ.
แแแแแขแแก แแแแแแแแแแ
แแฎแแ แแแแแงแแแแ แแแงแแแแแแ 500 แแแแแฌแแแแแแ:
tc qdisc add dev lo root netem delay 500ms
แฉแแแ แแแแฃแจแแแ แแแแแแขแ แแ แแฎแแแแแ, แ แแ แกแแ แแแขแ แแฎแแ แแฃแจแแแแก 2 แฌแแแแก แแแแแแแแแแแจแ:
[user@host ~]# ./client.py
[time before connection: 1578662612.71044]
[time after connection, before sending: 1578662613.71059]
[time after sending, before receiving: 1578662613.71065]
[time after receiving, before closing: 1578662614.72011]
[time after closing: 1578662614.72019]
[total duration: 2.00974]
Response: Test
แ แ แแ แแก แขแ แแคแแแจแ? แแแแแ แจแแแฎแแแแ:
แกแแขแ แแแกแแแ แขแ แแแแแแกแแงแ แแแ
13:23:33.210520 IP 127.0.0.1.58694 > 127.0.0.1.12345: Flags [S], seq 1720950927, win 43690, options [mss 65495,sackOK,TS val 615958947 ecr 0,nop,wscale 7], length 0
13:23:33.710554 IP 127.0.0.1.12345 > 127.0.0.1.58694: Flags [S.], seq 1801168125, ack 1720950928, win 43690, options [mss 65495,sackOK,TS val 615959447 ecr 615958947,nop,wscale 7], length 0
13:23:34.210590 IP 127.0.0.1.58694 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 615959947 ecr 615959447], length 0
13:23:34.210657 IP 127.0.0.1.58694 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 615959947 ecr 615959447], length 5
13:23:34.710680 IP 127.0.0.1.12345 > 127.0.0.1.58694: Flags [.], ack 6, win 342, options [nop,nop,TS val 615960447 ecr 615959947], length 0
13:23:34.719371 IP 127.0.0.1.12345 > 127.0.0.1.58694: Flags [P.], seq 1:15, ack 6, win 342, options [nop,nop,TS val 615960456 ecr 615959947], length 14
13:23:35.220106 IP 127.0.0.1.58694 > 127.0.0.1.12345: Flags [.], ack 15, win 342, options [nop,nop,TS val 615960957 ecr 615960456], length 0
13:23:35.220188 IP 127.0.0.1.58694 > 127.0.0.1.12345: Flags [F.], seq 6, ack 15, win 342, options [nop,nop,TS val 615960957 ecr 615960456], length 0
13:23:35.720994 IP 127.0.0.1.12345 > 127.0.0.1.58694: Flags [F.], seq 15, ack 7, win 342, options [nop,nop,TS val 615961457 ecr 615960957], length 0
13:23:36.221025 IP 127.0.0.1.58694 > 127.0.0.1.12345: Flags [.], ack 16, win 342, options [nop,nop,TS val 615961957 ecr 615961457], length 0
แแฅแแแ แฎแแแแแ, แ แแ แแแฎแแแแ แ แฌแแแแก แกแแแแ แแฃแแ แฉแแแแ แฉแแแ แแแแแฉแแแ แแแแแแขแกแ แแ แกแแ แแแ แก แจแแ แแก แฃแ แแแแ แแฅแแแแแแแจแ. แกแแกแขแแแ แแแแ แแ แฃแคแ แ แกแแแแขแแ แแกแแ แแฅแชแแแ, แแฃ แฉแแแแ แฉแแแ แฃแคแ แ แแแแแ: แแแ แแแ แแฌแงแแแก แ แแแแแแแแ TCP แแแแแขแแก แฎแแแแฎแแ แแแแแแแแแก. แแแแแ แจแแแชแแแแแ แแแงแแแแแแ 1 แฌแแแแ แแ แจแแแฎแแแแ แขแ แแคแแแก (แแแแแแขแแก แแแแแแแแแแก แแ แแแฉแแแแแ, แแ แแก แแแกแแแแแแแแ 4 แฌแแแ แกแแแ แแ แฎแแแแ แซแแแแแแแจแ):
tc qdisc change dev lo root netem delay 1s
แกแแขแ แแแกแแแ แขแ แแแแแแกแแงแ แแแ
13:29:07.709981 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [S], seq 283338334, win 43690, options [mss 65495,sackOK,TS val 616292946 ecr 0,nop,wscale 7], length 0
13:29:08.710018 IP 127.0.0.1.12345 > 127.0.0.1.39306: Flags [S.], seq 3514208179, ack 283338335, win 43690, options [mss 65495,sackOK,TS val 616293946 ecr 616292946,nop,wscale 7], length 0
13:29:08.711094 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [S], seq 283338334, win 43690, options [mss 65495,sackOK,TS val 616293948 ecr 0,nop,wscale 7], length 0
13:29:09.710048 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 616294946 ecr 616293946], length 0
13:29:09.710152 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 616294947 ecr 616293946], length 5
13:29:09.711120 IP 127.0.0.1.12345 > 127.0.0.1.39306: Flags [S.], seq 3514208179, ack 283338335, win 43690, options [mss 65495,sackOK,TS val 616294948 ecr 616292946,nop,wscale 7], length 0
13:29:10.710173 IP 127.0.0.1.12345 > 127.0.0.1.39306: Flags [.], ack 6, win 342, options [nop,nop,TS val 616295947 ecr 616294947], length 0
13:29:10.711140 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 616295948 ecr 616293946], length 0
13:29:10.714782 IP 127.0.0.1.12345 > 127.0.0.1.39306: Flags [P.], seq 1:15, ack 6, win 342, options [nop,nop,TS val 616295951 ecr 616294947], length 14
13:29:11.714819 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [.], ack 15, win 342, options [nop,nop,TS val 616296951 ecr 616295951], length 0
13:29:11.714893 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [F.], seq 6, ack 15, win 342, options [nop,nop,TS val 616296951 ecr 616295951], length 0
13:29:12.715562 IP 127.0.0.1.12345 > 127.0.0.1.39306: Flags [F.], seq 15, ack 7, win 342, options [nop,nop,TS val 616297952 ecr 616296951], length 0
13:29:13.715596 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [.], ack 16, win 342, options [nop,nop,TS val 616298952 ecr 616297952], length 0
แฉแแแก, แ แแ แแแแแแขแแ แแ แฏแแ แแแแแแแแ SYN แแแแแขแ, แฎแแแ แกแแ แแแ แแ แแ แฏแแ แแแแแแแแ SYN/ACK.
แแแ แแ แแฃแแแแแ แแแแจแแแแแแแแกแ, แแแงแแแแแแ แจแแแซแแแแ แแแงแแแแแก แแแแแฎแ แแแ, แแแแแฌแแแแแแก แคแฃแแฅแชแแแแ แแ แแแ แแแแชแแแแ (แฌแแแ แแแแแขแแก แแแแจแแแแแแแแ). แแก แแแแแแแ แจแแแแแแแแแ แแ:
tc qdisc change dev lo root netem delay 500ms 400ms 50 distribution normal
แแฅ แฉแแแ แแแแแงแแแแ แแแงแแแแแแ 100-แแแ 900 แแแแแฌแแแแแแ, แแแแจแแแแแแแแแ แจแแแ แฉแแแ แแแ แแแแฃแ แ แแแแแฌแแแแแแก แแแฎแแแแแ แแ แแฅแแแแ 50% แแแ แแแแชแแ แฌแแแ แแแแแขแแก แแแงแแแแแแแก แแแแจแแแแแแแแกแแแ.
แแฅแแแ แจแแแซแแแแ แจแแแแฉแแแแ แแก แแแ แแแ แแ แซแแแแแแจแ, แ แแแแแแช แแ แแแแแแแงแแแ แแแแแแแขแแแแแ แจแแแแแ แจแแชแแแ. แแ แแ แซแแแแแแแแก แแแแจแแแแแแแ แแจแแแ แแ, แแแแขแแ แแแแแแแขแแ, แ แแ แแแแแ แแ แแก del, แ แแแแแแช แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แแแแคแแแฃแ แแชแแแก แแแแกแแฆแแแแ.
แแแแแขแแก แแแแแ แแแ
แแฎแแ แแชแแแแ แแแแแขแแก แแแแแ แแแ. แ แแแแ แช แแแแฃแแแแขแแชแแแแแ แฉแแแก, แแก แจแแแซแแแแ แแแแแแแแก แกแแแ แแแแ: แแแแแขแแแแก แจแแแแฎแแแแแ แแแแแ แแแ แแแ แแแแฃแแ แแแแแแแแแ, 2, 3 แแ 4 แแแแแแแ แแแแแก แแแ แแแแแก แฏแแญแแแก แแแแแงแแแแแแ แแแแแขแแก แแแแแ แแแแก แแแแแกแแแแแแแแ, แแ แแแแแข-แแแแแแ แขแแก แแแแแแแก แแแแแงแแแแแแ. แกแขแแขแแแจแ แแแแแแฎแแแแ แแแ แแแ (แฃแแแ แขแแแแก แแ แงแแแแแแ แแจแแแ แ) แแแแแแก แแ แจแแแแซแแแแ แฌแแแแแแฎแแ แกแฎแแแแแก แจแแกแแฎแแ
แแแแแ แแแแแแแแแ แแแแแขแแแแก 50% แแแแแ แแแ 25% แแแ แแแแชแแแ:
tc qdisc add dev lo root netem loss 50% 25%
แกแแแฌแฃแฎแแ แแ, tcpdump แแแ แจแแซแแแแก แแแแแแ แแแแแแแแฎแแก แแแแแขแแแแก แแแแแ แแแ, แฉแแแ แแฎแแแแ แแแแแ แแฃแแแแ, แ แแ แแก แแแแแแแแแ แแฃแจแแแแก. แแ แกแแ แแแขแแก แแแแ แแแแ แแ แแ แแกแขแแแแแฃแ แ แแแจแแแแแก แแ แ แแแแแแฎแแแ แแแ แแแแก แแแแแแแฌแแแแแจแ. client.py (แจแแแซแแแแ แแแกแ แฃแแแแก แแงแแกแแแ แแ, แแ แจแแกแแซแแแ 20 แฌแแแจแ), แแกแแแ แแแแแชแแแฃแแ แแแแแขแแแแก แแแแ แแแแ แ แแแแแแแแ:
[user@host ~]# netstat -s | grep retransmited; sleep 10; netstat -s | grep retransmited
17147 segments retransmited
17185 segments retransmited
แแแแแขแแแจแ แฎแแแฃแ แแก แแแแแขแแแ
แแแแแขแแแแก แแแแแ แแแแก แแแ แแ, แจแแแแซแแแแ แแแแแขแแก แแแแแแแแแแก แกแแแฃแแแชแแ: แฎแแแฃแ แ แแแแแฉแแแแแ แจแแแแฎแแแแแแ แแแแแขแแก แแแแแชแแแแ. แแแแแ แแแแแแแแแ แแแแแขแแก แแแแแแแแแ 50% แแแแแแแแแ แแ แแแ แแแแชแแแก แแแ แแจแ:
tc qdisc change dev lo root netem corrupt 50%
แฉแแแ แแแฌแแ แแแแแ แแแแแแขแแก แกแแ แแแขแก (แแฅ แแ แแคแแ แแ แกแแแแขแแ แแกแ, แแแแ แแ แแแกแ แฃแแแแแก 2 แฌแแแ แแแกแญแแ แแ), แจแแฎแแแแ แขแ แแคแแแก:
แกแแขแ แแแกแแแ แขแ แแแแแแกแแงแ แแแ
[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
10:20:54.812434 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [S], seq 2023663770, win 43690, options [mss 65495,sackOK,TS val 1037001049 ecr 0,nop,wscale 7], length 0
10:20:54.812449 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [S.], seq 2104268044, ack 2023663771, win 43690, options [mss 65495,sackOK,TS val 1037001049 ecr 1037001049,nop,wscale 7], length 0
10:20:54.812458 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 1037001049 ecr 1037001049], length 0
10:20:54.812509 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1037001049 ecr 1037001049], length 5
10:20:55.013093 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1037001250 ecr 1037001049], length 5
10:20:55.013122 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [.], ack 6, win 342, options [nop,nop,TS val 1037001250 ecr 1037001250], length 0
10:20:55.014681 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [P.], seq 1:15, ack 6, win 342, options [nop,nop,TS val 1037001251 ecr 1037001250], length 14
10:20:55.014745 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [.], ack 15, win 340, options [nop,nop,TS val 1037001251 ecr 1037001251], length 0
10:20:55.014823 IP 127.0.0.1.43666 > 127.0.0.5.12345: Flags [F.], seq 2023663776, ack 2104268059, win 342, options [nop,nop,TS val 1037001251 ecr 1037001251], length 0
10:20:55.214088 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [P.], seq 1:15, ack 6, win 342, options [nop,unknown-65 0x0a3dcf62eb3d,[bad opt]>
10:20:55.416087 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [F.], seq 6, ack 15, win 342, options [nop,nop,TS val 1037001653 ecr 1037001251], length 0
10:20:55.416804 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [F.], seq 15, ack 7, win 342, options [nop,nop,TS val 1037001653 ecr 1037001653], length 0
10:20:55.416818 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [.], ack 16, win 343, options [nop,nop,TS val 1037001653 ecr 1037001653], length 0
10:20:56.147086 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [F.], seq 15, ack 7, win 342, options [nop,nop,TS val 1037002384 ecr 1037001653], length 0
10:20:56.147101 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [.], ack 16, win 342, options [nop,nop,TS val 1037002384 ecr 1037001653], length 0
แฉแแแก, แ แแ แแแแแแ แแ แแแแแขแ แแแแแแแแแ แแ แแแ แแฎแแ แแ แแ แแก แแ แแ แแแแแขแ แแแขแแฎแแแ แแแขแแแแแแชแแแแแแ: แแแ แแแแขแ แแแ [nop,unknown-65 0x0a3dcf62eb3d,[แชแฃแแ แแ แฉแแแแแ]>. แแแแ แแ แแแแแแ แ แแก แแ แแก, แ แแ แกแแแแแแแ แงแแแแแคแแ แ แกแฌแแ แแ แแฃแจแแแแแ - TCP แแแแ แแแ แแแแ แแแแแก แแแแชแแแแก.
แแแแแขแแก แแฃแแแแ แแแ
แแแแแ แ แ แจแแแแซแแแแ แแแแแแแแ แแแขแแ? แแแแแแแแแ, แแแแแขแแแแก แแแแแ แแแแก แกแแแแ แแกแแแ แ แกแแขแฃแแชแแแก แกแแแฃแแแชแแ - แแแแแขแแก แแฃแแแแ แแแ. แแก แแ แซแแแแแ แแกแแแ แแฆแแแก 2 แแ แแฃแแแแขแก: แแแแแแแแ แแ แแแ แแแแชแแ.
tc qdisc change dev lo root netem duplicate 50% 25%
แแแแแขแแแแก แแแแแแแแแแ แแแแก แจแแชแแแ
แจแแแแซแแแแ แแฃแ แแแ แฉแแแแแแ แแ แ แแแแ.
แแแ แแแแจแ, แแแแแแ แแ แแแแแขแ แแแแแแแแแ แแแฃแงแแแแแแแแ, แแแแแ แฉแแแ - แแแแแแแแฃแแ แแแแแแแแแแแ. แแแแแแแแ แแแแฃแแแแขแแชแแแแแ:
tc qdisc change dev lo root netem delay 10ms reorder 25% 50%
25% แแแแแแแแแ (แแ แแแ แแแแชแแ 50%) แแแแแขแ แแแแแแแแแแแ แแแฃแงแแแแแแแแ, แแแแแ แฉแแแ แแแแแแแแแแแ 10 แแแแแฌแแแแก แแแแแแแแแแแ.
แแแแ แ แแแแแแ แแ แแก, แ แแแแกแแช แงแแแแแ N-แ แแแแแขแ แแแแแแแแแ แแงแแกแแแ แแ แแแชแแแฃแแ แแแแแแแแแ (แแ แแแ แแแแชแแแ), แฎแแแ แแแแแ แฉแแแ แแแชแแแฃแแ แแแแแแแแแแแ. แแแแแแแแ แแแแฃแแแแขแแชแแแแแ:
tc qdisc change dev lo root netem delay 10ms reorder 25% 50% gap 5
แงแแแแ แแแฎแฃแแ แแแแแขแก แแฅแแก 25% แจแแแกแ, แ แแ แแแแแแแแแแก แแแฃแงแแแแแแแแ.
แแแแขแแ แฃแแแ แแแแแแแก แจแแชแแแ
แ แแแแ แช แฌแแกแ, แงแแแแแแ แแกแแแ แแแฃแแแแแแแ
tc qdisc change dev lo root netem rate 56kbit
แแก แแฃแแแ แแแแแแฃแ แแแก แแแ แจแแแ localhost แแกแแแแแ แแขแแแแแแฃแแ, แ แแแแ แช แแแขแแ แแแขแจแ แกแแ แคแแแแ Dial-up แแแแแแแก แกแแจแฃแแแแแแ. แแแขแแก แกแแฉแฅแแ แแก แแแงแแแแแแก แแแ แแ, แแฅแแแ แแกแแแ แจแแแแซแแแแ แแแแแซแแ แแแฃแแแก แคแแแแก แแ แแขแแแแแแก แแแแแแก: แแแแงแแแแ แแแแแแแแแ แแแแแขแแกแแแแก, แฃแฏแ แแแแก แแแแ แแ แฃแฏแ แแแแก แแแแแแแแแ. แแแแแแแแแ, แแแแก แกแแแฃแแแชแแ แจแแกแแซแแแแแแแ
tc qdisc change dev lo root netem rate 56kbit 0 48 5
แแแแจแแ แแก แแ แแแก แแแแฌแฃแ แแแก แกแแแฃแแแชแแ
แขแแกแขแแก แแแแแแก แแแแแ แแ แแ แแแแจแแแแแแแแแ แแฃแแฅแขแ แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แแแฆแแแแกแแก แแ แแก แแแแแแ. แแก แแแแจแแแแแแแแแแ, แ แแแแแ แแแแแฌแแแแแฃแ แกแแกแขแแแแแจแ, แ แแแแกแแช แแ แ-แแ แแ แกแแ แแแกแ แแแแแ แแฃแแแ, แแแแแ แฉแแแแแ แแ แแฃแแแ แฃแแแ แแแฃแแ แฃแแแแแ แกแฎแแแก แแ แแแฃแแ แฃแแแ แแแแแแขแก แจแแชแแแแ แแ แแ แแแแแแ แจแแแแฎแแแแแจแ แแ แฃแแแ แแแแแแแ, แแแแแแแแ แแแกแฃแฎแก แแ แแแแจแแ แก. แฉแแแแงแแแแแแแก.
แแแแก แแแแแแแแแก แ แแแแแแแแ แแแ แแ แกแแแแแก: แแแแแแแแแ, แแแแแแงแแแแ แแแแชแแแแแ, แ แแแแแแช แแ แแแกแฃแฎแแแก, แแ แแแฃแแแแจแแ แแแ แแ แแชแแกแก แแแแแ แแแแก แกแแจแฃแแแแแแ, แแแแแแแกแแ แฌแงแแแขแแก แฌแแ แขแแแ แกแฌแแ แแแแแแแก แแ แจแแแฉแแ แแ แแ แแชแแกแ (แแก แแแแแ แงแแแแแแ แแแ แงแแแแแ แแแแ). แแแแ แแ แแ แ-แแ แแ แงแแแแแแ แแจแแแ แแ แแแ แขแแแแก แแ แฐแแกแขแแแแก แแแชแแ. แแแแจแ แแแแแแฎแแแ แแแ
แแแแแแกแขแ แแ แแแแกแแแแก, แฉแแแ แแแแแงแแแแแ 12345 แแแ แขแก แแ แแแแฃแจแแแ แฉแแแแ แแแแแแขแแก แกแแ แแแขแ. แแฅแแแ แจแแแแซแแแแ แแแแแแแแ แแแแแขแแแ แแ แแแ แขแจแ แแแแคแแ แแแแแ แแแแแแแแแแแ แแ แจแแแแแแแแแ แแแแแขแแแ แแแแฆแแแแแ. แฉแแแก แแแแแแแแแแจแ, แจแแแแแแแแแ แแแแแขแแแ แแฅแแแแ แแแแแแ แแแฃแแ (แฉแแแ แแแงแแแแแ แฏแแญแแแก INPUT-แก แแ แแแ แแแแขแก --แแแแ แขแ). แแกแแแ แแแแแขแแแ แจแแแซแแแแ แแงแแก DROP, REJECT แแ REJECT TCP แแ แแจแแ RST, แแ ICMP แฐแแกแขแแแ แแแฃแฌแแแแแแแ (แคแแฅแขแแแ แแแแ, แแแแฃแแแกแฎแแแแ แฅแชแแแ แแ แแก icmp-port-แแแฃแฌแแแแแแแแ, แแ แแกแแแ แแ แแก แแแกแฃแฎแแก แแแแแแแแแก แจแแกแแซแแแแแแแ icmp-net-แแแฃแฌแแแแแแแแ, icmp-proto-แแแฃแฌแแแแแแแ, icmp-net-แแแ แซแแแฃแแแ ะธ icmp-host-แแแ แซแแแฃแแแ).
แแแ แแแ
แแฃ แแ แกแแแแแก DROP-แแก แฌแแกแ, แแแแแขแแแ แฃแแ แแแแ โแแแฅแ แแแโ.
iptables -A INPUT -p tcp --dport 12345 -j DROP
แฉแแแ แแแแฃแจแแแ แแแแแแขแ แแ แแฎแแแแแ, แ แแ แแก แแงแแแแแ แกแแ แแแ แแแ แแแแแแจแแ แแแแก แแขแแแแ. แแแแแ แจแแแฎแแแแ แแแซแ แแแแแก:
แกแแขแ แแแกแแแ แขแ แแแแแแกแแงแ แแแ
[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
08:28:20.213506 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203046450 ecr 0,nop,wscale 7], length 0
08:28:21.215086 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203047452 ecr 0,nop,wscale 7], length 0
08:28:23.219092 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203049456 ecr 0,nop,wscale 7], length 0
08:28:27.227087 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203053464 ecr 0,nop,wscale 7], length 0
08:28:35.235102 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203061472 ecr 0,nop,wscale 7], length 0
แฉแแแก, แ แแ แแแแแแขแ แแแแแแแแก SYN แแแแแขแแแก แแฅแกแแแแแแขแฃแ แแ แแแแ แแ แแ แแแก แแแแฌแฃแ แแแ. แแกแ แ แแ, แแแแแแขแจแ แแฆแแแแแฉแแแแ แแชแแ แ แจแแชแแแแ: แแฅแแแ แฃแแแ แแแแแแงแแแแ แแแแแแ settimeout ()แจแแแฆแฃแแแก แแ แ, แ แแแแแก แแแแแแแแแแแจแแช แแแแแแขแ แจแแแชแแแแ แกแแ แแแ แแแ แแแแแแจแแ แแแแก.
แฉแแแ แแแฃแงแแแแแแแแ แแฎแกแแแ แฌแแกแก:
iptables -D INPUT -p tcp --dport 12345 -j DROP
แแฅแแแ แจแแแแซแแแแ แฌแแจแแแแ แงแแแแ แฌแแกแ แแ แแแ แแฃแแแ:
iptables -F
แแฃ แแงแแแแแ Docker-แก แแ แแญแแ แแแแแ แแแแขแแแแแ แจแ แแแแแแแแ แแแแแ แขแ แแคแแแแก แแแชแแ, แแแจแแ แจแแแแซแแแแ แแแแก แแแแแแแแ แจแแแแแแแแแ แแ:
iptables -I DOCKER-USER -p tcp -d CONTAINER_IP -j DROP
แฒฃแฒแฒ แฒงแฒแฒก
แแฎแแ แแแแแแแขแแ แแกแแแแกแ แฌแแกแ, แแแแ แแ REJECT-แแ:
iptables -A INPUT -p tcp --dport 12345 -j REJECT
แแแแแแขแ แแแแแก แแ แแ แฌแแแแก แจแแแแแ แจแแชแแแแแ [Errno 111] แแแแจแแ แ แฃแแ แ แแฅแแ. แแแแแ แจแแแฎแแแแ ICMP แขแ แแคแแแก:
[user@host ~]# tcpdump -i lo -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
08:45:32.871414 IP 127.0.0.1 > 127.0.0.1: ICMP 127.0.0.1 tcp port 12345 unreachable, length 68
08:45:33.873097 IP 127.0.0.1 > 127.0.0.1: ICMP 127.0.0.1 tcp port 12345 unreachable, length 68
แฉแแแก, แ แแ แแแแแแขแแ แแ แฏแแ แแแแฆแ แแแ แขแ แแแฃแฌแแแแแแแแ แจแแแแแ แแ แจแแชแแแแแ แแแกแ แฃแแแ.
แฃแแ แงแแคแ tcp-แแแแแขแแแ แแแแก แกแแจแฃแแแแแแ
แจแแแแชแแแแ แแแแแแแขแแ แแแ แแแแขแ --แฃแแ แงแแคแ-tcp-แแแแแขแแแ แแแแ:
iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with tcp-reset
แแ แจแแแแฎแแแแแจแ, แแแแแแขแ แแแฃแงแแแแแแแแ แแแแแก แจแแชแแแแแ, แ แแแแแ แแแ แแแแแ แแแแฎแแแแแ แแแแฆแ RST แแแแแขแ:
[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
09:02:52.766175 IP 127.0.0.1.60658 > 127.0.0.1.12345: Flags [S], seq 1889460883, win 43690, options [mss 65495,sackOK,TS val 1205119003 ecr 0,nop,wscale 7], length 0
09:02:52.766184 IP 127.0.0.1.12345 > 127.0.0.1.60658: Flags [R.], seq 0, ack 1889460884, win 0, length 0
แฃแแ แงแแแแ icmp-host-unreachable
แแชแแแแ REJECT-แแก แแแแแงแแแแแแก แกแฎแแ แแแ แแแแขแ:
iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp-host-unreachable
แแแแแแขแ แแแแแก แแ แแ แฌแแแแก แจแแแแแ แจแแชแแแแแ [Errno 113] แแแกแแแแซแแแแแก แแแ แแ แแ แแก, แฉแแแ แแฎแแแแแ ICMP แขแ แแคแแแจแ ICMP แฐแแกแขแ 127.0.0.1 แแแฃแฌแแแแแแแแ.
แแฅแแแ แแกแแแ แจแแแแซแแแแ แกแชแแแแ แกแฎแแ REJECT แแแ แแแแขแ แแแ แแ แแ แแแแแ แแแแแแแฎแแแแแ แงแฃแ แแแฆแแแแก :)
แแแแฎแแแแแก แแ แแแก แแแแฌแฃแ แแแก แกแแแฃแแแชแแ
แแแแแ แแ แแ แกแแขแฃแแชแแแ, แ แแแแกแแช แแแแแแขแแ แจแแซแแ แกแแ แแแ แแแ แแแแแแจแแ แแแ, แแแแ แแ แแแก แแ แจแแฃแซแแแ แแแแฎแแแแแก แแแแแแแแ. แ แแแแ แแแแคแแแขแ แแ แแแแแขแแแ แแกแ, แ แแ แคแแแขแ แแชแแ แแแฃแงแแแแแแแแ แแ แแแแฌแงแแก? แแฃ แแแแแแแ แแแแแ แแแแแแขแกแ แแ แกแแ แแแ แก แจแแ แแก แแแแแกแแแแ แ แแแแฃแแแแแชแแแก แขแ แแคแแแก, แจแแแแฉแแแแ, แ แแ แแแแจแแ แแก แแแแงแแ แแแแกแแก แแแแแแงแแแแแ แแฎแแแแ SYN แแ ACK แแ แแจแแแ, แแแแ แแ แแแแแชแแแแ แแแชแแแแกแแก แแแแ แแแแฎแแแแแก แแแแแขแ แจแแแชแแแก PSH แแ แแจแแก. แแก แแแขแแแแขแฃแ แแ แแแแแกแขแแแแ แแแแ แแฃแคแแ แแก แแแแแแแ แแกแแชแแแแแแแ. แแฅแแแ แจแแแแซแแแแ แแแแแแงแแแแ แแก แแแคแแ แแแชแแ แคแแแขแ แแก แจแแกแแฅแแแแแแ: แแก แกแแจแฃแแแแแแก แแแกแชแแแก แงแแแแ แแแแแขแก, แแแ แแ PSH แแ แแจแแกแ. แแแ แแแแ, แแแแจแแ แ แแแแงแแ แแแแ, แแแแ แแ แแแแแแขแ แแแ แจแแซแแแแก แแแแแชแแแแ แแแแแแแแแก แกแแ แแแ แแ.
แแแ แแแ
DROP-แแกแแแแก แแ แซแแแแแ แแกแ แแแแแแงแฃแ แแแ:
iptables -A INPUT -p tcp --tcp-flags PSH PSH --dport 12345 -j DROP
แแแฃแจแแแ แแแแแแขแ แแ แฃแงแฃแ แแ แขแ แแคแแแก:
แกแแขแ แแแกแแแ แขแ แแแแแแกแแงแ แแแ
[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
10:02:47.549498 IP 127.0.0.1.49594 > 127.0.0.1.12345: Flags [S], seq 2166014137, win 43690, options [mss 65495,sackOK,TS val 1208713786 ecr 0,nop,wscale 7], length 0
10:02:47.549510 IP 127.0.0.1.12345 > 127.0.0.1.49594: Flags [S.], seq 2341799088, ack 2166014138, win 43690, options [mss 65495,sackOK,TS val 1208713786 ecr 1208713786,nop,wscale 7], length 0
10:02:47.549520 IP 127.0.0.1.49594 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 1208713786 ecr 1208713786], length 0
10:02:47.549568 IP 127.0.0.1.49594 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1208713786 ecr 1208713786], length 5
10:02:47.750084 IP 127.0.0.1.49594 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1208713987 ecr 1208713786], length 5
10:02:47.951088 IP 127.0.0.1.49594 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1208714188 ecr 1208713786], length 5
10:02:48.354089 IP 127.0.0.1.49594 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1208714591 ecr 1208713786], length 5
แฉแแแ แแฎแแแแแ, แ แแ แแแแจแแ แ แแแแงแแ แแแฃแแแ แแ แแแแแแขแ แแแ แแแแแแแแก แแแแแชแแแแแก แกแแ แแแ แแ.
แฒฃแฒแฒ แฒงแฒแฒก
แแ แจแแแแฎแแแแแจแ แฅแชแแแ แแแแแ แแฅแแแแ: แแแแแแขแ แแแ แจแแซแแแแก แแแแฎแแแแแก แแแแแแแแแก, แแแแ แแ แแแแฆแแแก ICMP 127.0.0.1 tcp แแแ แขแ 12345 แแแฃแฌแแแแแแแแ แแ แแแแแ แแแ แแ แ แแแแฎแแแแแก แฎแแแแฎแแ แฌแแ แแแแแแก แจแแ แแก แแฅแกแแแแแแขแฃแ แแ. แแ แซแแแแแ แแกแ แแแแแแงแฃแ แแแ:
iptables -A INPUT -p tcp --tcp-flags PSH PSH --dport 12345 -j REJECT
แฃแแ แงแแคแ tcp-แแแแแขแแแ แแแแก แกแแจแฃแแแแแแ
แแ แซแแแแแ แแกแ แแแแแแงแฃแ แแแ:
iptables -A INPUT -p tcp --tcp-flags PSH PSH --dport 12345 -j REJECT --reject-with tcp-reset
แฉแแแ แฃแแแ แแแชแแ, แ แแ แแแแแงแแแแแแกแแก --แฃแแ แงแแคแ-tcp-แแแแแขแแแ แแแแ แแแแแแขแ แกแแแแกแฃแฎแแ แแแแฆแแแก RST แแแแแขแก, แแแแขแแ แฅแชแแแแก แแ แแแแแแแ แแแ แจแแกแแซแแแแแแแ: RST แแแแแขแแก แแแฆแแแ แแแแจแแ แแก แแแแงแแ แแแแกแแก แแแจแแแแก, แ แแ แกแแแแขแ แแแฃแแแแแแแแ แแแแฎแฃแ แแแ แแแแ แ แแฎแแ แแก, แ แแช แแแจแแแแก, แ แแ แแแแแแขแแ แฃแแแ แแแแฆแแก แแแแจแแ แ แแแแแงแแแแแฃแแแ แแแแแขแแแแแแก แแแแ . แแแแแ แแแแฃแจแแแ แฉแแแแ แกแแ แแแขแ แแ แแแแ แฌแแฃแแแแ แแแแจแ. แแ แแกแ แแแแแแงแฃแ แแแ แแแซแ แแแแ:
แกแแขแ แแแกแแแ แขแ แแแแแแกแแงแ แแแ
[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
10:22:14.186269 IP 127.0.0.1.52536 > 127.0.0.1.12345: Flags [S], seq 2615137531, win 43690, options [mss 65495,sackOK,TS val 1209880423 ecr 0,nop,wscale 7], length 0
10:22:14.186284 IP 127.0.0.1.12345 > 127.0.0.1.52536: Flags [S.], seq 3999904809, ack 2615137532, win 43690, options [mss 65495,sackOK,TS val 1209880423 ecr 1209880423,nop,wscale 7], length 0
10:22:14.186293 IP 127.0.0.1.52536 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 1209880423 ecr 1209880423], length 0
10:22:14.186338 IP 127.0.0.1.52536 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1209880423 ecr 1209880423], length 5
10:22:14.186344 IP 127.0.0.1.12345 > 127.0.0.1.52536: Flags [R], seq 3999904810, win 0, length 0
แฃแแ แงแแแแ icmp-host-unreachable
แแคแแฅแ แแ, แฃแแแ แงแแแแแกแแแแก แแแกแแแแแแ, แ แแแแ แ แแฅแแแแ แแ แซแแแแแ :) แแแแแแขแแก แฅแชแแแ แแ แจแแแแฎแแแแแจแ แแแแแ แแแแกแฎแแแแแแฃแแ แแฅแแแแ แแแ แขแแแ REJECT-แแ: แแแแแแขแ แแ แแแแ แแแก แแแแแก แแแแแขแแก แฎแแแแฎแแ แแแแแแแแแก แแชแแแแแแแแก แจแแ แแก.
[user@host ~]# tcpdump -i lo -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
10:29:56.149202 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65
10:29:56.349107 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65
10:29:56.549117 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65
10:29:56.750125 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65
10:29:56.951130 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65
10:29:57.152107 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65
10:29:57.353115 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65
แแแแแงแแแแแก
แแ แแ แแก แกแแญแแ แ แแแแขแแ แแแแก แแแฌแแ แ, แ แแ แจแแแแแฌแแแ แกแแ แแแกแแก แฃแ แแแแ แแฅแแแแแแ แฉแแแแแแแแแฃแ แแแแแแขแแแ แแ แกแแ แแแ แแแ; แแแแฏแแ แกแแแแแ แแกแแ แแแแแแงแแแแ Linux-แจแ แแแแแแแ แกแขแแแแแ แขแฃแแ แแแแฃแแแแฃแ แ แกแแจแฃแแแแแแแ.
แกแขแแขแแแจแ แแแแฎแแแฃแ แแแแฃแแแแฃแ แแ แแแ แแแแแก แแแแแ แฃแคแ แ แแแขแ แจแแกแแซแแแแแแแแแ แแฅแแ, แแแแ แ แแฆแฌแแ แแแ แแงแ, แแกแ แ แแ แแฅแแแ แจแแแแซแแแแ แแแแคแแฅแ แแ แแแแ แแแแแงแแแแแแก แ แแแแแแแแ แกแแแฃแแแ แ แแแ แแแแขแ. แแแ แแแแ แแ แงแแแแแแแแก แกแแแแแ แแกแ แแแฅแแก แแก, แ แแแแช แแแแฌแแ แ (แกแแแแแแแแแแจแ, แแแแแ แฃแคแ แ แแแแแแแ). แแฃ แแงแแแแแ แแ แแ แแกแแแแก แแ แแแ แแแแแก แแฅแแแแก แแแแแแแแแจแ แขแแกแขแแ แแแแกแแก, แแแฎแแแ แแแฌแแ แแ แแฃแกแขแแ แ แแแแ . แแฃ แแ แ, แแแจแแ แแแแแแแแแแ, แ แแ แแฅแแแแ แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแ แฃแแแแแกแ แแแฎแแแแ, แแฃ แแแแแฌแงแแแขแ แแแก แขแแกแขแแ แแแแก แฅแกแแแแก แแ แแแแแแแแแก แแแ แแแแแจแ แจแแแแแแแแแแแฃแแ แแแแแแแแแก แแแแแงแแแแแแ.
แฌแงแแ แ: www.habr.com