Exercise 12.10 Suppose an implementation of TCP use initial sequence number 1 when it creates a connection,Explain how a system crash and restart can confuse a remote system into believing that the old connection remained open.引自第232页
想不通为什么,于是在StackOverFlow上发问(http://stackoverflow.com/questions/4774349),一位仁兄相当耐心,几个回合来去一直都细心回答,而且惊喜不断,特别是他给了个相关的黑客攻击案:
http://www.cas.mcmaster.ca/wiki/index.php/The_Mitnick_attack
过程大概就是利用早期TCP实现的简陋,Mitnick猜出了连接建立时客户端使用的INS(Initial Sequence Number) ,在利用Denial of Service 攻击 使合法服务器无法应答的同时,Mitnick自己则将精心构造好INS数值和伪造了源地址的TCP包发送给客户端,以冒充服务器的应答,TCP软件并没有太多(或者说根本就没有?)识别TCP数据包真伪的机制,它一看源地址是我要连接的服务器,INS也靠谱,于是回应确认建立连接,然后BlaBlaBla,就任由Mitnick发挥了。
至于习题本身,我们讨论的结果是可能习题说法有误,一个固定的INS会在远端系统崩溃并重启以重新建立连接时让另一端的系统误将旧的连接的TCP数据包当作新连接的数据包(实际上它无法区分两者)处理,但是在重新建立连接时,另一端系统会明确知道这是新的连接,因为远端系统发送的握手包明确的告诉了彼端:这是新的连接。