我发送了几个TCP 数据包以获取TCP RST的返回。为了识别每个探针,我在TCP序列字段中包含了一个计数器。我注意到以下内容:
12:17:27.181993 IP X.10104>Y.10114:旗标S,seq 0,win 8192,长度27.181993:17:27.182008 IP Y.10114>X.10104:标志R,seq 0,ack 1,win 0,长度0 12:17:27.683148 IP X.10104>Y.10114:旗标S,seq 1,win 8192,长度27.683156:17:27.683156 IP Y.10114>X.10104:标志R、seq 0、ack 2、win 0、长度0 :17:28.184140 IP X.10104>Y.10114:旗标S、seq 2、win 8192、长度27.683156:17:28.184147 IP Y.10114>X.10104:标志R、seq 0ack 3,win 0,长度0 12:17:28.684993 IP X.10104>Y.10114:标志S,seq 3,win 8192,长度0 12:17:28.685000 IP Y.10114>X.10104:标志R,seq 0,ack 4,win 0,length 0
12:11:25.274636 IP X.59150>Y.59160:旗标S,seq 299,win 8192,长度0 12:11:25.274649 IP Y.59160>X.59150:标志R,seq 0,ack 300,win 0,长度0 12:11:25.775218 IP X.59150>Y.59160:标志S,seq 300,win 8192,长度25.775226:11:25.775226 IP Y.59160>X.59150:旗标R,seq 0,ack 2,win 0,长度0:11:26.276324 IP X.59150>Y.59160:旗标S,seq 301,win 8192,长度0:11:26.276332 IP Y.59160>X.59150:标志R,seq 0,ack 3,win 0,长度0:11:26.776940 IP X.59150>Y.59160:标志S,seq 302,win 8192,长度0:11:26.776948 IP Y.59160>X.59150:旗标R,seq 0,ack 4,win 0,长度0
这是预期的行为吗?
发布于 2013-11-06 17:13:34
好吧,其实没有真正的问题。当我使用Wireshark检查数据包并查看数据包中的真实位时,每个RST数据包的ack值与往常一样被设置为seq_of_syn + 1。
tcpdump只是在输出中使用相对ack号。就这样。
发布于 2013-11-06 11:55:09
TCP会话的每一方以(相对)序列号为零开始。
同样,确认号也是零,因为对话中还没有一个补充方需要确认。
服务器响应客户端的序列号为零,因为这是该TCP会话中的第一个数据包,相对确认号为1。
确认号设置为1,以指示在数据包中收到客户端的SYN标志。
现在谈谈你的案子:
序列号具有双重作用:
如果设置了SYN标志(1),那么这就是初始序列号。相应的ACK中实际的第一个数据字节的序列号和确认的编号是这个序列号加1。 如果SYN标志为空(0),则这是当前会话该段的第一个数据字节的累积序列号。
从维基百科中复制的Blockquoted引号部件。
所以,您的SYN标志可能是0。
如果是这样的话,那就是默认行为。
https://stackoverflow.com/questions/19811075
复制相似问题