TCP重置数据包上的序列号是否有任何要求?


3

如果TCP程序A和B之间存在TCP连接,并且攻击者知道其源IP地址/端口和目标IP地址/端口,则攻击者现在想要向A发送TCP重置数据包以结束TCP连接。

现在,让我们假设,对于A,其TCP堆栈刚刚发送了序列号为1000且确认号为5000的TCP Ack数据包。

复位数据包上的序列号和确认号是否有任何要求?

如果重置数据包使用 seq: 5000 and ack:1000,它肯定会被A的TCP堆栈接受,并且TCP连接在A上结束。

以下组合怎么样?

1 seq: 5000, ack_seq: 0
2 seq: 5000, ack_seq: 999  ( this ack_seq is obsolete, namely <1000)
3 seq: 5000, ack_seq: 1002 ( this ack_seq is proactive, namely >1000)
4 seq: 5001, ack_seq: 1000 ( the seq is not consistent)
5 seq: 5001, ack_seq: 999  ( both seq and ack_seq are not consistent)

在我看来,这 1 是否可以杀死连接?

Answers:


1

在这种情况下,您已建立连接。这意味着组合1将无效。

RFC793 ,第15页陈述了关于ACK号码的以下内容:

确认号:32位

如果设置了ACK控制位,则该字段包含该值       段的发送者期望的下一个序列号       接收。 建立连接后,始终会发送此连接。

因此,您仍需要使用RST包发送ACK号以终止连接。 但是,如果没有建立连接和封闭端口,这似乎也是如此。如果发送一个 SYN数据包到一个关闭的端口,然后另一端将响应一个RST,ACK包。

您可以使用wireshark进行分析。


0

根据RFC793,第69页,当一个段到达LISTEN以外的状态的连接时,首先检查序列号是否落入接收器窗口,如果不是,则将其丢弃。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.