gpt4 book ai didi

TCP SYN 和 TCP RST 的 TCP 序列和确认值

转载 作者:可可西里 更新时间:2023-11-01 02:52:12 31 4
gpt4 key购买 nike

我正在发送一些 TCP SYN 数据包以获得 TCP RST 的返回。为了识别每个探测器,我在 TCP 序列字段中包含一个计数器。我注意到以下几点:

  • 当SYN probe中的sequence numbers为0, 1, 2, 3...时,RST报文有ack=1, 2, 3, 4...,即ack=syn_seq+1 :

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

  • 另一方面,当我的探针seq > 1开始时,第一个将有ack=syn_seq +1 像往常一样,但是接下来的 rst 将具有 ack=2,3,4... 无论探针的序列值如何:

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

这是预期的行为吗?

最佳答案

TCP session 的每一端都以(相对)零序号开始。

同样,确认数也为零,因为还没有对话的补充方要确认。

服务器以序列号 0 响应客户端,因为这是该 TCP session 中的第一个数据包,相对确认号 1。

确认号设置为 1 表示在数据包中收到客户端的 SYN 标志。

现在你的情况:

序列号有双重作用:

If the SYN flag is set (1), then this is the initial sequence number.The sequence number of the actual first data byte and the acknowledgednumber in the corresponding ACK are then this sequence number plus 1.

If the SYN flag is clear (0), then this is the accumulated sequencenumber of the first data byte of this segment for the current session.

Wikipedia 复制的 block 引用部分.

所以,你的 SYN 标志可能是 0。

如果是这样,那就是默认行为。

关于TCP SYN 和 TCP RST 的 TCP 序列和确认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19811075/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com