Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F8994064
newreno-iw20-sack-ts-server.pkt
rscheff (Richard Scheffenegger)
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
rscheff
Sep 19 2020, 9:08 AM
2020-09-19 09:08:16 (UTC+0)
Size
9 KB
Referenced Files
None
Subscribers
None
newreno-iw20-sack-ts-server.pkt
View Options
// A simple server-side test that sends exactly an initial window (IW10)
// worth of packets.
--tolerance_usecs=700000
// Flush Hostcache
0.00 `sysctl net.inet.tcp.cc.algorithm=newreno`
0.10 `sysctl net.inet.tcp.initcwnd_segments=20`
0.15 `sysctl net.inet.tcp.rfc3465=1`
0.20 `sysctl net.inet.tcp.rfc3042=1`
0.20 `sysctl net.inet.tcp.sack.enable=1`
0.25 `sysctl net.inet.tcp.rfc1323=1`
0.40 `sysctl net.inet.tcp.hostcache.purgenow=1`
0.45 `sync` // in case of crash
// Create a listening TCP socket.
0.50 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0.005 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0.005 setsockopt(3, SOL_SOCKET, SO_DEBUG, [1], 4) = 0
+0.005 setsockopt(3, SOL_SOCKET, SO_SNDBUF, [1048576], 4) = 0
+0.005 bind(3, ..., ...) = 0
+0.005 listen(3, 1) = 0
// Establish a TCP connection with ECN to explicitly track CWR
+0.035 < SEW 0:0(0) win 65535 <mss 1012, sackOK, wscale 10, nop, TS val 1 ecr 0 >
+0.000 > SE. 0:0(0) ack 1 win 65535 <mss 1460, nop, wscale 6, sackOK, TS val 1 ecr 1>
+0.000 < . 1:1(0) ack 1 win 65535 <nop, nop, TS val 2 ecr 1>
+0.000 accept(3, ..., ...) = 4
+0 %{
print("\t\t\tcwnd:\tssthresh:\tsnd_nxt:\n")
print("window at accept:\t{}\t{}\t{}".format(tcpi_snd_cwnd, tcpi_snd_ssthresh, tcpi_snd_nxt))
if (tcpi_snd_cwnd != 20000):
print("Error - Initial Window after 3WHS is not equal 20 MSS")
assert(tcpi_snd_cwnd == 20000)
}%
// First, send IW plus 1 segment, drop 2nd packet to pull ssthresh low
0.700 write(4, ..., 45000) = 45000
+0 > . 1:1001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 %{
print("initial window:\t\t{}\t{}\t{}".format(tcpi_snd_cwnd, tcpi_snd_ssthresh, tcpi_snd_nxt))
if (tcpi_snd_cwnd != 20000):
print("Error - Initial Window not equal to 20 MSS!")
assert(tcpi_snd_cwnd == 20000)
}%
+0 > . 1001:2001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 %{
print("1 seg window:\t\t{}\t{}\t{}".format(tcpi_snd_cwnd, tcpi_snd_ssthresh, tcpi_snd_nxt))
}%
+0 > . 2001:3001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 3001:4001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 4001:5001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 5001:6001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 6001:7001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 7001:8001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 8001:9001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 9001:10001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 10001:11001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 11001:12001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 12001:13001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 13001:14001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 14001:15001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 15001:16001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 16001:17001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 17001:18001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 18001:19001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0 > . 19001:20001(1000) ack 1 <nop, nop, TS val 2 ecr 2>
+0.01 < . 1:1(0) ack 1001 win 65535 <nop, nop, TS val 3 ecr 2>
+0 > . 20001:21001(1000) ack 1 <nop, nop, TS val 3 ecr 3>
+0 > . 21001:22001(1000) ack 1 <nop, nop, TS val 3 ecr 3>
+0.01 < . 1:1(0) ack 1001 win 65535 <nop, nop, sack 3001:4001, nop, nop, TS val 4 ecr 2>
// ack thinning for ack 4001:5001
+0.01 < . 1:1(0) ack 1001 win 65535 <nop, nop, sack 7001:8001 3001:5001, nop, nop, TS val 5 ecr 2>
// ack thinning for ack 8001:9001
+0 > . 22001:23001(1000) ack 1 <nop, nop, TS val 5 ecr 5>
+0 > . 23001:24001(1000) ack 1 <nop, nop, TS val 5 ecr 5>
+0.01 < . 1:1(0) ack 1001 win 65535 <nop, nop, sack 11001:12001 7001:9001 3001:5001, nop, nop, TS val 6 ecr 2>
// ack thinning for ack 12001:13001
+0 > . 1001:2001(1000) ack 1 <nop, nop, TS val 6 ecr 6>
+0.01 < . 1:1(0) ack 1001 win 65535 <nop, nop, sack 15001:16001 11001:13001 7001:9001, nop, nop, TS val 7 ecr 2>
// ack thinning for ack 16001:17001
+0 > . 2001:3001(1000) ack 1 <nop, nop, TS val 7 ecr 7>
+0.01 < . 1:1(0) ack 1001 win 65535 <nop, nop, sack 15001:17001 11001:13001 7001:9001, nop, nop, TS val 8 ecr 2>
+0 > . 5001:6001(1000) ack 1 <nop, nop, TS val 8 ecr 8>
+0.01 < . 1:1(0) ack 1001 win 65535 <nop, nop, sack 15001:18001 11001:13001 7001:9001, nop, nop, TS val 9 ecr 2>
+0 > . 6001:7001(1000) ack 1 <nop, nop, TS val 9 ecr 9>
+0.01 < . 1:1(0) ack 1001 win 65535 <nop, nop, sack 15001:19001 11001:13001 7001:9001, nop, nop, TS val 10 ecr 2>
+0 > . 9001:10001(1000) ack 1 <nop, nop, TS val 10 ecr 10>
+0.01 < . 1:1(0) ack 1001 win 65535 <nop, nop, sack 15001:20001 11001:13001 7001:9001, nop, nop, TS val 11 ecr 2>
+0 > . 10001:11001(1000) ack 1 <nop, nop, TS val 11 ecr 11>
+0.01 < . 1:1(0) ack 1001 win 65535 <nop, nop, sack 15001:21001 11001:13001 7001:9001, nop, nop, TS val 12 ecr 3>
+0 > . 13001:14001(1000) ack 1 <nop, nop, TS val 12 ecr 12>
+0.01 < . 1:1(0) ack 1001 win 65535 <nop, nop, sack 15001:22001 11001:13001 7001:9001, nop, nop, TS val 13 ecr 3>
+0 > . 14001:15001(1000) ack 1 <nop, nop, TS val 13 ecr 13>
+0.01 < . 1:1(0) ack 1001 win 65535 <nop, nop, sack 15001:23001 11001:13001 7001:9001, nop, nop, TS val 14 ecr 5>
+0.01 < . 1:1(0) ack 1001 win 65535 <nop, nop, sack 15001:24001 11001:13001 7001:9001, nop, nop, TS val 15 ecr 5>
+0 > W. 24001:25001(1000) ack 1 <nop, nop, TS val 15 ecr 15>
+0 > . 25001:26001(1000) ack 1 <nop, nop, TS val 15 ecr 15>
+0.01 < . 1:1(0) ack 2001 win 65535 <nop, nop, sack 15001:24001 11001:13001 7001:9001, nop, nop, TS val 16 ecr 6>
+0 > . 26001:27001(1000) ack 1 <nop, nop, TS val 16 ecr 16>
+0.01 < . 1:1(0) ack 5001 win 65535 <nop, nop, sack 15001:24001 11001:13001 7001:9001, nop, nop, TS val 17 ecr 7>
+0 > . 27001:28001(1000) ack 1 <nop, nop, TS val 17 ecr 17>
+0.01 < . 1:1(0) ack 6001 win 65535 <nop, nop, sack 15001:24001 11001:13001 7001:9001, nop, nop, TS val 18 ecr 8>
+0 > . 28001:29001(1000) ack 1 <nop, nop, TS val 18 ecr 18>
+0.01 < . 1:1(0) ack 9001 win 65535 <nop, nop, sack 15001:24001 11001:13001, nop, nop, TS val 19 ecr 9>
+0 > . 29001:30001(1000) ack 1 <nop, nop, TS val 19 ecr 19>
+0.01 < . 1:1(0) ack 10001 win 65535 <nop, nop, sack 15001:24001 11001:13001, nop, nop, TS val 20 ecr 10>
+0 > . 30001:31001(1000) ack 1 <nop, nop, TS val 20 ecr 20>
+0.01 < . 1:1(0) ack 13001 win 65535 <nop, nop, sack 15001:24001, nop, nop, TS val 21 ecr 11>
+0 > . 31001:32001(1000) ack 1 <nop, nop, TS val 21 ecr 21>
+0.01 < . 1:1(0) ack 14001 win 65535 <nop, nop, sack 15001:24001, nop, nop, TS val 22 ecr 12>
+0 > . 32001:33001(1000) ack 1 <nop, nop, TS val 22 ecr 22>
//+0.01 < . 1:1(0) ack 24001 win 65535 <nop, nop, TS val 23 ecr 13>
+0.01 < . 1:1(0) ack 25001 win 65535 <nop, nop, TS val 24 ecr 15>
+0 > . 33001:34001(1000) ack 1 <nop, nop, TS val 24 ecr 24>
//+0.01 < . 1:1(0) ack 26001 win 65535 <nop, nop, TS val 25 ecr 15>
+0.01 < . 1:1(0) ack 27001 win 65535 <nop, nop, TS val 26 ecr 16>
+0 > . 34001:35001(1000) ack 1 <nop, nop, TS val 26 ecr 26> // this should have occured after the prior ack
+0 > . 35001:36001(1000) ack 1 <nop, nop, TS val 26 ecr 26>
+0 > . 36001:37001(1000) ack 1 <nop, nop, TS val 26 ecr 26>
+0 > . 37001:38001(1000) ack 1 <nop, nop, TS val 26 ecr 26> // CA window increase?
//+0.01 < . 1:1(0) ack 27001 win 65535 <nop, nop, TS val 27 ecr 16>
+0.01 < . 1:1(0) ack 28001 win 65535 <nop, nop, TS val 28 ecr 17>
+0 > . 38001:39001(1000) ack 1 <nop, nop, TS val 28 ecr 28>
//+0.01 < . 1:1(0) ack 29001 win 65535 <nop, nop, TS val 29 ecr 18>
+0.01 < . 1:1(0) ack 30001 win 65535 <nop, nop, TS val 30 ecr 19>
+0 > . 39001:40001(1000) ack 1 <nop, nop, TS val 30 ecr 30>
+0 > . 40001:41001(1000) ack 1 <nop, nop, TS val 30 ecr 30>
//+0.01 < . 1:1(0) ack 31001 win 65535 <nop, nop, TS val 31 ecr 20>
+0.01 < . 1:1(0) ack 32001 win 65535 <nop, nop, TS val 32 ecr 21>
+0 > . 41001:42001(1000) ack 1 <nop, nop, TS val 32 ecr 32>
+0 > . 42001:43001(1000) ack 1 <nop, nop, TS val 32 ecr 32>
//+0.01 < . 1:1(0) ack 33001 win 65535 <nop, nop, TS val 33 ecr 22>
+0.01 < . 1:1(0) ack 34001 win 65535 <nop, nop, TS val 34 ecr 24>
+0 > . 43001:44001(1000) ack 1 <nop, nop, TS val 34 ecr 34>
+0 > P. 44001:45001(1000) ack 1 <nop, nop, TS val 34 ecr 34>
//+0.01 < . 1:1(0) ack 35001 win 65535 <nop, nop, TS val 35 ecr 26>
+0.01 < . 1:1(0) ack 36001 win 65535 <nop, nop, TS val 36 ecr 26>
//+0.01 < . 1:1(0) ack 37001 win 65535 <nop, nop, TS val 37 ecr 26>
+0.01 < . 1:1(0) ack 38001 win 65535 <nop, nop, TS val 38 ecr 26>
//+0.01 < . 1:1(0) ack 39001 win 65535 <nop, nop, TS val 39 ecr 28>
+0.01 < . 1:1(0) ack 40001 win 65535 <nop, nop, TS val 40 ecr 30>
//+0.01 < . 1:1(0) ack 41001 win 65535 <nop, nop, TS val 41 ecr 30>
+0.01 < . 1:1(0) ack 42001 win 65535 <nop, nop, TS val 42 ecr 32>
//+0.01 < . 1:1(0) ack 43001 win 65535 <nop, nop, TS val 43 ecr 32>
+0.01 < . 1:1(0) ack 44001 win 65535 <nop, nop, TS val 44 ecr 34>
+0.04 < . 1:1(0) ack 45001 win 65535 <nop, nop, TS val 45 ecr 34>
//RTO
//0.9~3.7 > . 1:1001(1000) ack 1 <nop, nop, TS val 230 ecr 2>
//+0 %{ print("RTO window:\t\t{}\t{}\t\t{}".format(tcpi_snd_cwnd, tcpi_snd_ssthresh, tcpi_snd_nxt))
//if (tcpi_snd_cwnd > 2000):
// print("Error - Window after RTO larger than 2 MSS!\n")
//assert(tcpi_snd_cwnd <= 2000)
//}%
+0.2 close(4) = 0
+0.01 < F. 1:1(0) ack 60002 win 65535
`sysctl net.inet.tcp.initcwnd_segments=10`
File Metadata
Details
Attached
Mime Type
text/plain
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2802327
Default Alt Text
newreno-iw20-sack-ts-server.pkt (9 KB)
Attached To
Mode
D26478: TCP: Send full Initial Window when Timestamps are in use
Attached
Detach File
Event Timeline
Log In to Comment