包含有效载荷的 FIN 数据包后的下一个序列号应该是什么?

包含有效载荷的 FIN 数据包后的下一个序列号应该是什么?

我正在捕获一些 HTTP 流量,并观察到一个设置了 FIN 标志且包含有效负载数据的数据包。

我搜索了这个主题,发现了一些类似的问题,但没有一个问题讨论这种情况的下一个序列号和 RFC 参考。

类似问题

我的问题是,包含有效载荷的 FIN 标志设置后的数据包的下一个序列号应该是什么?

换句话说,主动打开方的 FIN 数据包的响应数据包的 ACK 号应该是多少?响应数据包的确认号应该是多少,而 FIN 数据包的发送方也有有效载荷?

--> <SEQ=100><ACK=300><CTL=FIN,ACK> : payload length = 20 bytes

<-- <SEQ=300><ACK=X><CTL=FIN,ACK>

--> <SEQ=X><ACK=301><CTL=ACK>

X 101120、 还是121

RFC 是否清楚地讨论了这种情况?

我也在 RFC 793 中搜索过这个问题,但没有找到对我的问题的明确解释。

答案1

我并不是 100% 确定,但我的理解是这样的:

在第二个数据包上,SEQ=300 且 ACK=120,因此确认有效载荷。

在第三个数据包中,SEQ=121,因为发送 ACK 被视为一个字节的有效负载,类似于打开连接时三次握手中发生的情况。

答案2

RFC 793 指出 SYN 和 FIN 控制标志占用一个序列号。

在词汇表中,关于 FIN 控制标志有如下描述:

占用一个序列号的控制位(finis),表示发送方将不再发送占用序列空间的数据或控制位。

因此可以认识到,如果第二个数据包正在确认第一个数据包,则的值X应该是。121

相关内容