Skip to content

计算机网络-为什么需要随机ISN

  • ISN: Inital Sequence Number
  • 为什么我们需要一个随机化的序列号,这里指的是三次握手阶段

1. 出于安全的考虑

1.1 如何对抗重放攻击

  • 重放攻击就是拦截一次请求,然后把真实的请求保存下来,过一段时间重新再请求一次,造成服务端的混乱。
  • 随机化的 ISN 保证了每次连接的滑动窗口号都千变万化,攻击者获取的旧的请求已经失去了意义了。

1.2 如何对抗中间人攻击

  • 比如 RST 包的攻击,通过随机化 Seq, 能够构造出一个随机的滑动窗口,攻击者想要把序列号落在滑动窗口内是比较困难的(但是通过 tcpkill/killxc 之类的工具还是可以实现的)

2. 出于鲁棒性的考虑

2.1 防止同样的 TCP 四元组造成混淆

  • 虽然说,time-wait 状态会持续 2*MSL 的时间,保证迷路的包全部过期,但是,还是可能出现连接错乱的情况,比如断电之类的特殊情况,二者无法顺利完成四次挥手。
  • 如果假定所有的 seq 全部从 0 开始,也就是不进行任何的随机化,可能的情况如下所示:

image.png|475

  • 如果进行了随机化,那么,历史的报文就很难落到滑动窗口当中,几乎不可能出现错乱