我正在捕获一些 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
101
、120
、 还是121
?
RFC 是否清楚地讨论了这种情况?
我也在 RFC 793 中搜索过这个问题,但没有找到对我的问题的明确解释。
答案1
我并不是 100% 确定,但我的理解是这样的:
在第二个数据包上,SEQ=300 且 ACK=120,因此确认有效载荷。
在第三个数据包中,SEQ=121,因为发送 ACK 被视为一个字节的有效负载,类似于打开连接时三次握手中发生的情况。
答案2
RFC 793 指出 SYN 和 FIN 控制标志占用一个序列号。
在词汇表中,关于 FIN 控制标志有如下描述:
鳍
占用一个序列号的控制位(finis),表示发送方将不再发送占用序列空间的数据或控制位。
因此可以认识到,如果第二个数据包正在确认第一个数据包,则的值X
应该是。121