ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅, ΠΊΠ°Π·Π²Π°ΠΌ ΡΠ΅ Π‘Π°ΡΠ° ΠΈ ΡΡΠΊΠΎΠ²ΠΎΠ΄Ρ ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄Π° Π²ΡΠ² FunCorp. ΠΡΠΈ Π½Π°Ρ, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΏΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ, Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½Π° ΠΊΡΠΌ ΡΡΠ»ΡΠ³ΠΈ. ΠΡ Π΅Π΄Π½Π° ΡΡΡΠ°Π½Π°, ΡΠΎΠ²Π° ΡΠ»Π΅ΡΠ½ΡΠ²Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²ΡΠ΅ΠΊΠΈ ΡΠ΅ΡΠ²ΠΈΡ Π΅ ΠΏΠΎ-Π»Π΅ΡΠ΅Π½ Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ ΠΏΠΎΠΎΡΠ΄Π΅Π»Π½ΠΎ, Π½ΠΎ ΠΎΡ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, Π²ΡΠ·Π½ΠΈΠΊΠ²Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° Π΄Π° ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²ΠΈΡΠΈΡΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΠΏΡΠ΅Π· ΠΌΡΠ΅ΠΆΠ°ΡΠ°.
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ° Π·Π° Π΄Π²Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°, Ρ ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΠΎΠΏΠΈΡΠ²Π°ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΌΡΠ΅ΠΆΠ°ΡΠ°.

ΠΠΌΠΈΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΌΡΠ΅ΠΆΠ°ΡΠ°
ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠΎΡΡΡΠ΅ΡΡΡ ΡΠ΅ ΡΠ΅ΡΡΠ²Π° Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΈ ΡΡΡΠ²ΡΡΠΈ Ρ Π΄ΠΎΠ±ΡΠ° ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ Π²ΡΡΠ·ΠΊΠ°. Π ΡΡΡΠΎΠ²ΠΈΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΡΠ° Π²ΡΠΈΡΠΊΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π³Π»Π°Π΄ΠΊΠΎ, Π·Π°ΡΠΎΠ²Π° ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π² ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π° Π»ΠΎΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΎΡΡ. Π Linux Π·Π°Π΄Π°ΡΠ°ΡΠ° Π·Π° ΠΈΠΌΠΈΡΠ°ΡΠΈΡ Π½Π° ΡΠ°ΠΊΠΈΠ²Π° ΡΡΠ»ΠΎΠ²ΠΈΡ ΡΠ΅ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ tc.
tc (ΡΡΠΊΡΠ°ΡΠ΅Π½ΠΎ ΠΎΡ Traffic Control) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°. Π’ΠΎΠ·ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π·Π° ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ . Π’ΡΠΊ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌ ΡΠ°ΠΌΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΡ ΡΡΡ : ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π° Π½ΠΈ ΡΠ΅Π΄ΡΠ»ΠΈΠ½Π³ΡΡ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°, Π·Π° ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ qdisc, ΠΈ ΡΡΠΉ ΠΊΠ°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π΅ΠΌΡΠ»ΠΈΡΠ°ΠΌΠ΅ Π½Π΅ΡΡΠ°Π±ΠΈΠ»Π½Π° ΠΌΡΠ΅ΠΆΠ°, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ classless qdisc .
Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ echo-ΡΡΡΠ²ΡΡ Π½Π° ΡΡΡΠ²ΡΡΠ° (Π°Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ):
ncat -l 127.0.0.1 12345 -k -c 'xargs -n1 -i echo "Response: {}"'
ΠΠ° Π΄Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°ΠΌΠ΅ Π΄Π΅ΡΠ°ΠΉΠ»Π½ΠΎ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΏΠ΅ΡΠ°ΡΠΈ Π½Π° Π²ΡΡΠΊΠ° ΡΡΡΠΏΠΊΠ° ΠΎΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΡΡ ΡΡΡΠ²ΡΡΠ°, Π½Π°ΠΏΠΈΡΠ°Ρ ΠΏΡΠΎΡΡ ΡΠΊΡΠΈΠΏΡ Π½Π° Python, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° Π’Π΅ΡΡ ΠΊΡΠΌ Π½Π°ΡΠΈΡ echo-ΡΡΡΠ²ΡΡ.
ΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
#!/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
[Π²ΡΠ΅ΠΌΠ΅ ΠΏΡΠ΅Π΄ΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅: 1578652979.44837]
[Π²ΡΠ΅ΠΌΠ΅ ΡΠ»Π΅Π΄ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅, ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅: 1578652979.44889]
[Π²ΡΠ΅ΠΌΠ΅ ΡΠ»Π΅Π΄ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅, ΠΏΡΠ΅Π΄ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅: 1578652979.44894]
[Π²ΡΠ΅ΠΌΠ΅ ΡΠ»Π΅Π΄ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅, ΠΏΡΠ΅Π΄ΠΈ Π·Π°ΡΠ²Π°ΡΡΠ½Π΅: 1578652979.45922]
[Π²ΡΠ΅ΠΌΠ΅ ΡΠ»Π΅Π΄ Π·Π°ΡΠ²Π°ΡΡΠ½Π΅: 1578652979.45928]
[ΠΎΠ±ΡΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡ: 0.01091]
Response: Test
ΠΠ°ΠΌΠΏ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°
[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: ΠΏΠΎΠ΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π΅Π½ ΠΈΠ·Ρ
ΠΎΠ΄, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ -v ΠΈΠ»ΠΈ -vv Π·Π° ΠΏΡΠ»Π΅Π½ Π΄Π΅ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°
ΡΠ»ΡΡΠ° Π½Π° lo, link-type EN10MB (Ethernet), ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΠΊΠ°ΠΏΡΡΡΠ° 262144 Π±Π°ΠΉΡΠ°
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
[Π²ΡΠ΅ΠΌΠ΅ ΠΏΡΠ΅Π΄ΠΈ Π²ΡΡΠ·ΠΊΠ°ΡΠ°: 1578662612.71044]
[Π²ΡΠ΅ΠΌΠ΅ ΡΠ»Π΅Π΄ Π²ΡΡΠ·ΠΊΠ°ΡΠ°, ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅: 1578662613.71059]
[Π²ΡΠ΅ΠΌΠ΅ ΡΠ»Π΅Π΄ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅, ΠΏΡΠ΅Π΄ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅: 1578662613.71065]
[Π²ΡΠ΅ΠΌΠ΅ ΡΠ»Π΅Π΄ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅, ΠΏΡΠ΅Π΄ΠΈ ΠΏΡΠΈΠΊΠ»ΡΡΠ²Π°Π½Π΅: 1578662614.72011]
[Π²ΡΠ΅ΠΌΠ΅ ΡΠ»Π΅Π΄ ΠΏΡΠΈΠΊΠ»ΡΡΠ²Π°Π½Π΅: 1578662614.72019]
[ΠΎΠ±ΡΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡ: 2.00974]
ΠΡΠ³ΠΎΠ²ΠΎΡ: Π’Π΅ΡΡ
ΠΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ° Π² ΡΡΠ°ΡΠΈΠΊΠ°? ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅:
ΠΠ°ΠΌΠΏ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°
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% ΠΊΠΎΡΠ΅Π»Π°ΡΠΈΡ ΡΡΡ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π·Π°Π±Π°Π²ΡΠ½Π΅ΡΠΎ Π·Π° ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ.
ΠΠΎΠΆΠ΅ Π±ΠΈ ΡΡΠ΅ Π·Π°Π±Π΅Π»ΡΠ·Π°Π»ΠΈ, ΡΠ΅ Π² ΠΏΡΡΠ²Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ add, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° change. Π‘ΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ΅Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½Π°, Π·Π°ΡΠΎΠ²Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ ΡΠ°ΠΌΠΎ, ΡΠ΅ ΠΈΠΌΠ° ΠΈ del, Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°.
ΠΠ°Π³ΡΠ±Π° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ
ΠΠ΅ΠΊΠ° ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΡΠ΅Π³Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π·Π°Π³ΡΠ±Π° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΠ°ΠΊΡΠΎ ΡΠ΅ Π²ΠΈΠΆΠ΄Π° ΠΎΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ°, ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ ΠΏΠΎ ΡΠ΅Π»ΠΈ ΡΡΠΈ Π½Π°ΡΠΈΠ½Π°: Π΄Π° ΡΠ΅ Π³ΡΠ±ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡ, Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π³ΡΠ±Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ ΠΠ°ΡΠΊΠΎΠ²ΡΠΊΠ° Π²Π΅ΡΠΈΠ³Π° ΠΎΡ 2, 3 ΠΈΠ»ΠΈ 4 ΡΡΡΡΠΎΡΠ½ΠΈΡ ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠΎΠ΄Π΅Π»ΡΡ Π½Π° ΠΠ»ΠΈΠΎΡ-ΠΠΈΠ»Π±ΡΡΡ. Π ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌ ΠΏΡΡΠ²ΠΈΡ (Π½Π°ΠΉ-ΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ΅Π²ΠΈΠ΄Π΅Π½) Π½Π°ΡΠΈΠ½, Π° Π΄ΡΡΠ³ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ°Ρ .
ΠΠ΅ΠΊΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π·Π°Π³ΡΠ±Π° Π½Π° 50% ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Ρ ΠΊΠΎΡΠ΅Π»Π°ΡΠΈΡ 25%:
tc qdisc add dev lo root netem loss 50% 25%
ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅, tcpdump Π½ΡΠΌΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π·Π°Π³ΡΠ±Π°ΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Π²ΠΈΠ·ΡΠ°Π»Π½ΠΎ, ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅, ΡΠ΅ Π½Π°ΠΈΡΡΠΈΠ½Π° ΡΠ°Π±ΠΎΡΠΈ. ΠΠΎ ΡΠ΅ ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌ Π² ΡΠΎΠ²Π° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΎΡΠΎ ΠΈ Π½Π΅ΡΡΠ°Π±ΠΈΠ»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΡΠΊΡΠΈΠΏΡΠ° client.py (ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈ ΠΌΠΈΠ³Π½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ»ΠΈ Π·Π° 20 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ), Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΎΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ retransmitted ΠΏΠ°ΠΊΠ΅ΡΠΈ:
[user@host ~]# netstat -s | grep retransmited; sleep 10; netstat -s | grep retransmited
Β Β Β Β 17147 ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° retransmited
Β Β Β Β 17185 ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° retransmited
ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΡΠΌ Π² ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅
ΠΡΠ²Π΅Π½ Π·Π°Π³ΡΠ±Π°ΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠΌΠΈΡΠΈΡaΠΌΠ΅ ΠΈ ΡΡΡ Π½ΠΎΡΠΎ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π°Π½Π΅: Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΡΡΠΌ. Π©Π΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Ρ 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
ΡΠ»ΡΡΠ°Π½Π΅ Π½Π° 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
Π―ΡΠ½ΠΎ Π΅, ΡΠ΅ Π½ΡΠΊΠΎΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈ ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΏΠ°ΠΊΠ΅Ρ Ρ ΠΏΠΎΠ²ΡΠ΅Π΄Π΅Π½ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ: options [nop,unknown-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 ΠΌΠΈΠ»ΠΈΡΠ΅ΠΊΡΠ½Π΄ΠΈ.
ΠΡΠΎΡΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π΅, ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΠ΅ΠΊΠΈ N-ΡΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΠΌΠΈΠ³Π½ΠΎΠ²Π΅Π½ΠΎ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡ (ΠΈ ΠΊΠΎΡΠ΅Π»Π°ΡΠΈΡ), Π° ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ β Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π·Π°Π±Π°Π²ΡΠ½Π΅. ΠΡΠΈΠΌΠ΅Ρ ΠΎΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ°:
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
Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΎΠΏΠΈΡΠΈΡΠ΅ localhost ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΡΡΠΈΡΠ΅Π»Π½ΠΈ, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΡΡΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΏΡΠ΅Π· dial-up ΠΌΠΎΠ΄Π΅ΠΌ. Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ Π·Π°Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΊΠΎΡΠΎΡΡΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ Π΄Π° Π΅ΠΌΡΠ»ΠΈΡΠ°ΡΠ΅ ΠΌΠΎΠ΄Π΅Π» Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π½Π° ΠΊΠ°Π½Π°Π»Π°: Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ²Π΅ΡΡ Π΅Π΄ Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠ°, ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΠΊΠ»Π΅ΡΠΊΠ° ΠΈ ΠΎΠ²Π΅ΡΡ Π΅Π΄ Π·Π° ΠΊΠ»Π΅ΡΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠΈΠΌΡΠ»ΠΈΡΠ°ΡΠ΅ ΠΈ Π±ΠΈΡΡΠ΅ΠΉΡ 56 ΠΊΠ±ΠΈΡ/ΡΠ΅ΠΊ.:
tc qdisc change dev lo root netem rate 56kbit 0 48 5
Π‘ΠΈΠΌΡΠ»ΠΈΡΠ°ΠΌΠ΅ connection timeout
ΠΡΠ΅ Π΅Π΄ΠΈΠ½ Π²Π°ΠΆΠ΅Π½ Π°ΡΠΏΠ΅ΠΊΡ Π² ΡΠ΅ΡΡΠΎΠ²ΠΈΡ ΠΏΠ»Π°Π½ ΠΏΡΠΈ ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΡΡΡΠ΅Ρ β ΡΠ°ΠΉΠΌΠ°ΡΡΠΈΡΠ΅. Π’ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ, Π·Π°ΡΠΎΡΠΎ Π² ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΏΡΠΈ ΡΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π΅Π΄Π½Π° ΠΎΡ ΡΡΠ»ΡΠ³ΠΈΡΠ΅, ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π½Π°Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ°Ρ Π½Π° Π΄ΡΡΠ³ΠΈ ΠΈΠ»ΠΈ Π΄Π° Π²ΡΡΠ½Π°Ρ Π³ΡΠ΅ΡΠΊΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΊΠ°ΡΠΎ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π΅ ΡΡΡΠ±Π²Π° ΠΏΡΠΎΡΡΠΎ Π΄Π° ΡΠ΅ Π·Π°Π΄ΡΡΠΆΠ°Ρ Π² ΠΎΡΠ°ΠΊΠ²Π°Π½Π΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΡΠ·ΠΊΠ°.
ΠΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½Π°ΡΠΈΠ½Π° Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ²Π°: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠΎΠΊ, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ, ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ ΠΊΡΠΌ ΠΏΡΠΎΡΠ΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π΄Π΅Π±Π°Π³Π΅Ρ, Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ breakpoint Π² Π½ΡΠΆΠ½ΠΎΡΠΎ ΠΌΡΡΡΠΎ ΠΈ Π΄Π° ΡΠΏΡΠ΅ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° (ΡΠΎΠ²Π° Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π΅ Π½Π°ΠΉ-ΡΡΠ±ΠΈΡΠ°ΡΠ΅Π»Π½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄). ΠΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ Π½Π°ΠΉ-ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΈΡΠ΅ β ΡΠΎΠ²Π° Π΅ Π΄Π° Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ ΠΏΠΎΡΡΠΎΠ²Π΅ ΠΈΠ»ΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅. Π‘ ΡΠΎΠ²Π° ΡΠ΅ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ .
ΠΠ° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎΡΡ 12345 ΠΈ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈ ΡΠΊΡΠΈΠΏΡ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠΎΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°ΡΠ° ΠΈΠ»ΠΈ Π²Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°. Π ΠΌΠΎΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ°ΠΌΠ΅ Π²Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ chain INPUT ΠΈ ΠΎΠΏΡΠΈΡΡΠ° βdport). Π’Π°ΠΊΠΈΠ²Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ DROP, REJECT ΠΈΠ»ΠΈ REJECT Ρ TCP ΡΠ»Π°Π³ RST, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ICMP host unreachable (Π²ΡΡΡΠ½ΠΎΡΡ, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅ icmp-port-unreachable, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠΌΠ°ΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈΡΠ΅ Π² ΠΎΡΠ³ΠΎΠ²ΠΎΡ icmp-net-unreachable, icmp-proto-unreachable, icmp-net-prohibited ΠΈ icmp-host-prohibited).
ΠΠ·ΡΡΠΈΠ²Π°Π½Π΅
ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Ρ 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
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½ΠΎ Ρ REJECT:
iptables -A INPUT -p tcp --dport 12345 -j REJECT
ΠΠ»ΠΈΠ΅Π½Ρ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΠΊΡΠ½Π΄Ρ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ [Errno 111] Connection refused. Π‘ΠΌΠΎΡΡΠΈΠΌ ΡΡΠ°ΡΠΈΠΊ 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
ΠΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄Π²Π°ΠΆΠ΄Ρ ΠΏΠΎΠ»ΡΡΠΈΠ» port unreachable ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠΈΠ»ΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ.
REJECT with tcp-reset
ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΎΠΏΡΠΈΡ --reject-with 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
REJECT with icmp-host-unreachable
ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ REJECT:
iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp-host-unreachable
ΠΠ»ΠΈΠ΅Π½Ρ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΠΊΡΠ½Π΄Ρ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ [Errno 113] No route to host, Π² ICMP ΡΡΠ°ΡΠΈΠΊΠ΅ Π²ΠΈΠ΄ΠΈΠΌ ICMP host 127.0.0.1 unreachable.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ REJECT, Π° Ρ ΠΎΡΡΠ°Π½ΠΎΠ²Π»ΡΡΡ Π½Π° ΡΡΠΈΡ π
ΠΠΌΠΈΡΠΈΡΡΠ΅ΠΌ request timeout
ΠΡΡΠ³Π°ΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡ Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ Π΅ ΡΡΠΏΡΠ» Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ ΡΡΡ ΡΡΡΠ²ΡΡΠ°, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π·Π°ΡΠ²ΠΊΠ°. ΠΠ°ΠΊ Π΄Π° ΡΠΈΠ»ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠΈΠ»ΡΡΠ°ΡΠΈΡΡΠ° Π΄Π° Π½Π΅ Π·Π°ΠΏΠΎΡΠ½Π΅ Π²Π΅Π΄Π½Π°Π³Π°? ΠΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΡΡΠ°ΡΠΈΠΊΠ° Π½Π° Π²ΡΡΠΊΠ° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΡΡΠ²ΡΡΠ°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌ, ΡΠ΅ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°ΠΌΠΎ ΡΠ»Π°Π³ΠΎΠ²Π΅ΡΠ΅ 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: Π²Π΅ΡΠ±ΠΎΠΎΠ·Π½ΠΎ ΠΈΠ·Ρ
ΠΎΠ΄ΡΡ Π΅ ΠΏΠΎΡΠΈΡΠ½Π°Ρ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ -v ΠΈΠ»ΠΈ -vv Π·Π° ΠΏΡΠ»Π΅Π½ Π΄Π΅ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°
ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π° lo, ΡΠΈΠΏ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° EN10MB (Ethernet), ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° Π·Π°ΠΏΠΈΡΠ° 262144 Π±Π°ΠΉΡΠ°
10:02:47.549498 IP 127.0.0.1.49594 > 127.0.0.1.12345: Π€Π»Π°Π³ΠΎΠ²Π΅ [S], seq 2166014137, win 43690, ΠΎΠΏΡΠΈΠΈ [mss 65495,sackOK,TS val 1208713786 ecr 0,nop,wscale 7], Π΄ΡΠ»ΠΆΠΈΠ½Π° 0
10:02:47.549510 IP 127.0.0.1.12345 > 127.0.0.1.49594: Π€Π»Π°Π³ΠΎΠ²Π΅ [S.], seq 2341799088, ack 2166014138, win 43690, ΠΎΠΏΡΠΈΠΈ [mss 65495,sackOK,TS val 1208713786 ecr 1208713786,nop,wscale 7], Π΄ΡΠ»ΠΆΠΈΠ½Π° 0
10:02:47.549520 IP 127.0.0.1.49594 > 127.0.0.1.12345: Π€Π»Π°Π³ΠΎΠ²Π΅ [.], ack 1, win 342, ΠΎΠΏΡΠΈΠΈ [nop,nop,TS val 1208713786 ecr 1208713786], Π΄ΡΠ»ΠΆΠΈΠ½Π° 0
10:02:47.549568 IP 127.0.0.1.49594 > 127.0.0.1.12345: Π€Π»Π°Π³ΠΎΠ²Π΅ [P.], seq 1:6, ack 1, win 342, ΠΎΠΏΡΠΈΠΈ [nop,nop,TS val 1208713786 ecr 1208713786], Π΄ΡΠ»ΠΆΠΈΠ½Π° 5
10:02:47.750084 IP 127.0.0.1.49594 > 127.0.0.1.12345: Π€Π»Π°Π³ΠΎΠ²Π΅ [P.], seq 1:6, ack 1, win 342, ΠΎΠΏΡΠΈΠΈ [nop,nop,TS val 1208713987 ecr 1208713786], Π΄ΡΠ»ΠΆΠΈΠ½Π° 5
10:02:47.951088 IP 127.0.0.1.49594 > 127.0.0.1.12345: Π€Π»Π°Π³ΠΎΠ²Π΅ [P.], seq 1:6, ack 1, win 342, ΠΎΠΏΡΠΈΠΈ [nop,nop,TS val 1208714188 ecr 1208713786], Π΄ΡΠ»ΠΆΠΈΠ½Π° 5
10:02:48.354089 IP 127.0.0.1.49594 > 127.0.0.1.12345: Π€Π»Π°Π³ΠΎΠ²Π΅ [P.], seq 1:6, ack 1, win 342, ΠΎΠΏΡΠΈΠΈ [nop,nop,TS val 1208714591 ecr 1208713786], Π΄ΡΠ»ΠΆΠΈΠ½Π° 5
ΠΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π° ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π΄Π°Π½Π½ΠΈ Π½Π° ΡΡΡΠ²ΡΡΠ°.
REJECT
Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΡΠΎΡΠΎ: ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ Π½ΡΠΌΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π·Π°ΡΠ²ΠΊΠ°, Π½ΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ICMP 127.0.0.1 tcp ΠΏΠΎΡΡ 12345 Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΈ Π΄Π° ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π΅ΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»Π½ΠΎ. ΠΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:
iptables -A INPUT -p tcp --tcp-flags PSH PSH --dport 12345 -j REJECT
REJECT with tcp-reset
ΠΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
iptables -A INPUT -p tcp --tcp-flags PSH PSH --dport 12345 -j REJECT --reject-with tcp-reset
ΠΠ΅ΡΠ΅ Π·Π½Π°Π΅ΠΌ, ΡΠ΅ ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° --reject-with tcp-reset ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ Π² ΠΎΡΠ³ΠΎΠ²ΠΎΡ RST ΠΏΠ°ΠΊΠ΅Ρ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ: ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° RST ΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π° Π²ΡΡΠ·ΠΊΠ° ΠΎΠ·Π½Π°ΡΠ°Π²Π° Π½Π΅ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΎ Π·Π°ΡΠ²Π°ΡΡΠ½Π΅ Π½Π° ΡΠΎΠΊΠ΅ΡΠ° ΠΎΡ Π΄ΡΡΠ³Π°ΡΠ° ΡΡΡΠ°Π½Π°, Π·Π½Π°ΡΠΈ, ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ Connection reset by peer. Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠΈΡ ΡΠΊΡΠΈΠΏΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ ΡΠΎΠ²Π°. Π Π΅ΡΠΎ ΠΊΠ°ΠΊ ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΡΠ°ΡΠΈΠΊΡΡ:
ΠΠ°ΠΌΠΏ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°
[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: ΠΏΠΎΠ΄ΡΠΎΠ±Π΅Π½ ΠΈΠ·Ρ
ΠΎΠ΄ Π΅ ΠΏΠΎΡΠΈΡΠ½Π°Ρ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ -v ΠΈΠ»ΠΈ -vv Π·Π° ΠΏΡΠ»Π½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°
ΡΠ»ΡΡΠ°Π½Π΅ Π½Π° lo, ΡΠΈΠΏ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° EN10MB (Ethernet), ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΡΠ»ΠΎΠ² 262144 Π±Π°ΠΉΡΠ°
10:22:14.186269 IP 127.0.0.1.52536 > 127.0.0.1.12345: Π€Π»Π°Π³ΠΎΠ²Π΅ [S], seq 2615137531, win 43690, ΠΎΠΏΡΠΈΠΈ [mss 65495,sackOK,TS val 1209880423 ecr 0,nop,wscale 7], Π΄ΡΠ»ΠΆΠΈΠ½Π° 0
10:22:14.186284 IP 127.0.0.1.12345 > 127.0.0.1.52536: Π€Π»Π°Π³ΠΎΠ²Π΅ [S.], seq 3999904809, ack 2615137532, win 43690, ΠΎΠΏΡΠΈΠΈ [mss 65495,sackOK,TS val 1209880423 ecr 1209880423,nop,wscale 7], Π΄ΡΠ»ΠΆΠΈΠ½Π° 0
10:22:14.186293 IP 127.0.0.1.52536 > 127.0.0.1.12345: Π€Π»Π°Π³ΠΎΠ²Π΅ [.], ack 1, win 342, ΠΎΠΏΡΠΈΠΈ [nop,nop,TS val 1209880423 ecr 1209880423], Π΄ΡΠ»ΠΆΠΈΠ½Π° 0
10:22:14.186338 IP 127.0.0.1.52536 > 127.0.0.1.12345: Π€Π»Π°Π³ΠΎΠ²Π΅ [P.], seq 1:6, ack 1, win 342, ΠΎΠΏΡΠΈΠΈ [nop,nop,TS val 1209880423 ecr 1209880423], Π΄ΡΠ»ΠΆΠΈΠ½Π° 5
10:22:14.186344 IP 127.0.0.1.12345 > 127.0.0.1.52536: Π€Π»Π°Π³ΠΎΠ²Π΅ [R], seq 3999904810, win 0, Π΄ΡΠ»ΠΆΠΈΠ½Π° 0
REJECT with icmp-host-unreachable
ΠΠΈΡΠ»Ρ, Π²Π΅ΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π΅ ΡΡΠ½ΠΎ ΠΊΠ°ΠΊ ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° π ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π±Π΅ΡΠ΅ Ρ ΠΏΡΠΎΡΡ REJECT: ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ Π½ΡΠΌΠ° Π΄Π° ΡΠ²Π΅Π»ΠΈΡΠΈ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠΏΠΈΡΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°.
[user@host ~]# tcpdump -i lo -nn icmp
tcpdump: ΠΏΠΎΠ΄ΡΠΎΠ±Π΅Π½ ΠΈΠ·Ρ
ΠΎΠ΄ Π΅ ΠΏΠΎΡΠΈΡΠ½Π°Ρ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ -v ΠΈΠ»ΠΈ -vv Π·Π° ΠΏΡΠ»Π½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°
ΡΠ»ΡΡΠ°Π½Π΅ Π½Π° lo, ΡΠΈΠΏ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° EN10MB (Ethernet), ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΡΠ»ΠΎΠ² 262144 Π±Π°ΠΉΡΠ°
10:29:56.149202 IP 127.0.0.1 > 127.0.0.1: ICMP Ρ
ΠΎΡΡ 127.0.0.1 Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½, Π΄ΡΠ»ΠΆΠΈΠ½Π° 65
10:29:56.349107 IP 127.0.0.1 > 127.0.0.1: ICMP Ρ
ΠΎΡΡ 127.0.0.1 Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½, Π΄ΡΠ»ΠΆΠΈΠ½Π° 65
10:29:56.549117 IP 127.0.0.1 > 127.0.0.1: ICMP Ρ
ΠΎΡΡ 127.0.0.1 Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½, Π΄ΡΠ»ΠΆΠΈΠ½Π° 65
10:29:56.750125 IP 127.0.0.1 > 127.0.0.1: ICMP Ρ
ΠΎΡΡ 127.0.0.1 Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½, Π΄ΡΠ»ΠΆΠΈΠ½Π° 65
10:29:56.951130 IP 127.0.0.1 > 127.0.0.1: ICMP Ρ
ΠΎΡΡ 127.0.0.1 Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½, Π΄ΡΠ»ΠΆΠΈΠ½Π° 65
10:29:57.152107 IP 127.0.0.1 > 127.0.0.1: ICMP Ρ
ΠΎΡΡ 127.0.0.1 Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½, Π΄ΡΠ»ΠΆΠΈΠ½Π° 65
10:29:57.353115 IP 127.0.0.1 > 127.0.0.1: ICMP Ρ
ΠΎΡΡ 127.0.0.1 Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½, Π΄ΡΠ»ΠΆΠΈΠ½Π° 65
ΠΠ·Π²ΠΎΠ΄
ΠΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΠΈΡΠ΅ΡΠ΅ ΠΌΠΎΠΊΠ° Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° Ρ Π·Π°Π²ΠΈΡΠ½Π°Π» ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈΠ»ΠΈ ΡΡΡΠ²ΡΡ, ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ ΡΡΠΈΠ»ΠΈΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ Π² Linux.
Π£ΡΠΈΠ»ΠΈΡΠΈΡΠ΅, ΡΠ°Π·Π³Π»Π΅Π΄Π°Π½ΠΈ Π² ΡΡΠ°ΡΠΈΡΡΠ°, ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Ρ Ρ Π΄ΠΎΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π±Π΅ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΌΠΈΡΠ»ΠΈΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠΈ Π·Π° ΡΡΡ
Π½ΠΎΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅. ΠΠΈΡΠ½ΠΎ Π½Π° ΠΌΠ΅Π½ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΈ ΡΡΠΈΠ³Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ
(Π²ΡΡΡΠ½ΠΎΡΡ Π΄ΠΎΡΠΈ ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ). ΠΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ΅Π·ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΡΠΈΠ»ΠΈΡΠΈ Π² ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ Π²ΡΠ² Π²Π°ΡΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ, ΠΌΠΎΠ»Ρ, Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊ ΡΠΎΡΠ½ΠΎ. ΠΠΊΠΎ Π½Π΅, Π½Π°Π΄ΡΠ²Π°ΠΌ ΡΠ΅ Π²Π°ΡΠΈΡΡ ΡΠΎΡΡΡΠ΅Ρ Π΄Π° ΡΡΠ°Π½Π΅ ΠΏΠΎ-ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½, Π°ΠΊΠΎ ΡΠ΅ΡΠΈΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΡΡΠ΅Π· ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
