I'm sending a few TCP SYN packets to get TCP RST's back. In order to identify each probe, I include a counter in the TCP sequence field. I noticed the following:
12:17:27.181993 IP X.X.X.X.10104 > Y.Y.Y.10114: Flags [S], seq 0, win 8192, length 0 12:17:27.182008 IP Y.Y.Y.Y.10114 > X.X.X.X.10104: Flags [R.], seq 0, ack 1, win 0, length 0 12:17:27.683148 IP X.X.X.X.10104 > Y.Y.Y.Y.10114: Flags [S], seq 1, win 8192, length 0 12:17:27.683156 IP Y.Y.Y.Y.10114 > X.X.X.X.10104: Flags [R.], seq 0, ack 2, win 0, length 0 12:17:28.184140 IP X.X.X.X.10104 > Y.Y.Y.Y.10114: Flags [S], seq 2, win 8192, length 0 12:17:28.184147 IP Y.Y.Y.Y.10114 > X.X.X.X.10104: Flags [R.], seq 0, ack 3, win 0, length 0 12:17:28.684993 IP X.X.X.X.10104 > Y.Y.Y.Y.10114: Flags [S], seq 3, win 8192, length 0 12:17:28.685000 IP Y.Y.Y.Y.10114 > X.X.X.X.10104: Flags [R.], seq 0, ack 4, win 0, length 0
12:11:25.274636 IP X.X.X.X.59150 > Y.Y.Y.Y.59160: Flags [S], seq 299, win 8192, length 0 12:11:25.274649 IP Y.Y.Y.Y.59160 > X.X.X.X.59150: Flags [R.], seq 0, ack 300, win 0, length 0 12:11:25.775218 IP X.X.X.X.59150 > Y.Y.Y.Y.59160: Flags [S], seq 300, win 8192, length 0 12:11:25.775226 IP Y.Y.Y.Y.59160 > X.X.X.X.59150: Flags [R.], seq 0, ack 2, win 0, length 0 12:11:26.276324 IP X.X.X.X.59150 > Y.Y.Y.Y.59160: Flags [S], seq 301, win 8192, length 0 12:11:26.276332 IP Y.Y.Y.Y.59160 > X.X.X.X.59150: Flags [R.], seq 0, ack 3, win 0, length 0 12:11:26.776940 IP X.X.X.X.59150 > Y.Y.Y.Y.59160: Flags [S], seq 302, win 8192, length 0 12:11:26.776948 IP Y.Y.Y.Y.59160 > X.X.X.X.59150: Flags [R.], seq 0, ack 4, win 0, length 0
Is this the expected behaviour?
Ok, there was actually no real problem. When I inspected the packets with Wireshark and looked at the real bits in the packet, the ack value of each RST packet was set to seq_of_syn + 1
, as usual.
tcpdump
was simply using a relative ack number in the output. That's all.