Networking 当建立tcp连接时,如果tcp使用初始序列号作为固定数字会怎么样?

Networking 当建立tcp连接时,如果tcp使用初始序列号作为固定数字会怎么样?,networking,tcp,Networking,Tcp,我正在读Douglas Comer的《使用TCP/IP进行互联网连接》,当谈到创建TCP连接时,有一个问题: 假设TCP使用的一个实现 初始序列号1,当它 创建连接,解释 系统崩溃和重新启动可能会混淆 远程系统认为 旧的连接仍然打开 我不明白为什么,请帮助我,谢谢。重新启动后,如果第一个TCP连接指向同一个远程系统,由于序列号将再次为1——考虑这将导致什么。尽管如此,但它比这更糟糕——被欺骗和注入一个数量级更容易考虑为什么连接可能会得到重复的序列号。 然后考虑接收系统如何处理具有“重复”序列号的

我正在读Douglas Comer的《使用TCP/IP进行互联网连接》,当谈到创建TCP连接时,有一个问题:

假设TCP使用的一个实现 初始序列号1,当它 创建连接,解释 系统崩溃和重新启动可能会混淆 远程系统认为 旧的连接仍然打开


我不明白为什么,请帮助我,谢谢。

重新启动后,如果第一个TCP连接指向同一个远程系统,由于序列号将再次为1——考虑这将导致什么。

尽管如此,但它比这更糟糕——被欺骗和注入一个数量级更容易

考虑为什么连接可能会得到重复的序列号。

然后考虑接收系统如何处理具有“重复”序列号的数据包(因为传输系统在使用的数据包中重新使用序列号,试图重新建立连接)。 *编辑:*

OP说:


但当重新建立连接时,传输系统将发送一个设置了SYN代码位的段(当然序列号设置为1),这(SYN代码位设置)不会通知接收系统这是一个试图建立的新连接吗?请参阅wiki了解传输控制协议,它说“只有从每一端发送的第一个数据包应设置此标志(SYN)。”

但是数据包会丢失、延迟并无序到达。你不能简单地说,在带有SYN标志的数据包之后到达的所有数据包都是新的。让我们假设一些旧数据包延迟并在建立新连接之后到达。你如何区分序列号为#10的数据包是旧连接还是新连接更糟糕的情况是,它来自旧连接,接收系统从新连接接受它。当真正的新连接数据包#10到达时,它被忽略,作为不必要的重新传输。流被破坏,没有任何指示

…使用序列号1启动每个连接的问题在于,它可能会导致来自不同连接的段混淆。假设我们建立了TCP连接,并发送了一个包含字节1到30的段。但是,由于Internet存在问题,导致该段丢失TCP连接本身延迟并最终终止。然后,我们启动了一个新连接,并再次使用了起始序列号1。但是,一旦启动此新连接,就会出现标有1到30字节的旧段。另一个设备会错误地认为这些字节是新连接的一部分

……这只是可能出现的几个类似问题之一


可预测初始序列号的另一个问题(例如每次从1开始)是可预测性存在漏洞:

恶意用户可以编写代码来分析ISNs,然后根据早期ISNs中使用的ISNs预测后续TCP连接的ISN。这代表了一种安全风险,过去曾被利用过(例如著名的Mitnick攻击).为了克服这一点,实现现在在其ISN选择过程中使用随机数


Mitnick攻击-

但当重新建立连接时,传输系统将发送一个设置了SYN代码位的段(当然序列号设置为1),该段(SYN代码位设置)不会通知接收系统它是一个试图建立的新连接吗?请参阅wiki了解传输控制协议,它说“只有从每一端发送的第一个数据包才应设置此标志(SYN)。“非常感谢您的高质量回答,但很抱歉我一直坚持,您给出的场景表明接收系统可能错误地认为旧连接的数据包来自新连接,因此系统崩溃和重新启动可能会使远程系统误认为旧数据包来自新连接,但它仍然没有解释为什么它会混淆远程系统,使其相信旧连接仍然打开,实际上在您给出的场景中,我认为接收系统清楚地知道旧连接已断开。再次感谢您的回答。^非常感谢。@Diveinto-我一直在考虑这个问题,&我能想到的唯一一件事是,来自重新连接的初始syn数据包可以被视为一个重复。但是,我找不到支持这一点的文档。我发现的最接近的是图10:“当SYN到达第3行时,处于同步状态的TCP B,以及窗口外的传入段,响应一个确认,指示它接下来期望听到的序列(ACK 100)。”没有迹象表明如果该段在窗口内会发生什么。事实上,我知道更糟糕的一面,我只是不知道为什么接收系统认为旧的连接仍然是开放的。