我正在阅读道格拉斯·科默的“使用TCP / IP进行网络互联”,在谈到创建tcp连接时,存在一个问题:
假设使用TCP的实现 初始序列号为1时 创建一个连接,解释如何 系统崩溃和重启可能会混淆一个 远程系统成为相信的 旧联系仍未解决。
我无法弄明白为什么,请帮助我,谢谢。
答案 0 :(得分:1)
尽管如此,情况要糟糕得多 - 因为predictable with sequence numbers使得欺骗和注入更容易一个数量级
答案 1 :(得分:1)
考虑为什么连接可能正常获得重复的序列号。
然后考虑接收系统如何处理具有“重复”序列号的数据包(因为发送系统开始重用它正在使用的数据包中的序列号尝试重新建立连接)。
* 编辑:*
OP说:但是当重新建立连接时,发送系统将发送一个设置了SYN码位的段(当然序列号设置为1),不会(SYN码位设置)通知接收系统它是一个试图建立的新连接?请参阅wiki的Transmission_Control_Protocol,它说“只有从每一端发送的第一个数据包应该设置此标志(SYN)。”
但数据包丢失并延迟并且无序到达。你不能简单地说在带有SYN标志的数据包之后到达的所有内容都是新的。假设一些旧数据包被延迟并在建立新连接后到达。如何区分序列号为#10的数据包是来自旧连接还是新连接?更糟糕的情况是它来自旧连接,接收系统从新连接接受它。当真正的新连接数据包#10到达时,它被忽略为不必要的重新传输。流已损坏,没有任何迹象。
http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentSequenceNumberSynchroniz.htm
...以序列号1开始每个连接的问题在于它引入了来自不同连接的段混合的可能性。假设我们建立了一个TCP连接,并发送了一个包含字节1到30的段。但是,互联网络存在导致该段延迟的问题,并最终导致TCP连接终止。然后,我们启动了一个新连接,并再次使用了一个起始序列号1.然而,只要启动了这个新连接,就会显示标记为1到30的字节的旧段。另一个设备会错误地认为这些字节是新连接的一部分。
......这只是可能发生的几个类似问题之一。 ...
可预测的初始序列号的另一个问题,例如每次从1开始,可预测性是一个漏洞:
恶意的人可以编写代码来分析ISN,然后根据之前使用的ISN预测后续TCP连接的ISN。这代表了一种过去被利用的安全风险(例如着名的 Mitnick攻击 )。为了解决这个问题,实现现在在ISN选择过程中使用随机数。
米特尼克袭击 - http://www.cas.mcmaster.ca/wiki/index.php/The_Mitnick_attack
答案 2 :(得分:0)
重新启动后,如果第一个TCP连接朝向同一个远程系统,并且由于序列号将再次为1 - 请考虑这将导致什么。