我发送了一些 TCP SYN 数据包,以便 TCP RST 返回。为了识别每个探测,我在TCP序列字段中包含一个计数器。我注意到以下几点:
12:17:27.181993 IP X.X.X.X.10104> Y.Y.Y.10114:标志[S], seq 0 ,胜利 8192,长度0 12:17:27.182008 IP Y.Y.Y.Y.10114> X.X.X.X.10104:标志 [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:标志[R.],seq 0, ack 2 ,赢0,长度 0 12:17:28.184140 IP X.X.X.X.10104> Y.Y.Y.Y.10114:旗帜[S], seq 2 , 获胜8192,长度0 12:17:28.184147 IP Y.Y.Y.Y.10114> X.X.X.X.10104: 标志[R.],seq 0, ack 3 ,赢0,长0 12:17:28.684993 IP X.X.X.X.10104> Y.Y.Y.Y.10114:标志[S], seq 3 ,赢8192,长度0 12:17:28.685000 IP Y.Y.Y.Y.10114> X.X.X.X.10104:Flags [R.],seq 0, ack 4 ,赢0,长0
12:11:25.274636 IP X.X.X.X.59150> Y.Y.Y.Y.59160:标志[S], seq 299 ,获胜8192,长度0 12:11:25.274649 IP Y.Y.Y.Y.59160> X.X.X.X.59150:标志[R.],序号0, ack 300 ,赢0,长0 12:11:25.775218 IP X.X.X.X.59150> Y.Y.Y.Y.59160:标志[S], seq 300 ,获胜8192,长度0 12:11:25.775226 IP Y.Y.Y.Y.59160> X.X.X.X.59150:标志[R.],seq 0, ack 2 ,赢0,长0 12:11:26.276324 IP X.X.X.X.59150> Y.Y.Y.Y.59160:标志[S], seq 301 ,win 8192,length 0 12:11:26.276332 IP Y.Y.Y.Y.59160> X.X.X.X.59150:标志[R.],seq 0, ack 3 ,赢0,长0 12:11:26.776940 IP X.X.X.X.59150> Y.Y.Y.Y.59160:标志[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 ,赢0,长0
这是预期的行为吗?
答案 0 :(得分:1)
TCP会话的每一端都以(相对)序列号为零开始。
同样,确认号也是零,因为还没有一个互补的方面要承认。
服务器以序列号零响应客户端,因为这是此TCP会话中的第一个数据包,相对确认号为1.
确认号设置为1表示在数据包
中收到客户端的SYN标志现在你的情况:
序列号起双重作用:
复制的Blockquoted部分如果设置了SYN标志(1),则这是初始序列号。 实际第一个数据字节的序列号和已确认的 相应的ACK中的数字则是此序列号加1。
如果SYN标志清零(0),则这是累计序列 当前会话的该段的第一个数据字节的编号。
所以你的Syn标志可能是0。
如果是,那就是默认行为。
答案 1 :(得分:0)
好的,实际上没有真正的问题。当我使用Wireshark检查数据包并查看数据包中的实际位时,每个RST数据包的ack值都像往常一样设置为seq_of_syn + 1
。
tcpdump
只是在输出中使用相对确认号。就是这样。