เจฒเฉ€เจจเจ•เจธ เจตเจฟเฉฑเจš เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจจเจพ

เจธเจพเจฐเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจนเฉˆเจฒเฉ‹, เจฎเฉ‡เจฐเจพ เจจเจพเจฎ เจธเจพเจธเจผเจพ เจนเฉˆ, เจฎเฉˆเจ‚ FunCorp 'เจคเฉ‡ เจฌเฉˆเจ•เจเจ‚เจก เจŸเฉˆเจธเจŸเจฟเฉฐเจ— เจฆเฉ€ เจ…เจ—เจตเจพเจˆ เจ•เจฐเจฆเจพ เจนเจพเจ‚เฅค เจ…เจธเฉ€เจ‚, เจ•เจˆ เจนเฉ‹เจฐเจพเจ‚ เจตเจพเจ‚เจ—, เจ‡เฉฑเจ• เจธเฉ‡เจตเจพ-เจฎเฉเจ–เฉ€ เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจนเฉˆเฅค เจ‡เฉฑเจ• เจชเจพเจธเฉ‡, เจ‡เจน เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจธเจฐเจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ ... เจนเจฐเฉ‡เจ• เจธเฉ‡เจตเจพ เจจเฉ‚เฉฐ เจตเฉฑเจ–เจฐเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจŸเฉˆเจธเจŸ เจ•เจฐเจจเจพ เจ†เจธเจพเจจ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจฆเฉ‚เจœเฉ‡ เจชเจพเจธเฉ‡, เจ‡เฉฑเจ• เจฆเฉ‚เจœเฉ‡ เจจเจพเจฒ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเฉ€ เจ†เจชเจธเฉ€ เจคเจพเจฒเจฎเฉ‡เจฒ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจœเฉ‹ เจ…เจ•เจธเจฐ เจจเฉˆเฉฑเจŸเจตเจฐเจ• 'เจคเฉ‡ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจฎเฉˆเจ‚ เจฆเฉ‹ เจ‰เจชเจฏเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เจพ เจœเฉ‹ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจฆเฉเจฐเจฟเจธเจผเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจตเจฐเจคเฉ€เจ†เจ‚ เจœเจพ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ เจœเฉ‹ เจจเฉˆเจŸเจตเจฐเจ• เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจ—เฉ€ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ‡ เจธเฉฐเจšเจพเจฒเจจ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจฆเฉ€เจ†เจ‚ เจนเจจ.

เจฒเฉ€เจจเจ•เจธ เจตเจฟเฉฑเจš เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจจเจพ

เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจจเจพ

เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจธเฉŒเจซเจŸเจตเฉ‡เจ…เจฐ เจฆเฉ€ เจœเจพเจ‚เจš เจ‡เฉฑเจ• เจšเฉฐเจ—เฉ‡ เจ‡เฉฐเจŸเจฐเจจเฉˆเจŸ เจ•เจจเฉˆเจ•เจธเจผเจจ เจตเจพเจฒเฉ‡ เจŸเฉˆเจธเจŸ เจธเจฐเจตเจฐเจพเจ‚ 'เจคเฉ‡ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจ•เจ เฉ‹เจฐ เจ‰เจคเจชเจพเจฆเจจ เจตเจพเจคเจพเจตเจฐเจจ เจตเจฟเฉฑเจš, เจšเฉ€เจœเจผเจพเจ‚ เจ‡เฉฐเจจเฉ€เจ†เจ‚ เจจเจฟเจฐเจตเจฟเจ˜เจจ เจจเจนเฉ€เจ‚ เจนเฉ‹ เจธเจ•เจฆเฉ€เจ†เจ‚, เจ‡เจธเจฒเจˆ เจ•เจˆ เจตเจพเจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฎเจพเฉœเฉ€เจ†เจ‚ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจธเจฅเจฟเจคเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจฒเฉ€เจจเจ•เจธ เจ‰เฉฑเจคเฉ‡, เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจ…เจœเจฟเจนเฉ€เจ†เจ‚ เจธเจฅเจฟเจคเฉ€เจ†เจ‚ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจจ เจฆเฉ‡ เจ•เฉฐเจฎ เจตเจฟเฉฑเจš เจฎเจฆเจฆ เจ•เจฐเฉ‡เจ—เฉ€ tc.

tc(abbr เจŸเฉเจฐเฉˆเจซเจฟเจ• เจ•เฉฐเจŸเจฐเฉ‹เจฒ เจคเฉ‹เจ‚) เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจฟเจธเจŸเจฎ เจตเจฟเฉฑเจš เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจชเฉˆเจ•เฉ‡เจŸเจพเจ‚ เจฆเฉ‡ เจชเฉเจฐเจธเจพเจฐเจฃ เจจเฉ‚เฉฐ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจธเจนเฉ‚เจฒเจค เจตเจฟเฉฑเจš เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ‚ เจนเจจ, เจคเฉเจธเฉ€เจ‚ เจ‰เจนเจจเจพเจ‚ เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ เจชเฉœเฉเจน เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ‡เฉฑเจฅเฉ‡. เจ‡เฉฑเจฅเฉ‡ เจฎเฉˆเจ‚ เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ•เฉเจ เจนเฉ€ เจตเจฟเจšเจพเจฐ เจ•เจฐเจพเจ‚เจ—เจพ: เจ…เจธเฉ€เจ‚ เจŸเฉเจฐเฉˆเจซเจฟเจ• เจธเจฎเจพเจ‚-เจธเจพเจฐเจฃเฉ€ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเจพเจ‚, เจœเจฟเจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจตเจฐเจคเจฆเฉ‡ เจนเจพเจ‚ qdisc, เจ…เจคเฉ‡ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ…เจธเจฅเจฟเจฐ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจ…เจธเฉ€เจ‚ เจ•เจฒเจพเจธ เจฐเจนเจฟเจค qdisc เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡ netem.

เจšเจฒเฉ‹ เจธเจฐเจตเจฐ เจ‰เฉฑเจคเฉ‡ เจ‡เฉฑเจ• เจˆเจ•เฉ‹ เจธเจฐเจตเจฐ เจฒเจพเจ‚เจš เจ•เจฐเฉ€เจ (เจฎเฉˆเจ‚ เจตเจฐเจคเจฟเจ† 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

เจคเฉเจธเฉ€เจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจ•เจฒเจพเจ‡เฉฐเจŸ เจ…เจคเฉ‡ เจธเจฐเจตเจฐ เจตเจฟเจšเจ•เจพเจฐ เจ†เจชเจธเฉ€ เจคเจพเจฒเจฎเฉ‡เจฒ เจตเจฟเฉฑเจš เจ…เฉฑเจงเฉ‡ เจธเจ•เจฟเฉฐเจŸ เจฆเฉ€ เจ‰เจฎเฉ€เจฆ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆ. เจธเจฟเจธเจŸเจฎ เจตเจงเฉ‡เจฐเฉ‡ เจฆเจฟเจฒเจšเจธเจช เจขเฉฐเจ— เจจเจพเจฒ เจตเจฟเจตเจนเจพเจฐ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเฉ‡เจ•เจฐ เจฒเฉˆเจ— เจตเฉฑเจง เจนเฉ‹เจตเฉ‡: เจ•เจฐเจจเจฒ เจ•เฉเจ 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

เจ‡เจน เจฆเฉ‡เจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจ•เจฟ เจ•เฉเจ เจชเฉˆเจ•เฉ‡เจŸ เจตเจพเจฐ-เจตเจพเจฐ เจญเฉ‡เจœเฉ‡ เจ—เจ เจธเจจ เจ…เจคเฉ‡ เจŸเฉเฉฑเจŸเฉ‡ เจนเฉ‹เจ เจฎเฉˆเจŸเจพเจกเฉ‡เจŸเจพ เจตเจพเจฒเจพ เจ‡เฉฑเจ• เจชเฉˆเจ•เฉ‡เจŸ เจนเฉˆ: เจตเจฟเจ•เจฒเจช [เจจเจนเฉ€เจ‚,เจ…เจฃเจœเจพเจฃ-65 0x0a3dcf62eb3d,[bad opt]>. เจชเจฐ เจฎเฉเฉฑเจ– เจ—เฉฑเจฒ เจ‡เจน เจนเฉˆ เจ•เจฟ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจธเจญ เจ•เฉเจ เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เฉ€เจคเจพ - TCP เจจเฉ‡ เจ†เจชเจฃเฉ‡ เจ•เฉฐเจฎ เจฆเจพ เจฎเฉเจ•เจพเจฌเจฒเจพ เจ•เฉ€เจคเจพ.

เจชเฉˆเจ•เฉ‡เจŸ เจกเฉเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ

เจคเฉเจธเฉ€เจ‚ เจนเฉ‹เจฐ เจ•เฉ€ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ netem? เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจชเฉˆเจ•เฉ‡เจŸ เจฆเฉ‡ เจจเฉเจ•เจธเจพเจจ เจฆเฉ€ เจ‰เจฒเจŸ เจธเจฅเจฟเจคเฉ€ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเฉ‹โ€”เจชเฉˆเจ•เฉ‡เจŸ เจกเฉเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเฅค เจ‡เจน เจ•เจฎเจพเจ‚เจก 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% เจธเฉฐเจญเจพเจตเจจเจพ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค

เจฌเฉˆเจ‚เจกเจตเจฟเจกเจฅ เจฌเจฆเจฒ เจฐเจฟเจนเจพ เจนเฉˆ

เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‰เจน เจนเจฐ เจฅเจพเจ‚ เจฆเจพ เจนเจตเจพเจฒเจพ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจจ เจŸเฉ€.เจฌเฉ€.เจเฉฑเจซ, เจชเจฐ เจฎเจฆเจฆ เจจเจพเจฒ netem เจคเฉเจธเฉ€เจ‚ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฌเฉˆเจ‚เจกเจตเจฟเจกเจฅ เจจเฉ‚เฉฐ เจตเฉ€ เจฌเจฆเจฒ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

tc qdisc change dev lo root netem rate 56kbit

เจ‡เจน เจŸเฉ€เจฎ เจ†เจฒเฉ‡-เจฆเฉเจ†เจฒเฉ‡ เจธเฉˆเจฐ เจ•เจฐเฉ‡เจ—เฉ€ เจฒเฉ‹เจ•เจฒเจนเฉ‹เจธเจŸ เจ‡เฉฑเจ• เจกเจพเจ‡เจฒ-เจ…เฉฑเจช เจฎเจพเจกเจฎ เจฆเฉเจ†เจฐเจพ เจ‡เฉฐเจŸเจฐเจจเฉˆเฉฑเจŸ เจธเจฐเจซเจฟเฉฐเจ— เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจฆเจฐเจฆเจจเจพเจ•. เจฌเจฟเฉฑเจŸเจฐเฉ‡เจŸ เจธเฉˆเจŸ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจคเฉเจธเฉ€เจ‚ เจฒเจฟเฉฐเจ• เจฒเฉ‡เจ…เจฐ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจฎเจพเจกเจฒ เจฆเฉ€ เจตเฉ€ เจจเจ•เจฒ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹: เจชเฉˆเจ•เฉ‡เจŸ เจฒเจˆ เจ“เจตเจฐเจนเฉˆเฉฑเจก, เจธเฉˆเฉฑเจฒ เจฆเจพ เจ†เจ•เจพเจฐ, เจ…เจคเฉ‡ เจธเฉˆเฉฑเจฒ เจฒเจˆ เจ“เจตเจฐเจนเฉˆเฉฑเจก เจธเฉˆเฉฑเจŸ เจ•เจฐเฉ‹เฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เจธ เจจเฉ‚เฉฐ เจธเจฟเจฎเฉ‚เจฒเฉ‡เจŸ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ ATM เจ…เจคเฉ‡ เจฌเจฟเฉฑเจŸเจฐเฉ‡เจŸ 56 kbit/sec:

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

เจ•เจจเฉˆเจ•เจธเจผเจจ เจŸเจพเจˆเจฎเจ†เจ‰เจŸ เจฆเฉ€ เจธเจฟเจฎเฉ‚เจฒเฉ‡เจŸเจฟเฉฐเจ—

เจธเจพเฉฑเจซเจŸเจตเฉ‡เจ…เจฐ เจจเฉ‚เฉฐ เจธเจตเฉ€เจ•เจพเจฐ เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจŸเฉˆเจธเจŸ เจชเจฒเจพเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจจเฉเจ•เจคเจพ เจธเจฎเจพเจ‚ เจธเจฎเจพเจชเจค เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจ‡เจน เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจตเจฟเจคเจฐเจฟเจค เจชเฉเจฐเจฃเจพเจฒเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš, เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจธเฉ‡เจตเจพ เจ…เจฏเฉ‹เจ— เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจฌเจพเจ•เฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจธเจฎเฉ‡เจ‚ เจธเจฟเจฐ เจฆเฉ‚เจœเจฟเจ†เจ‚ เจ•เฉ‹เจฒ เจตเจพเจชเจธ เจ†เจ‰เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจœเจพเจ‚ เจ—เจพเจนเจ• เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ—เจฒเจคเฉ€ เจตเจพเจชเจธ เจ•เจฐเจจเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจœเจตเจพเจฌ เจœเจพเจ‚ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจฆเฉ€ เจ‰เจกเฉ€เจ• เจตเจฟเฉฑเจš เจฒเจŸเจ•เจฃเจพ เจจเจนเฉ€เจ‚ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจธเจฅเจพเจชเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจนเฉˆเฅค

เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฆเฉ‡ เจ•เจˆ เจคเจฐเฉ€เจ•เฉ‡ เจนเจจ: เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เฉฑเจ• เจฎเจ–เฉŒเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹ เจœเฉ‹ เจœเจตเจพเจฌ เจจเจนเฉ€เจ‚ เจฆเจฟเฉฐเจฆเจพ, เจœเจพเจ‚ เจกเฉ€เจฌเจ—เจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเจพเจฒ เจœเฉเฉœเฉ‹, เจธเจนเฉ€ เจฅเจพเจ‚ 'เจคเฉ‡ เจ‡เฉฑเจ• เจฌเฉเจฐเฉ‡เจ•เจชเฉเจ†เจ‡เฉฐเจŸ เจฒเจ—เจพเจ“ เจ…เจคเฉ‡ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจฐเฉ‹เจ•เฉ‹ (เจ‡เจน เจธเจผเจพเจ‡เจฆ เจธเจญ เจคเฉ‹เจ‚ เจตเจฟเจ—เฉœเจฟเจ† เจคเจฐเฉ€เจ•เจพ เจนเฉˆ)เฅค เจชเจฐ เจธเจญ เจคเฉ‹เจ‚ เจธเจชเฉฑเจธเจผเจŸ เจนเฉˆ เจซเจพเจ‡เจฐเจตเจพเจฒ เจชเฉ‹เจฐเจŸเจพเจ‚ เจœเจพเจ‚ เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ•. เจ‡เจน เจ‡เจธ เจตเจฟเฉฑเจš เจธเจพเจกเฉ€ เจฎเจฆเจฆ เจ•เจฐเฉ‡เจ—เจพ iptables.

เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจซเจพเจ‡เจฐเจตเจพเจฒ เจชเฉ‹เจฐเจŸ 12345 เจจเฉ‚เฉฐ เจšเจฒเจพเจตเจพเจ‚เจ—เฉ‡ เจ…เจคเฉ‡ เจธเจพเจกเฉ€ เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‚เฉฐ เจšเจฒเจพเจตเจพเจ‚เจ—เฉ‡เฅค เจคเฉเจธเฉ€เจ‚ เจญเฉ‡เจœเจฃ เจตเจพเจฒเฉ‡ 'เจคเฉ‡ เจ‡เจธ เจชเฉ‹เจฐเจŸ 'เจคเฉ‡ เจ†เจŠเจŸเจ—เฉ‹เจ‡เฉฐเจ— เจชเฉˆเจ•เฉ‡เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจซเจพเจ‡เจฐเจตเจพเจฒ เจœเจพเจ‚ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจตเจพเจฒเฉ‡ 'เจคเฉ‡ เจ†เจ‰เจฃ เจตเจพเจฒเฉ‡ เจชเฉˆเจ•เฉ‡เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจซเจพเจ‡เจฐเจตเจพเจฒ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจฎเฉ‡เจฐเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจตเจฟเฉฑเจš, เจ†เจ‰เจฃ เจตเจพเจฒเฉ‡ เจชเฉˆเจ•เฉ‡เจŸ เจซเจพเจ‡เจฐเจตเจพเจฒ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃเจ—เฉ‡ (เจ…เจธเฉ€เจ‚ เจšเฉ‡เจจ เจ‡เจจเจชเฉเจŸ เจ…เจคเฉ‡ เจตเจฟเจ•เจฒเจช เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ --dport). เจ…เจœเจฟเจนเฉ‡ เจชเฉˆเจ•เจŸเจพเจ‚ เจจเฉ‚เฉฐ TCP เจซเจฒเฉˆเจ— RST เจจเจพเจฒ DROP, REJECT เจœเจพเจ‚ REJECT เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเจพเจ‚ ICMP เจนเฉ‹เจธเจŸ เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจจเจนเฉ€เจ‚ เจนเฉˆ (เจ…เจธเจฒ เจตเจฟเฉฑเจš, เจกเจฟเจซเฉŒเจฒเจŸ เจตเจฟเจตเจนเจพเจฐ เจนเฉˆ icmp-เจชเฉ‹เจฐเจŸ-เจ…เจชเจนเฉเฉฐเจš, เจ…เจคเฉ‡ เจœเจตเจพเจฌ เจญเฉ‡เจœเจฃ เจฆเจพ เจฎเฉŒเจ•เจพ เจตเฉ€ เจนเฉˆ icmp-เจจเฉˆเฉฑเจŸ-เจ…เจชเจนเฉเฉฐเจš, icmp-เจชเฉเจฐเฉ‹เจŸเฉ‹-เจ…เจชเจนเฉเฉฐเจš, icmp-เจจเฉˆเฉฑเจŸ-เจตเจฐเจœเจฟเจค ะธ icmp-เจนเฉ‹เจธเจŸ-เจตเจฐเจœเจฟเจค).

เจกเฉเจฐเฉ‹เจช

เจœเฉ‡เจ•เจฐ 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 เจชเฉˆเจ•เฉ‡เจŸ เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจตเจงเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจญเฉ‡เจœเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ เจธเจพเจจเฉ‚เฉฐ เจ•เจฒเจพเจ‡เฉฐเจŸ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ›เฉ‹เจŸเจพ เจœเจฟเจนเจพ เจฌเฉฑเจ— เจฎเจฟเจฒเจฟเจ†: เจคเฉเจนเจพเจจเฉ‚เฉฐ เจตเจฟเจงเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจธเจฎเจพเจ‚ เจธเจฎเจพเจชเจค()เจ‰เจธ เจธเจฎเฉ‡เจ‚ เจจเฉ‚เฉฐ เจธเฉ€เจฎเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจœเจฟเจธ เจฆเฉŒเจฐเจพเจจ เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจฐเจตเจฐ เจจเจพเจฒ เจœเฉเฉœเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ‡เจ—เจพเฅค

เจ…เจธเฉ€เจ‚ เจคเฉเจฐเฉฐเจค เจจเจฟเจฏเจฎ เจจเฉ‚เฉฐ เจนเจŸเจพ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚:

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-เจฐเฉ€เจธเฉˆเฉฑเจŸ เจจเจพเจฒ เจ…เจธเจตเฉ€เจ•เจพเจฐ เจ•เจฐเฉ‹

เจ†เจ‰ เจตเจฟเจ•เจฒเจช เจœเฉ‹เฉœเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ€เจ --reject-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-เจนเฉ‹เจธเจŸ-เจ…เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจจเจพเจฒ เจ…เจธเจตเฉ€เจ•เจพเจฐ เจ•เจฐเฉ‹

เจ†เจ‰ 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

เจ…เจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจœเจพเจฃเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ --reject-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-เจนเฉ‹เจธเจŸ-เจ…เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจจเจพเจฒ เจ…เจธเจตเฉ€เจ•เจพเจฐ เจ•เจฐเฉ‹

เจฎเฉˆเจจเฉ‚เฉฐ เจฒเจ—เจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เจน เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจนเจฐ เจ•เจฟเจธเฉ‡ เจฒเจˆ เจธเจชเฉฑเจธเจผเจŸ เจนเฉˆ เจ•เจฟ เจ•เจฎเจพเจ‚เจก เจ•เจฟเจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ€ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เฉ€ :) เจ‡เจธ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš เจ—เจพเจนเจ• เจฆเจพ เจตเจฟเจตเจนเจพเจฐ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจ…เจธเจตเฉ€เจ•เจพเจฐ เจจเจพเจฒ เจฅเฉ‹เฉœเฉเจนเจพ เจตเฉฑเจ–เจฐเจพ เจนเฉ‹เจตเฉ‡เจ—เจพ: เจ•เจฒเจพเจ‡เฉฐเจŸ เจชเฉˆเจ•เฉ‡เจŸ เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจญเฉ‡เจœเจฃ เจฆเฉ€เจ†เจ‚ เจ•เฉ‹เจธเจผเจฟเจธเจผเจพเจ‚ เจฆเฉ‡ เจตเจฟเจšเจ•เจพเจฐ เจธเจฎเจพเจ‚ เจธเจฎเจพเจชเจค เจจเจนเฉ€เจ‚ เจ•เจฐเฉ‡เจ—เจพเฅค

[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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹