TCP SYN和TCP RST的TCP序列和ack值

TCP SYN和TCP RST的TCP序列和ack值,tcp,Tcp,我正在发送一些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 X.X.X.10104>Y.Y.Y.10114:Flags[S],seq 0,获胜 8192,长度0 12:17:27.182008 IP Y.Y.Y.10114>X.X.X.X.10104:标志 [R.],序

我正在发送一些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 X.X.X.10104>Y.Y.Y.10114:Flags[S],seq 0,获胜 8192,长度0 12:17:27.182008 IP Y.Y.Y.10114>X.X.X.X.10104:标志 [R.],序列0,确认1,赢0,长度0 12:17:27.683148 IP X.X.X.10104> Y.Y.Y.Y.10114:Flags[S],seq1,win 8192,长度0 12:17:27.683156 IP Y.Y.Y.Y.10114>X.X.X.X.10104:Flags[R.],seq 0,ack 2,win 0,长度 0 12:17:28.184140 IP X.X.X.10104>Y.Y.Y.Y.10114:标志,序号2, win 8192,长度0 12:17:28.184147 IP Y.Y.Y.10114>X.X.X.10104: 旗帜[R.],序号0,ack 3,胜利0,长度0 12:17:28.684993 IP X.X.X.X.10104>Y.Y.Y.Y.10114:Flags[S],序列3,win 8192,长度0 12:17:28.685000 IP Y.Y.Y.10114>X.X.X.X.10104:标志[R.],序号0, 确认4,赢0,长度0

  • 另一方面,当我的探针以序列1开始时,第一个rst将像往常一样具有ack=syn_序列+1, 但是接下来的rst将具有ack=2,3,4。。。无论探针的顺序值如何:
12:11:25.274636 IP X.X.X.59150>Y.Y.Y.Y.59160:标志,顺序 299,win 8192,长度0 12:11:25.274649 IP Y.Y.Y.59160> X.X.X.X.59150:旗帜[R.],序号0,ack 300,胜利0,长度0 12:11:25.775218 IP X.X.X.59150>Y.Y.Y.Y.59160:标志,顺序 300,win 8192,长度0 12:11:25.775226 IP Y.Y.Y.59160> X.X.X.X.59150:旗帜[R.],序号0,确认2,胜利0,长度0 12:11:26.276324 IP X.X.X.59150>Y.Y.Y.Y.59160:Flags[S],序列 301,win 8192,长度0 12:11:26.276332 IP Y.Y.Y.59160> X.X.X.X.59150:旗帜[R.],序号0,ack 3,胜利0,长度0 12:11:26.776940 IP X.X.X.59150>Y.Y.Y.Y.59160:标志,顺序 302,win 8192,长度0 12:11:26.776948 IP Y.Y.Y.59160> X.X.X.X.59150:旗帜[R.],序号0,确认4,胜利0,长度0


这是预期的行为吗?

TCP会话的每一侧都以(相对)序列号零开始

同样,确认号也为零,因为对话中还没有要确认的互补面

服务器响应客户机的序列号为零,因为这是它在此TCP会话中的第一个数据包,相对确认号为1

确认号设置为1,以指示在数据包中接收到客户端的SYN标志

现在谈谈你的情况:

序列号有双重作用:

如果设置了SYN标志(1),则这是初始序列号。 实际第一个数据字节的序列号和已确认的 相应ACK中的编号为该序列号加1

如果SYN标志清除(0),则这是累积序列 当前会话此段的第一个数据字节的编号

从复制的块引用部分

因此,您的SYN标志可能是0


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

TCP会话的每一侧都以(相对)序列号零开始

同样,确认号也为零,因为对话中还没有要确认的互补面

服务器响应客户机的序列号为零,因为这是它在此TCP会话中的第一个数据包,相对确认号为1

确认号设置为1,以指示在数据包中接收到客户端的SYN标志

现在谈谈你的情况:

序列号有双重作用:

如果设置了SYN标志(1),则这是初始序列号。 实际第一个数据字节的序列号和已确认的 相应ACK中的编号为该序列号加1

如果SYN标志清除(0),则这是累积序列 当前会话此段的第一个数据字节的编号

从复制的块引用部分

因此,您的SYN标志可能是0


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

好的,实际上没有真正的问题。当我用Wireshark检查数据包并查看数据包中的实际位时,每个RST数据包的ack值都像往常一样设置为
seq\u of_syn+1


tcpdump
只是在输出中使用了一个相对确认号。就这些。

好的,实际上没有什么问题。当我用Wireshark检查数据包并查看数据包中的实际位时,每个RST数据包的ack值都像往常一样设置为
seq\u of_syn+1


tcpdump
只是在输出中使用了一个相对确认号。就这些。

谢谢你的回复。但是你没有说服我关于SYN标志的事。您可以从我从
tcpdump
复制和粘贴的摘录中看到,我的探测都是SYN数据包。例如:12:11:26.776940 IP X.X.X.X.59150>Y.Y.Y.Y.59160:Flags[S],seq 302,win 8192,长度0感谢回复。但是你没有说服我关于SYN标志的事。您可以从我从
tcpdump
复制和粘贴的摘录中看到,我的探测都是SYN数据包。例如:12:11:26.776940 IP X.X.X.X.59150>Y.Y.Y.Y.59160:Flags[S],seq 302,win 8192,长度0