เดฒเดฟเดจเด•เตเดธเดฟเตฝ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เด…เดจเตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต

เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เดนเดฒเต‹, เดŽเดจเตเดฑเต† เดชเต‡เดฐเต เดธเดพเดท, เดžเดพเตป FunCorp-เตฝ เดฌเดพเด•เตเด•เต†เตปเดกเต เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดจเดฏเดฟเด•เตเด•เตเดจเตเดจเต. เดฎเดฑเตเดฑเต เดชเดฒเดฐเต†เดฏเตเด‚ เดชเต‹เดฒเต† เดžเด™เตเด™เดณเตเด‚ เดธเต‡เดตเดจ-เด…เดงเดฟเดทเตเด เดฟเดค เดตเดพเดธเตเดคเตเดตเดฟเดฆเตเดฏ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต. เด’เดฐเต เดตเดถเดคเตเดคเต, เด‡เดคเต เดœเต‹เดฒเดฟ เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต, เด•เดพเดฐเดฃเด‚ ... เด“เดฐเต‹ เดธเต‡เดตเดจเดตเตเด‚ เดตเต†เดตเตเดตเต‡เดฑเต† เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เดฎเดฑเตเดตเดถเดคเตเดคเต, เดชเดฐเดธเตเดชเดฐเด‚ เดธเต‡เดตเดจเด™เตเด™เดณเตเดŸเต† เด‡เดŸเดชเต†เดŸเตฝ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดจเตเดฑเต† เด†เดตเดถเตเดฏเด•เดคเดฏเตเดฃเตเดŸเต, เด‡เดคเต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเตฝ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เดณเตเดŸเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเต† เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจ เด…เดŸเดฟเดธเตเดฅเดพเดจ เดธเดพเดนเดšเดฐเตเดฏเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดตเตเดจเตเดจ เดฐเดฃเตเดŸเต เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเดพเตป เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚.

เดฒเดฟเดจเด•เตเดธเดฟเตฝ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เด…เดจเตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต

เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เด…เดจเตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต

เดธเดพเดงเดพเดฐเดฃเด—เดคเดฟเดฏเดฟเตฝ, เดจเดฒเตเดฒ เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเต เด•เดฃเด•เตเดทเดจเตเดณเตเดณ เดŸเต†เดธเตเดฑเตเดฑเต เดธเต†เตผเดตเดฑเตเด•เดณเดฟเตฝ เดธเต‹เดซเตโ€Œเดฑเตเดฑเตโ€Œเดตเต†เดฏเตผ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต. เด•เด เดฟเดจเดฎเดพเดฏ เด‰เตฝเดชเตเดชเดพเดฆเดจ เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเด•เดณเดฟเตฝ, เด•เดพเดฐเตเดฏเด™เตเด™เตพ เด…เดคเตเดฐ เดธเตเด—เดฎเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฟเดฒเตเดฒ, เด…เดคเดฟเดจเดพเตฝ เดšเดฟเดฒเดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพ เดฎเต‹เดถเด‚ เด•เดฃเด•เตเดทเตป เด…เดตเดธเตเดฅเด•เดณเดฟเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. Linux-เตฝ, เด…เดคเตเดคเดฐเด‚ เดตเตเดฏเดตเดธเตเดฅเด•เตพ เด…เดจเตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดšเตเดฎเดคเดฒเดฏเต† เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เดธเดนเดพเดฏเดฟเด•เตเด•เตเด‚ tc.

เดŸเดฟเดธเดฟ(abbr. เดŸเตเดฐเดพเดซเดฟเด•เต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต) เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเตฝ เดจเต†เดฑเตเดฑเตเดตเตผเด•เตเด•เต เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เดณเตเดŸเต† เดŸเตเดฐเดพเตปเดธเตเดฎเดฟเดทเตป เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เดˆ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเด•เตเด•เต เดฎเดฟเด•เดšเตเดš เด•เดดเดฟเดตเตเด•เดณเตเดฃเตเดŸเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดตเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด•เต‚เดŸเตเดคเตฝ เดตเดพเดฏเดฟเด•เตเด•เดพเด‚ เด‡เดตเดฟเดŸเต†. เด‡เดตเดฟเดŸเต† เดžเดพเตป เด…เดตเดฏเดฟเตฝ เดšเดฟเดฒเดคเต เดฎเดพเดคเตเดฐเด‚ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด‚: เดŸเตเดฐเดพเดซเดฟเด•เต เดทเต†เดกเตเดฏเต‚เดณเดฟเด‚เด—เดฟเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต, เด‡เดคเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต qdisc, เด•เต‚เดŸเดพเดคเต† เดจเดฎเตเด•เตเด•เต เด’เดฐเต เด…เดธเตเดฅเดฟเดฐเดฎเดพเดฏ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เด…เดจเตเด•เดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดจเดพเตฝ, เดžเด™เตเด™เตพ เด•เตเดฒเดพเดธเตเดธเตโ€Œเดฒเต†เดธเต qdisc เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚ เดจเต†เดฑเตเดฑเด‚.

เดจเดฎเตเด•เตเด•เต เดธเต†เตผเดตเดฑเดฟเตฝ เด’เดฐเต เดŽเด•เตเด•เต‹ เดธเต†เตผเดตเตผ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเด‚ (เดžเดพเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดคเต nmap-ncat):

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

เด•เตเดฒเดฏเดจเตเดฑเตเด‚ เดธเต†เตผเดตเดฑเตเด‚ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏเดคเตเดคเดฟเตฝ เดชเตเดฐเดคเต€เด•เตเดทเดฟเดšเตเดš เด…เดฐ เดธเต†เด•เตเด•เตปเดกเต เดฒเดพเด—เต เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเดคเดพเดฏเดฟ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚. เดฒเดพเด—เต เด•เต‚เดŸเตเดคเดฒเดพเดฃเต†เด™เตเด•เดฟเตฝ เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‚เดŸเตเดคเตฝ เดฐเดธเด•เดฐเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต: เด•เต‡เตผเดฃเตฝ เดšเดฟเดฒ เดŸเดฟเดธเดฟเดชเดฟ เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ เดตเต€เดฃเตเดŸเตเด‚ เด…เดฏเดฏเตเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเต. เดจเดฎเตเด•เตเด•เต เด•เดพเดฒเดคเดพเดฎเดธเด‚ 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,[เดฎเต‹เดถเดฎเดพเดฏ เด“เดชเตเดทเตป]>. เดŽเดจเตเดจเดพเตฝ เดชเตเดฐเดงเดพเดจ เด•เดพเดฐเตเดฏเด‚, เด…เดตเดธเดพเดจเด‚ เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดšเตเดšเต เดŽเดจเตเดจเดคเดพเดฃเต - เดŸเดฟเดธเดฟเดชเดฟ เด…เดคเดฟเดจเตเดฑเต† เดšเตเดฎเดคเดฒเดฏเต† เดจเต‡เดฐเดฟเดŸเตเดŸเต.

เดชเดพเด•เตเด•เดฑเตเดฑเต เดกเตเดฏเต‚เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดฑเตเดฑเต†เดจเตเดคเดพเดฃเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด• เดจเต†เดฑเตเดฑเด‚? เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดชเดพเด•เตเด•เดฑเตเดฑเต เดจเดทเตเดŸเดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเดชเดฐเต€เดค เดธเดพเดนเดšเดฐเตเดฏเด‚ เด…เดจเตเด•เดฐเดฟเด•เตเด•เตเด•-เดชเดพเด•เตเด•เดฑเตเดฑเต เดกเตเดฏเต‚เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป. เดˆ เด•เดฎเดพเตปเดกเต 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 เดฎเดฟเดฒเตเดฒเดฟเดธเต†เด•เตเด•เตปเดกเต เด•เดพเดฒเดคเดพเดฎเดธเดคเตเดคเต‹เดŸเต† เด…เดฏเดฏเตโ€Œเด•เตเด•เตเด‚.

เด“เดฐเต‹ Nth เดชเดพเด•เตเด•เดฑเตเดฑเตเด‚ เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดชเตเดฐเต‹เดฌเดฌเดฟเดฒเดฟเดฑเตเดฑเดฟ (เด•เต‚เดŸเดพเดคเต† เดชเดฐเดธเตเดชเดฐเดฌเดจเตเดงเด‚) เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดคเตฝเด•เตเดทเดฃเด‚ เด…เดฏเดฏเตโ€Œเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดฌเดพเด•เตเด•เดฟเดฏเตเดณเตเดณเดคเต เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เด•เดพเดฒเดคเดพเดฎเดธเดคเตเดคเต‹เดŸเต†เดฏเดพเดฃเต เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เดฐเต€เดคเดฟ. เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด‰เดฆเดพเดนเดฐเดฃเด‚:

tc qdisc change dev lo root netem delay 10ms reorder 25% 50% gap 5

เด“เดฐเต‹ เด…เดžเตเดšเดพเดฎเดคเตเดคเต† เดชเดพเด•เตเด•เต‡เดœเดฟเดจเตเด‚ เด•เดพเดฒเดคเดพเดฎเดธเดฎเดฟเดฒเตเดฒเดพเดคเต† เด…เดฏเดฏเตเด•เตเด•เดพเดจเตเดณเตเดณ 25% เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดŸเต.

เดฌเดพเตปเดกเตโ€Œเดตเดฟเดกเตเดคเตเดคเต เดฎเดพเดฑเตเดฑเตเดจเตเดจเต

เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เดŽเดฒเตเดฒเดพเดฏเดฟเดŸเดคเตเดคเตเด‚ เด…เดตเตผ เดชเดฐเดพเดฎเตผเดถเดฟเด•เตเด•เตเดจเตเดจเต เดŸเดฟ.เดฌเดฟ.เดŽเดซเต, เดŽเดจเตเดจเดพเตฝ เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต† เดจเต†เดฑเตเดฑเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดฌเดพเตปเดกเตโ€Œเดตเดฟเดกเตเดคเตเดคเต เดฎเดพเดฑเตเดฑเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚:

tc qdisc change dev lo root netem rate 56kbit

เดˆ เดธเด‚เด˜เด‚ เดšเตเดฑเตเดฑเดฟเดฒเตเด‚ เดŸเตเดฐเต†เด•เตเด•เดฟเด‚เด—เต เดจเดŸเดคเตเดคเตเด‚ เดฒเต‡เดพเด•เตเด•เตฝเดนเต‡เดพเดธเตเดฑเตเดฑเดฟเตฝ เด’เดฐเต เดกเดฏเตฝ-เด…เดชเตเดชเต เดฎเต‹เดกเด‚ เดตเดดเดฟ เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเต เดธเตผเดซเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดชเต‹เดฒเต† เดตเต‡เดฆเดจเดพเดœเดจเด•เดฎเดพเดฃเต. เดฌเดฟเดฑเตเดฑเตเดฑเต‡เดฑเตเดฑเต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดชเตเดฑเดฎเต‡, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฒเดฟเด™เตเด•เต เดฒเต†เดฏเตผ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดฎเต‹เดกเดฒเตเด‚ เด…เดจเตเด•เดฐเดฟเด•เตเด•เดพเด‚: เดชเดพเด•เตเด•เดฑเตเดฑเดฟเดจเต เด“เดตเตผเดนเต†เดกเต, เดธเต†เดฒเตเดฒเดฟเดจเตเดฑเต† เดตเดฒเตเดชเตเดชเด‚, เดธเต†เดฒเตเดฒเดฟเดจเตเดฑเต† เด“เดตเตผเดนเต†เดกเต เดŽเดจเตเดจเดฟเดต เดธเดœเตเดœเดฎเดพเด•เตเด•เตเด•. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด‡เดคเต เด…เดจเตเด•เดฐเดฟเด•เตเด•เดพเด‚ เดŽ.เดŸเดฟ.เดŽเด‚ เด•เต‚เดŸเดพเดคเต† เดฌเดฟเดฑเตเดฑเตเดฑเต‡เดฑเตเดฑเต 56 เด•เต†เดฌเดฟเดฑเตเดฑเต/เดธเต†เด•เตเด•เตปเดกเต:

tc qdisc change dev lo root netem rate 56kbit 0 48 5

เด•เดฃเด•เตเดทเตป เดธเดฎเดฏเดชเดฐเดฟเดงเดฟ เด…เดจเตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต

เดธเต‹เดซเตโ€Œเดฑเตเดฑเตโ€Œเดตเต†เดฏเตผ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดŸเต†เดธเตเดฑเตเดฑเต เดชเตเดฒเดพเดจเดฟเดฒเต† เดฎเดฑเตเดฑเตŠเดฐเต เดชเตเดฐเดงเดพเดจ เด•เดพเดฐเตเดฏเด‚ เดธเดฎเดฏเดชเดฐเดฟเดงเดฟเดฏเดพเดฃเต. เด‡เดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต, เด•เดพเดฐเดฃเด‚ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเดฟเตฝ, เดธเต‡เดตเดจเด™เตเด™เดณเดฟเดฒเตŠเดจเตเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเด•เตเดฎเตเดชเต‹เตพ, เดฎเดฑเตเดฑเตเดณเตเดณเดตเตผ เด•เตƒเดคเตเดฏเดธเดฎเดฏเดคเตเดคเต เดฎเดฑเตเดฑเตเดณเตเดณเดตเดฐเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเด•เดฏเต‹ เด•เตเดฒเดฏเดจเตเดฑเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดชเดฟเดถเด•เต เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด•เดฏเต‹ เดšเต†เดฏเตเดฏเดฃเด‚, เด’เดฐเต เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเดฒเตเด‚ เด…เดตเตผ เด’เดฐเต เดชเตเดฐเดคเดฟเด•เดฐเดฃเดคเตเดคเดฟเดจเต‹ เด•เดฃเด•เตเดทเดจเต‹ เด•เดพเดคเตเดคเตเดจเดฟเตฝเด•เตเด•เดพเดคเต† เดนเดพเด‚เด—เต เดšเต†เดฏเตเดฏเดฐเตเดคเต. เดธเตเดฅเดพเดชเดฟเด•เตเด•เดพเตป.

เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดจเดฟเดฐเดตเดงเดฟ เดฎเดพเตผเด—เด™เตเด™เดณเตเดฃเตเดŸเต: เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดชเตเดฐเดคเดฟเด•เดฐเดฟเด•เตเด•เดพเดคเตเดค เด’เดฐเต เดฎเต‹เด•เตเด•เต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เดกเต€เดฌเด—เตเด—เตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเดฒเต‡เด•เตเด•เต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเด•, เดถเดฐเดฟเดฏเดพเดฏ เดธเตเดฅเดฒเดคเตเดคเต เด’เดฐเต เดฌเตเดฐเต‡เด•เตเด•เตโ€Œเดชเต‹เดฏเดฟเดจเตเดฑเต เด‡เดŸเตเด•, เดชเตเดฐเต‹เดธเดธเตเดธเต เดจเดฟเตผเดคเตเดคเตเด• (เด‡เดคเต เด’เดฐเตเดชเด•เตเดทเต‡ เดเดฑเตเดฑเดตเตเด‚ เดตเดฟเด•เดฒเดฎเดพเดฏ เดฎเดพเตผเด—เดฎเดพเดฃเต). เดŽเดจเตเดจเดพเตฝ เดเดฑเตเดฑเดตเตเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เด’เดจเตเดจเต เดซเดฏเตผเดตเดพเตพ เดชเต‹เตผเดŸเตเดŸเตเด•เดณเต‹ เดนเต‹เดธเตเดฑเตเดฑเตเด•เดณเต‹ เด†เดฃเต. เด‡เดคเต เดžเด™เตเด™เดณเต† เดธเดนเดพเดฏเดฟเด•เตเด•เตเด‚ iptables.

เดชเตเดฐเด•เดŸเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ, เดžเด™เตเด™เตพ เดซเดฏเตผเดตเดพเตพ เดชเต‹เตผเดŸเตเดŸเต 12345 เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดžเด™เตเด™เดณเตเดŸเต† เด•เตเดฒเดฏเดจเตเดฑเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚. เด…เดฏเดšเตเดšเดฏเดพเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดˆ เดชเต‹เตผเดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เด”เดŸเตเดŸเตโ€Œเด—เต‹เดฏเดฟเด‚เด—เต เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เดณเต‹ เดฑเดฟเดธเต€เดตเดฑเดฟเตฝ เด‡เตปเด•เดฎเดฟเด‚เด—เต เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เดณเต‹ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดซเดฏเตผเดตเดพเตพ เดšเต†เดฏเตเดฏเดพเด‚. เดŽเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเดฟเตฝ, เด‡เตปเด•เดฎเดฟเด‚เด—เต เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ เดซเดฏเตผเดตเดพเตพ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเด‚ (เดžเด™เตเด™เตพ เดšเต†เดฏเดฟเตป เด‡เตปเดชเตเดŸเตเดŸเตเด‚ เด“เดชเตเดทเดจเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต --dport). เด…เดคเตเดคเดฐเด‚ เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ TCP เดซเตเดฒเดพเด—เต RST เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดกเตเดฐเต‹เดชเตเดชเต เดšเต†เดฏเตเดฏเตเด•เดฏเต‹ เดจเดฟเดฐเดธเดฟเด•เตเด•เตเด•เดฏเต‹ เดจเดฟเดฐเดธเดฟเด•เตเด•เตเด•เดฏเต‹ เด†เด•เดพเด‚, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ ICMP เดนเต‹เดธเตเดฑเตเดฑเต เดฒเดญเตเดฏเดฎเดฒเตเดฒ (เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ เดธเตเดตเดญเดพเดตเด‚ เด‡เดคเดพเดฃเต icmp-port-unreachable, เด•เต‚เดŸเดพเดคเต† เดฎเดฑเตเดชเดŸเดฟ เด…เดฏเด•เตเด•เดพเดจเตเด‚ เด…เดตเดธเดฐเดฎเตเดฃเตเดŸเต icmp-net-เด…เตบเดฑเต€เดšเตเดšเดฌเดฟเตพ, icmp-proto-unreachable, icmp-net-เดจเดฟเดฐเต‹เดงเดจเด‚ ะธ icmp-เดนเต‹เดธเตเดฑเตเดฑเต-เดจเดฟเดฐเต‹เดงเดจเด‚).

เดกเตเดฐเต‹เดชเตเดชเต

เดกเตเดฐเต‹เดชเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เดจเดฟเดฏเดฎเด‚ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ "เด…เดชเตเดฐเดคเตเดฏเด•เตเดทเดฎเดพเด•เตเด‚".

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 เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ เด…เดฏเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเดคเต เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚. เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เด•เตเดฒเดฏเดจเตเดฑเดฟเตฝ เด’เดฐเต เดšเต†เดฑเดฟเดฏ เดฌเด—เต เด•เดฃเตเดŸเต†เดคเตเดคเดฟ: เดจเดฟเด™เตเด™เตพ เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต เดธเดฎเดฏเดชเดฐเดฟเดงเดฟ ()เด•เตเดฒเดฏเดจเตเดฑเต เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเดจเตเดจ เดธเดฎเดฏเด‚ เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเต.

เดžเด™เตเด™เตพ เด‰เดŸเดจเดŸเดฟ เดจเดฟเดฏเดฎเด‚ เดจเต€เด•เตเด•เด‚เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

iptables -D INPUT -p tcp --dport 12345 -j DROP

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดฒเตเดฒเดพ เดจเดฟเดฏเดฎเด™เตเด™เดณเตเด‚ เด’เดฐเต‡เดธเดฎเดฏเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

iptables -F

เดจเดฟเด™เตเด™เตพ เดกเต‹เด•เตเด•เตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเดจเตเดจ เดŽเดฒเตเดฒเดพ เดŸเตเดฐเดพเดซเดฟเด•เตเด•เตเด‚ เดซเดฏเตผเดตเดพเตพ เดšเต†เดฏเตเดฏเดฃเดฎเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚:

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-reset เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเดฐเดธเดฟเด•เตเด•เตเด•

เด“เดชเตเดทเตป เดšเต‡เตผเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เดพเด‚ --tcp-reset-เดจเตŠเดชเตเดชเด‚ เดจเดฟเดฐเดธเดฟเด•เตเด•เตเด•:

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 เดฒเดญเตเดฏเดฎเดฒเตเดฒ.

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดฑเตเดฑเต เดจเดฟเดฐเดธเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเด‚ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเด‚, เดžเดพเตป เด‡เดตเดฏเดฟเตฝ เดถเตเดฐเดฆเตเดง เด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฟเด•เตเด•เตเด‚ :)

เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดธเดฎเดฏเดชเดฐเดฟเดงเดฟ เด…เดจเตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต

เด•เตเดฒเดฏเดจเตเดฑเดฟเดจเต เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเดฎเต†เด™เตเด•เดฟเดฒเตเด‚ เด…เดคเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดฏเดฏเตโ€Œเด•เตเด•เดพเดจเดพเดตเดฟเดฒเตเดฒ เดŽเดจเตเดจเดคเดพเดฃเต เดฎเดฑเตเดฑเตŠเดฐเต เดธเดพเดนเดšเดฐเตเดฏเด‚. เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเด‚เด—เต เด‰เดŸเดจเดŸเดฟ เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเดคเดฟเดฐเดฟเด•เตเด•เดพเตป เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ เดŽเด™เตเด™เดจเต† เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต†เดฏเตเดฏเดพเด‚? เด•เตเดฒเดฏเดจเตเดฑเตเด‚ เดธเต†เตผเดตเดฑเตเด‚ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏเดคเตเดคเดฟเดจเตเดฑเต† เดŸเตเดฐเดพเดซเดฟเด•เต เดจเดฟเด™เตเด™เตพ เดจเต‹เด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด’เดฐเต เด•เดฃเด•เตเดทเตป เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, 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-reset เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเดฐเดธเดฟเด•เตเด•เตเด•

เด•เดฎเดพเตปเดกเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

iptables -A INPUT -p tcp --tcp-flags PSH PSH --dport 12345 -j REJECT --reject-with tcp-reset

เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดžเด™เตเด™เตพเด•เตเด•เดฑเดฟเดฏเดพเด‚ --tcp-reset-เดจเตŠเดชเตเดชเด‚ เดจเดฟเดฐเดธเดฟเด•เตเด•เตเด• เดชเตเดฐเดคเดฟเด•เดฐเดฃเดฎเดพเดฏเดฟ เด•เตเดฒเดฏเดจเตเดฑเดฟเดจเต เด’เดฐเต 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 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเดฐเดธเดฟเด•เตเด•เตเด•

เด•เดฎเดพเตปเดกเต เดŽเด™เตเด™เดจเต†เดฏเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† เดตเตเดฏเด•เตเดคเดฎเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต :) เดˆ เด•เต‡เดธเดฟเตฝ เด•เตเดฒเดฏเดจเตเดฑเดฟเดจเตเดฑเต† เดชเต†เดฐเตเดฎเดพเดฑเตเดฑเด‚ เดฒเดณเดฟเดคเดฎเดพเดฏ เด’เดฐเต เดจเดฟเดฐเดธเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเต เด…เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เด…เดฒเตเดชเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚: เดชเดพเด•เตเด•เดฑเตเดฑเต เดตเต€เดฃเตเดŸเตเด‚ เด…เดฏเดฏเตเด•เตเด•เดพเดจเตเดณเตเดณ เดถเตเดฐเดฎเด™เตเด™เตพเด•เตเด•เดฟเดŸเดฏเดฟเดฒเตเดณเตเดณ เดธเดฎเดฏเดชเดฐเดฟเดงเดฟ เด•เตเดฒเดฏเดจเตเดฑเต เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เดฟเดฒเตเดฒ.

[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

เดคเต€เดฐเตเดฎเดพเดจเด‚

เด’เดฐเต เดนเดพเด‚เด—เต เด•เตเดฒเดฏเดจเตเดฑเตเดฎเดพเดฏเต‹ เดธเต†เตผเดตเดฑเตเดฎเดพเดฏเต‹ เด’เดฐเต เดธเต‡เดตเดจเดคเตเดคเดฟเดจเตเดฑเต† เด‡เดŸเดชเต†เดŸเตฝ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด’เดฐเต เดฎเต‹เด•เตเด•เต เดŽเดดเตเดคเต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ; เดšเดฟเดฒเดชเตเดชเต‹เตพ เดฒเดฟเดจเด•เตเดธเดฟเตฝ เด•เดพเดฃเตเดจเตเดจ เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเตฝ เดฎเดคเดฟเดฏเดพเด•เตเด‚.

เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดšเตผเดšเตเดš เดšเต†เดฏเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเด•เตพเด•เตเด•เต เดตเดฟเดตเดฐเดฟเดšเตเดšเดคเดฟเดจเต‡เด•เตเด•เดพเตพ เด•เต‚เดŸเตเดคเตฝ เด•เดดเดฟเดตเตเด•เดณเตเดฃเตเดŸเต, เด…เดคเดฟเดจเดพเตฝ เด…เดต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เด“เดชเตเดทเดจเตเด•เดณเดฟเตฝ เดšเดฟเดฒเดคเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เตŠเดฃเตเดŸเตเดตเดฐเดพเด‚. เดตเตเดฏเด•เตเดคเดฟเดชเดฐเดฎเดพเดฏเดฟ, เดžเดพเตป เดŽเดดเตเดคเดฟเดฏ เด•เดพเดฐเตเดฏเด™เตเด™เตพ เดŽเดจเดฟเด•เตเด•เต เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เดฎเดคเดฟเดฏเดพเด•เตเด‚ (เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เด…เดคเดฟเดฒเตเด‚ เด•เตเดฑเดตเต). เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เดฎเตเดชเดจเดฟเดฏเดฟเตฝ เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เดฟเตฝ เด‡เดตเดฏเต‹ เดธเดฎเดพเดจเดฎเดพเดฏ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเด•เดณเต‹ เดจเดฟเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดŽเด™เตเด™เดจเต† เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดŽเดดเตเดคเตเด•. เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเดšเตเดš เดฐเต€เดคเดฟเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เดณเตเดŸเต† เด…เดตเดธเตเดฅเดฏเดฟเตฝ เด‡เดคเต เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพ เดคเต€เดฐเตเดฎเดพเดจเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเต‹เดซเตเดฑเตเดฑเตโ€Œเดตเต†เดฏเตผ เดฎเดฟเด•เดšเตเดšเดคเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดžเดพเตป เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•