我正在发送一些TCP SYN数据包以获取TCP RST的返回。为了识别每个探针,我在 TCP 序列字段中包含一个计数器。我注意到以下内容:
- 当 SYN 探测中的序列号为 0, 1, 2, 3... 时,RST 消息有 ack=1, 2, 3, 4...,即ack=syn_seq+1:
12:17:27.181993 IP XXXX10104 > YYY10114: 标志 [S], seq 0 , win 8192, 长度 0 12:17:27.182008 IP YYYY10114 > XXXX10104: 标志 [R.], seq 0, ack 1 , win 0, 长度 0 12:17:27.683148 IP XXXX10104 > YYYY10114: 标志 [S], seq 1, win 8192, 长度 0 12:17:27.683156 IP YYYY10114 > XXXX10104: 标志 [R.], seq 0, ack 2 , win 0, 长度 0 12:17:28.184140 IP XXXX10104 > YYYY10114:标志 [S],seq 2,win 8192,长度 0 12:17:28.184147 IP YYYY10114 > XXXX10104:标志 [R.],seq 0,ack 3,win 0,长度 0 12:17:28.684993 IP XXXX10104 > YYYY10114:标志 [S],seq 3, win 8192, length 0 12:17:28.685000 IP YYYY10114 > XXXX10104: Flags [R.], seq 0, ack 4 , win 0, length 0
- 另一方面,当我的探针以seq > 1开始时,第一个rst 将像往常一样具有ack=syn_seq+1,但随后的 rst 将具有ack=2,3,4 ...无论序列值如何探头:
12:11:25.274636 IP XXXX59150 > YYYY59160: 标志 [S], seq 299 , win 8192, 长度 0 12:11:25.274649 IP YYYY59160 > XXXX59150: 标志 [R.], seq 0, ack 300 , win 0, 长度 0 12:11:25.775218 IP XXXX59150 > YYYY59160: 标志 [S], seq 300 , win 8192, 长度 0 12:11:25.775226 IP YYYY59160 > XXXX59150: 标志 [R.], seq 0, ack 2 , win 0, 长度 0 12:11:26.276324 IP XXXX59150 > YYYY59160: 标志 [S], seq 301 , win 8192, 长度 0 12:11:26.276332 IP YYYY59160 > XXXX59150: 标志 [R.], seq 0, ack 3 , win 0, 长度 0 12:11:26.776940 IP XXXX59150 > YYYY59160:标志 [S],seq 302, win 8192, length 0 12:11:26.776948 IP YYYY59160 > XXXX59150: Flags [R.], seq 0, ack 4 , win 0, length 0
这是预期的行为吗?