αž€αžΆαžšαž€αŸ’αž›αŸ‚αž„αž’αŸ’αžœαžΎαž”αž‰αŸ’αž αžΆαž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž›αžΈαž“αž»αž…

αžŸαž½αžŸαŸ’αžαžΈαž’αŸ’αž“αž€αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αŸ’αž“αžΆ αžαŸ’αž‰αž»αŸ†αžˆαŸ’αž˜αŸ„αŸ‡αžŸαžΆαžŸαžΆ αžαŸ’αž‰αž»αŸ†αžŠαžΉαž€αž“αžΆαŸ†αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™αž“αŸ… FunCorpαŸ” αž™αžΎαž„αž€αŸαžŠαžΌαž…αž’αŸ’αž“αž€αžŠαž‘αŸƒαž‘αŸ€αžαžŠαŸ‚αžš αžŠαŸ‚αž›αž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αžŠαŸ‚αž›αž•αŸ’αžαŸ„αžαž›αžΎαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αŸ” αž˜αŸ‰αŸ’αž™αžΆαž„αžœαž·αž‰αž‘αŸ€αž αž“αŸαŸ‡αž‡αž½αž™αžŸαž˜αŸ’αžšαž½αž›αž€αžΆαžšαž„αžΆαžš αž–αŸ’αžšαŸ„αŸ‡... αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž“αžΈαž˜αž½αž™αŸ—αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž‚αŸ’αž“αžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αŸ’αž™αŸ‰αžΆαž„αžœαž·αž‰αž‘αŸ€αž αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αž“αŸƒαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€ αžŠαŸ‚αž›αž‡αžΆαžšαžΏαž™αŸ—αž€αžΎαžαž‘αžΎαž„αž›αžΎαž”αžŽαŸ’αžαžΆαž‰αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž…αŸ†αž“αž½αž“αž–αžΈαžšαžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžŸαŸαžŽαžΆαžšαžΈαž™αŸ‰αžΌαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŠαŸ‚αž›αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αžœαžαŸ’αžαž˜αžΆαž“αž“αŸƒαž”αž‰αŸ’αž αžΆαž”αžŽαŸ’αžαžΆαž‰αŸ”

αž€αžΆαžšαž€αŸ’αž›αŸ‚αž„αž’αŸ’αžœαžΎαž”αž‰αŸ’αž αžΆαž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž›αžΈαž“αž»αž…

αž€αžΆαžšαž€αŸ’αž›αŸ‚αž„αž’αŸ’αžœαžΎαž”αž‰αŸ’αž αžΆαž”αžŽαŸ’αžαžΆαž‰

αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŸαžΆαž€αž›αŸ’αž”αž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαžŠαŸαž›αŸ’αž’αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαž•αž›αž·αžαž€αž˜αŸ’αž˜αžŠαŸαž’αžΆαž€αŸ’αžšαž€αŸ‹ αž’αŸ’αžœαžΈαŸ—αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αžšαž›αžΌαž“αž‘αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž–αŸαž›αžαŸ’αž›αŸ‡αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžŸαžΆαž€αž›αŸ’αž”αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸƒαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž·αž“αž›αŸ’αž’αŸ” αž“αŸ…αž›αžΎαž›αžΈαž“αž»αž… αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αžΉαž„αž‡αž½αž™αž€αŸ’αž“αž»αž„αž€αž·αž…αŸ’αž…αž€αžΆαžšαž“αŸƒαž€αžΆαžšαž€αŸ’αž›αŸ‚αž„αž’αŸ’αžœαžΎαž›αž€αŸ’αžαžαžŽαŸ’αžŒαž”αŸ‚αž”αž“αŸαŸ‡ tc.

tc(abbr αŸ” αž–αžΈαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž…αžšαžΆαž…αžšαžŽαŸ) αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž€αž‰αŸ’αž…αž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ” αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸαŸ‡αž˜αžΆαž“αžŸαž˜αžαŸ’αžαž—αžΆαž–αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™ αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαž–αž½αž€αž‚αŸαŸ” αž“αŸ…αž‘αžΈαž“αŸαŸ‡. αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž–αž·αž…αžΆαžšαžŽαžΆαžαŸ‚αž˜αž½αž™αž…αŸ†αž“αž½αž“αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž“αŸƒαž–αž½αž€αž‚αŸ: αž™αžΎαž„αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αžΎαž€αžΆαž›αžœαž·αž—αžΆαž‚αž…αžšαžΆαž…αžšαžŽαŸαžŠαŸ‚αž›αž™αžΎαž„αž”αŸ’αžšαžΎ qdiscαž αžΎαž™αžŠαŸ„αž™αžŸαžΆαžšαž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αž”αžŽαŸ’αžαžΆαž‰αž˜αž·αž“αžŸαŸ’αžαž·αžαžŸαŸ’αžαŸαžš αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎ qdisc αž‚αŸ’αž˜αžΆαž“αžαŸ’αž“αžΆαž€αŸ‹ αžŸαŸ†αžŽαžΆαž‰αŸ‹.

αžŸαžΌαž˜αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αŸαž€αžΌαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ (αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αŸ’αžšαžΎ nmap-ncat):

ncat -l 127.0.0.1 12345 -k -c 'xargs -n1 -i echo "Response: {}"'

αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž›αž˜αŸ’αž’αž·αžαž’αŸ†αž–αžΈαž–αŸαž›αžœαŸαž›αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž‡αŸ†αž αžΆαž“αž“αžΈαž˜αž½αž™αŸ—αž“αŸƒαž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αžšαžœαžΆαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαžšαžŸαŸαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž” Python αžŸαžΆαž˜αž‰αŸ’αž‰αžŠαŸ‚αž›αž•αŸ’αž‰αžΎαžŸαŸ†αžŽαžΎ αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αŸαž€αžΌαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž’αžαž·αžαž·αž‡αž“

#!/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αžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž›αž»αž”αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αŸ”

αž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž…αžΌαžšαž™αžΎαž„αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αŸ’αžœαžΎαž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αŸ” αžŠαžΌαž…αžŠαŸ‚αž›αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αž–αžΈαž―αž€αžŸαžΆαžš αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαžαžΆαž˜αž”αžΈαžœαž·αž’αžΈαŸ– αž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ’αžšαžΌαž”αžΆαž”αŸŠαžΈαž›αžΈαžαŸαž˜αž½αž™αž…αŸ†αž“αž½αž“ αžŠαŸ„αž™αž”αŸ’αžšαžΎαžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ Markov αž“αŸƒαžšαžŠαŸ’αž‹ 2, 3 ឬ 4 αžŠαžΎαž˜αŸ’αž”αžΈαž‚αžŽαž“αžΆαž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ αž¬αž”αŸ’αžšαžΎαž‚αŸ†αžšαžΌ Elliott-Gilbert αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž–αž·αž…αžΆαžšαžŽαžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ†αž”αžΌαž„ (αžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαž“αž·αž„αž…αŸ’αž”αžΆαžŸαŸ‹αž”αŸ†αž•αž»αž) αž αžΎαž™αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž’αŸ†αž–αžΈαž’αŸ’αž“αž€αžŠαž‘αŸƒ αž“αŸ…αž‘αžΈαž“αŸαŸ‡.

αž…αžΌαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αž”αžΆαžαŸ‹αž”αž„αŸ‹ 50% αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ‚αž›αž˜αžΆαž“αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„ 25%αŸ–

tc qdisc add dev lo root netem loss 50% 25%

αž‡αžΆαž’αž€αž»αžŸαž›, tcpdump αž“αžΉαž„β€‹αž˜αž·αž“β€‹αž’αžΆαž…β€‹αž”αž„αŸ’αž αžΆαž‰β€‹αž±αŸ’αž™β€‹αž™αžΎαž„β€‹αžƒαžΎαž‰β€‹αž…αŸ’αž”αžΆαžŸαŸ‹β€‹αž–αžΈβ€‹αž€αžΆαžšβ€‹αž”αžΆαžαŸ‹β€‹αž”αž„αŸ‹β€‹αž€αž‰αŸ’αž…αž”αŸ‹β€‹αž–αŸαžαŸŒαž˜αžΆαž“β€‹αž‘αŸ αž™αžΎαž„β€‹αž‚αŸ’αžšαžΆαž“αŸ‹β€‹αžαŸ‚β€‹αžŸαž“αŸ’αž˜αžβ€‹αžαžΆβ€‹αžœαžΆβ€‹αž–αž·αžβ€‹αž‡αžΆβ€‹αžŠαŸ†αžŽαžΎαžšβ€‹αž€αžΆαžšαŸ” αž αžΎαž™αž–αŸαž›αžœαŸαž›αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ‚αž›αž€αžΎαž“αž‘αžΎαž„ αž“αž·αž„αž˜αž·αž“αžŸαŸ’αžαž·αžαžŸαŸ’αžαŸαžšαž“αžΉαž„αž‡αž½αž™αž™αžΎαž„αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αžšαžΏαž„αž“αŸαŸ‡αŸ” client.py (αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž—αŸ’αž›αžΆαž˜αŸ— αž¬αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž› 20 αžœαž·αž“αžΆαž‘αžΈ) αž€αŸαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž€αžΎαž“αž‘αžΎαž„αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αž”αž‰αŸ’αž‡αžΌαž“αž”αž“αŸ’αžαŸ–

[user@host ~]# netstat -s | grep retransmited; sleep 10; netstat -s | grep retransmited
    17147 segments retransmited
    17185 segments retransmited

αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αžŸαŸ†αž›αŸαž„αžšαŸ†αžαžΆαž“αžŠαž›αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹

αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ’αž›αŸ‚αž„αž’αŸ’αžœαžΎαž€αžΆαžšαžαžΌαž…αžαžΆαžαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αŸ– αžŸαŸ†αž‘αŸαž„αžšαŸ†αžαžΆαž“αž“αžΉαž„αž›αŸαž…αž‘αžΎαž„αž“αŸ…αž‘αžΈαžαžΆαŸ†αž„αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž…αŸƒαžŠαž“αŸ’αž™αŸ” αž…αžΌαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αžαžΌαž…αžαžΆαžαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ’αžšαžΌαž”αžΆαž”αŸŠαžΈαž›αžΈαžαŸ 50% αž“αž·αž„αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αŸ–

tc qdisc change dev lo root netem corrupt 50%

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αž’αžαž·αžαž·αž‡αž“ (αž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αž‘αŸαž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž…αŸ†αžŽαžΆαž™αž–αŸαž› 2 αžœαž·αž“αžΆαž‘αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž…αž”αŸ‹) αž˜αžΎαž›αž…αžšαžΆαž…αžšαžŽαŸαŸ–

αž€αž“αŸ’αž›αŸ‚αž„αž…αŸ„αž›αžŸαŸ†αžšαžΆαž˜

[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
10:20:54.812434 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [S], seq 2023663770, win 43690, options [mss 65495,sackOK,TS val 1037001049 ecr 0,nop,wscale 7], length 0
10:20:54.812449 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [S.], seq 2104268044, ack 2023663771, win 43690, options [mss 65495,sackOK,TS val 1037001049 ecr 1037001049,nop,wscale 7], length 0
10:20:54.812458 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 1037001049 ecr 1037001049], length 0
10:20:54.812509 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1037001049 ecr 1037001049], length 5
10:20:55.013093 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1037001250 ecr 1037001049], length 5
10:20:55.013122 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [.], ack 6, win 342, options [nop,nop,TS val 1037001250 ecr 1037001250], length 0
10:20:55.014681 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [P.], seq 1:15, ack 6, win 342, options [nop,nop,TS val 1037001251 ecr 1037001250], length 14
10:20:55.014745 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [.], ack 15, win 340, options [nop,nop,TS val 1037001251 ecr 1037001251], length 0
10:20:55.014823 IP 127.0.0.1.43666 > 127.0.0.5.12345: Flags [F.], seq 2023663776, ack 2104268059, win 342, options [nop,nop,TS val 1037001251 ecr 1037001251], length 0
10:20:55.214088 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [P.], seq 1:15, ack 6, win 342, options [nop,unknown-65 0x0a3dcf62eb3d,[bad opt]>
10:20:55.416087 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [F.], seq 6, ack 15, win 342, options [nop,nop,TS val 1037001653 ecr 1037001251], length 0
10:20:55.416804 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [F.], seq 15, ack 7, win 342, options [nop,nop,TS val 1037001653 ecr 1037001653], length 0
10:20:55.416818 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [.], ack 16, win 343, options [nop,nop,TS val 1037001653 ecr 1037001653], length 0
10:20:56.147086 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [F.], seq 15, ack 7, win 342, options [nop,nop,TS val 1037002384 ecr 1037001653], length 0
10:20:56.147101 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [.], ack 16, win 342, options [nop,nop,TS val 1037002384 ecr 1037001653], length 0

αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž˜αžΎαž›αžƒαžΎαž‰αžαžΆαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž˜αž½αž™αž…αŸ†αž“αž½αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαž˜αŸ’αžαž„αž αžΎαž™αž˜αŸ’αžαž„αž‘αŸ€αž αž αžΎαž™αž˜αžΆαž“αž€αž‰αŸ’αž…αž”αŸ‹αž˜αž½αž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αŸαžαžΆαžŠαŸ‚αž›αžαžΌαž…αŸ– αž‡αž˜αŸ’αžšαžΎαžŸ [nop,unknown-65 0x0a3dcf62eb3d, [αž‡αž˜αŸ’αžšαžΎαžŸαž˜αž·αž“αž›αŸ’αž’]>. αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžšαžΏαž„αžŸαŸ†αžαžΆαž“αŸ‹αž‚αžΊαžαžΆαž“αŸ…αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ - TCP αž”αžΆαž“αžŸαŸŠαžΌαž‘αŸ’αžšαžΆαŸ†αž“αžΉαž„αž—αžΆαžšαž€αž·αž…αŸ’αž…αžšαž”αžŸαŸ‹αžœαžΆαŸ”

αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“

αžαžΎαž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž‘αŸ€αžαž‡αžΆαž˜αž½αž™ αžŸαŸ†αžŽαžΆαž‰αŸ‹? αž§αž‘αžΆαž αžšαžŽαŸ αž€αŸ’αž›αŸ‚αž„αž’αŸ’αžœαžΎαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αž‰αŸ’αž…αŸ’αžšαžΆαžŸαž“αŸƒαž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ - αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αŸ” αž–αžΆαž€αŸ’αž™β€‹αž”αž‰αŸ’αž‡αžΆβ€‹αž“αŸαŸ‡β€‹αž€αŸβ€‹αž™αž€β€‹αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹ 2 αž™αŸ‰αžΆαž„β€‹αžŠαŸ‚αžšαŸ– αž”αŸ’αžšαžΌαž”αžΆαž”αŸŠαžΈαž›αžΈαžαŸ αž“αž·αž„β€‹αž€αžΆαžšβ€‹αž‡αžΆαž”αŸ‹β€‹αž‘αžΆαž€αŸ‹αž‘αž„αŸ”

tc qdisc change dev lo root netem duplicate 50% 25%

αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹

αž’αŸ’αž“αž€αž’αžΆαž…αž›αžΆαž™αžαž„αŸ‹αžαžΆαž˜αž–αžΈαžšαžœαž·αž’αžΈαŸ”

αž‡αžΆαž›αžΎαž€αžŠαŸ†αž”αžΌαž„ αž€αž‰αŸ’αž…αž”αŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαž—αŸ’αž›αžΆαž˜αŸ— αž“αŸ…αžŸαž›αŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž–αžΈαž―αž€αžŸαžΆαžšαŸ–

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

αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ’αžšαžΌαž”αžΆαž”αŸŠαžΈαž›αžΈαžαŸαž“αŸƒ 25% (αž“αž·αž„αž€αžΆαžšαž‡αžΆαž”αŸ‹αž‘αžΆαž€αŸ‹αž‘αž„αž‚αŸ’αž“αžΆαž“αŸƒ 50%) αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαž—αŸ’αž›αžΆαž˜αŸ— αž“αŸ…αžŸαž›αŸ‹αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž–αž“αŸ’αž™αžΆαžšαž–αŸαž› 10 αž˜αž·αž›αŸ’αž›αžΈαžœαž·αž“αžΆαž‘αžΈαŸ”

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž‘αžΈαž–αžΈαžšαž‚αžΊαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžšαžΆαž›αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ Nth αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαž—αŸ’αž›αžΆαž˜αŸ—αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ’αžšαžΌαž”αžΆαž”αŸŠαžΈαž›αžΈαžαŸαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™ (αž“αž·αž„αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„) αž αžΎαž™αž“αŸ…αžŸαž›αŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž–αžΈαž―αž€αžŸαžΆαžšαŸ–

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

αžšαžΆαž›αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž‘αžΈαž”αŸ’αžšαžΆαŸ†αž˜αžΆαž“αž±αž€αžΆαžŸ 25% αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αž‰αžΎαžŠαŸ„αž™αž˜αž·αž“αž–αž“αŸ’αž™αžΆαž–αŸαž›αŸ”

αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αž˜αŸ’αžšαž·αžαž”αž‰αŸ’αž‡αžΌαž“

αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž“αŸ…αž‚αŸ’αžšαž”αŸ‹αž‘αžΈαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαžŸαŸ†αžŠαŸ…αž‘αŸ… TBFαž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‡αŸ†αž“αž½αž™ αžŸαŸ†αžŽαžΆαž‰αŸ‹ αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αž˜αŸ’αžšαž·αžαž”αž‰αŸ’αž‡αžΌαž“αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αŸ–

tc qdisc change dev lo root netem rate 56kbit

αž€αŸ’αžšαž»αž˜αž“αŸαŸ‡αž“αžΉαž„αž’αŸ’αžœαžΎαžŠαŸ†αžŽαžΎαžšαž‡αž»αŸ†αžœαž·αž‰ localhost αžˆαžΊαž…αžΆαž”αŸ‹αžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž”αžΎαž€αž’αŸŠαžΈαž“αž’αžΊαžŽαŸαžαžαžΆαž˜αžšαž™αŸˆαž˜αŸ‰αžΌαžŒαžΉαž˜αž αŸ…αž‘αžΌαžšαžŸαž–αŸ’αž‘αŸ” αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžšαžΆαž”αŸŠαžΈαž αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αž‚αŸ†αžšαžΌαž–αž·αž’αžΈαž€αžΆαžšαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαŸ†αžŽαž•αž„αžŠαŸ‚αžšαŸ– αž€αŸ†αžŽαžαŸ‹αžαž˜αŸ’αž›αŸƒαž›αžΎαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ αž‘αŸ†αž αŸ†αž€αŸ’αžšαž‘αžΆ αž“αž·αž„αžαž˜αŸ’αž›αŸƒαž›αžΎαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ’αžšαž‘αžΆαŸ” αž§αž‘αžΆαž αžšαžŽαŸαž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ’αž›αŸ‚αž„αž’αŸ’αžœαžΎ αž’αŸαž’αžΈαž’αžΉαž˜ αž“αž·αž„αž’αžαŸ’αžšαžΆαž”αŸŠαžΈαž 56 kbit / αžœαž·αž“αžΆαž‘αžΈ:

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

αž€αŸ’αž›αŸ‚αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž’αžŸαŸ‹αž–αŸαž›αž“αŸƒαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹

αž…αŸ†αžŽαž»αž…αžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™αž‘αŸ€αžαž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ‚αž“αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αž“αŸ…αž–αŸαž›αž‘αž‘αž½αž›αž™αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αžΊαž’αžŸαŸ‹αž–αŸαž›αŸ” αž“αŸαŸ‡αž‚αžΊαžŸαŸ†αžαžΆαž“αŸ‹αžŽαžΆαžŸαŸ‹ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž…αŸ‚αž€αž…αžΆαž™ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž·αž‘ αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžαŸ’αžšαžΌαžœαžαŸ‚αžαŸ’αžšαž›αž”αŸ‹αž˜αž€αž’αŸ’αž“αž€αž•αŸ’αžŸαŸαž„αž‘αžΆαž“αŸ‹αž–αŸαž› αž¬αžαŸ’αžšαž‘αž”αŸ‹αž€αŸ†αž αž»αžŸαž‘αŸ…αž€αžΆαž“αŸ‹αž’αžαž·αžαž·αž‡αž“ αž αžΎαž™αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŽαžΆαž€αŸαžŠαŸ„αž™ αž–αž½αž€αžœαžΆαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž–αŸ’αž™αž½αžš αžšαž„αŸ‹αž…αžΆαŸ†αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž” αž¬αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αŸ” αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αŸ”

αž˜αžΆαž“αžœαž·αž’αžΈαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžœαžΆαŸ– αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžΎαž€αžΆαžšαž€αŸ’αž›αŸ‚αž„αž”αž“αŸ’αž›αŸ†αžŠαŸ‚αž›αž˜αž·αž“αž†αŸ’αž›αžΎαž™αžαž” αž¬αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸ αžŠαžΆαž€αŸ‹αž…αŸ†αžŽαž»αž…αžˆαž”αŸ‹αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž αžΎαž™αž”αž‰αŸ’αžˆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš (αž“αŸαŸ‡αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžœαž·αž’αžΈαžŠαŸ‚αž›αž”αŸ†αž”αŸ’αž›αŸ‚αž„αž”αŸ†αž•αž»αž)αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž…αŸ’αž”αžΆαžŸαŸ‹αž”αŸ†αž•αž»αžαž‚αžΊ αž…αŸ’αžšαž€αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„ αž¬αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ” αžœαžΆαž“αžΉαž„αž‡αž½αž™αž™αžΎαž„αž€αŸ’αž“αž»αž„αžšαžΏαž„αž“αŸαŸ‡ iptables.

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰ αž™αžΎαž„αž“αžΉαž„ firewall port 12345 αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš client script αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„β€‹αž€αž‰αŸ’αž…αž”αŸ‹β€‹αž…αŸαž‰β€‹αž‘αŸ…β€‹αž…αŸ’αžšαž€β€‹αž“αŸαŸ‡β€‹αž“αŸ…β€‹αž’αŸ’αž“αž€β€‹αž•αŸ’αž‰αžΎ αž¬β€‹αž€αž‰αŸ’αž…αž”αŸ‹β€‹αž…αžΌαž›β€‹αž“αŸ…β€‹αž’αŸ’αž“αž€β€‹αž‘αž‘αž½αž›αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž…αžΌαž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„ (αž™αžΎαž„αž”αŸ’αžšαžΎαžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ INPUT αž“αž·αž„αž‡αž˜αŸ’αžšαžΎαžŸ --dport) αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αŸ‚αž”αž“αŸαŸ‡αž’αžΆαž…αž‡αžΆ DROP αž”αžŠαž·αžŸαŸαž’ αž¬αž”αžŠαž·αžŸαŸαž’αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αž„αŸ‹ TCP RST αž¬αž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ ICMP αžŠαŸ‚αž›αž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžŠαž›αŸ‹αž”αžΆαž“ (αžαžΆαž˜αž–αž·αž αž₯αžšαž·αž™αžΆαž”αžαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž‚αžΊ icmp-port-αž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžŠαž›αŸ‹αž”αžΆαž“αŸ”αž αžΎαž™αžœαžΆαž€αŸαž˜αžΆαž“αž±αž€αžΆαžŸαž•αŸ’αž‰αžΎαž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž•αž„αžŠαŸ‚αžšαŸ” icmp-net-αž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžŠαž›αŸ‹αž”αžΆαž“αŸ”, icmp-proto-αž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžŠαž›αŸ‹αž”αžΆαž“αŸ”, icmp-net-αž αžΆαž˜αžƒαžΆαžαŸ‹ ΠΈ icmp-host-αž αžΆαž˜αžƒαžΆαžαŸ‹).

αž”αž‰αŸ’αžˆαž”αŸ‹

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“αž…αŸ’αž”αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™ DROP αž“αŸ„αŸ‡αž€αž‰αŸ’αž…αž”αŸ‹αž“αžΉαž„ "αž”αžΆαžαŸ‹" αŸ”

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

αž™αžΎαž„αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αž αžΎαž™αžƒαžΎαž‰αžαžΆαžœαžΆαž”αž„αŸ’αž€αž€αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸƒαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αžαŸ„αŸ‡αž˜αžΎαž›αž…αžšαžΆαž…αžšαžŽαŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αŸ’αž“αžΆαŸ–
αž€αž“αŸ’αž›αŸ‚αž„αž…αŸ„αž›αžŸαŸ†αžšαžΆαž˜

[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
08:28:20.213506 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203046450 ecr 0,nop,wscale 7], length 0
08:28:21.215086 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203047452 ecr 0,nop,wscale 7], length 0
08:28:23.219092 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203049456 ecr 0,nop,wscale 7], length 0
08:28:27.227087 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203053464 ecr 0,nop,wscale 7], length 0
08:28:35.235102 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203061472 ecr 0,nop,wscale 7], length 0

αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž˜αžΎαž›αžƒαžΎαž‰αžαžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž•αŸ’αž‰αžΎαž€αž‰αŸ’αž…αž”αŸ‹ SYN αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž–αŸαž›αžœαŸαž›αžΆαž€αžΎαž“αž‘αžΎαž„αž’αž·αž…αžŸαŸ’αž”αŸ‰αžΌαžŽαž„αŸ‹αžŸαŸ’αž™αŸ‚αž›αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž€αŸ†αž αž»αžŸαžαžΌαž…αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαŸ– αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš αž’αžŸαŸ‹αž–αŸαž›()αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž–αŸαž›αžœαŸαž›αžΆαžŠαŸ‚αž›αž’αžαž·αžαž·αž‡αž“αž“αžΉαž„αž–αŸ’αž™αžΆαž™αžΆαž˜αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ”

αž™αžΎαž„αžŠαž€αž…αŸ’αž”αžΆαž”αŸ‹αž…αŸαž‰αž—αŸ’αž›αžΆαž˜αŸ—αŸ–

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

αž’αŸ’αž“αž€αž’αžΆαž…αž›αž»αž”αž…αŸ’αž”αžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αŸ–

iptables -F

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎ Docker αž αžΎαž™αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„αž…αžšαžΆαž…αžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž…αžΌαž›αž‘αŸ…αž€αž»αž„αžαžΊαž“αŸαžšαž“αŸ„αŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαžœαžΆαž”αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

iptables -I DOCKER-USER -p tcp -d CONTAINER_IP -j DROP

αž”αžŠαž·αžŸαŸαž’

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžŸαžΌαž˜αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ’αž”αžΆαž”αŸ‹αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž”αžŠαž·αžŸαŸαž’αŸ–

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

αžαŸ„αŸ‡αž–αŸ’αž™αžΆαž™αžΆαž˜αž”αž“αŸ’αžαŸ‚αž˜αž‡αž˜αŸ’αžšαžΎαžŸ --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

αž”αžŠαž·αžŸαŸαž’αž‡αžΆαž˜αž½αž™ icmp-host-unreachable

αžαŸ„αŸ‡αžŸαžΆαž€αž›αŸ’αž”αž„αž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ REJECTαŸ–

iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp-host-unreachable

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž…αŸαž‰αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž˜αž½αž™αžœαž·αž“αžΆαž‘αžΈαžŠαŸ„αž™αž˜αžΆαž“αž€αŸ†αž αž»αžŸ [Errno 113] αž‚αŸ’αž˜αžΆαž“αž•αŸ’αž›αžΌαžœαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž‡αžΆαž˜αŸ’αž…αžΆαžŸαŸ‹αž•αŸ’αž‘αŸ‡αž‘αŸαŸ”αž™αžΎαž„αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž…αžšαžΆαž…αžšαžŽαŸ ICMP ICMP host 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

αž™αžΎαž„αžŠαžΉαž„αžšαž½αž…αž αžΎαž™αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎ --reject-with 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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹