我正在阅读Douglas Comer的《TCP/IP协议》一书,当谈到创建TCP连接时,存在一个问题:
假设TCP的实现在创建连接时使用初始序列号1,那么系统崩溃和重启会如何混淆远程系统,使其认为旧连接仍然保持打开状态。
我无法理解其中的原因,请帮忙解释,谢谢。
假设TCP的实现在创建连接时使用初始序列号1,那么系统崩溃和重启会如何混淆远程系统,使其认为旧连接仍然保持打开状态。
我无法理解其中的原因,请帮忙解释,谢谢。
http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentSequenceNumberSynchroniz.htm
“每次连接都以序列号1开始的问题在于,它会引入不同连接的分段混淆的可能性。假设我们建立了一个TCP连接并发送了一个包含1到30字节的数据段。然而,因为互联网出现了问题,导致这个数据段被延迟,最终TCP连接本身也被终止了。接着我们启动了一个新的连接,并再次使用起始序列号1。然而,一旦这个新连接被启动,旧的带有标记为1到30字节的数据段就出现了。另一台设备会错误地认为这些字节是新连接的一部分。... 这只是几个类似问题中的一个。”恶意人员可以编写代码分析ISN,然后根据先前使用的ISN预测后续TCP连接的ISN。这代表着一个安全风险,过去已经被利用(例如著名的Mitnick攻击)。为了解决这个问题,现在的实现在其ISN选择过程中使用随机数。
Mitnick攻击 - http://www.cas.mcmaster.ca/wiki/index.php/The_Mitnick_attack
然而,情况比那更糟糕——使用序列号进行预测使欺骗和注入变得更加容易。