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
开始,也就是不进行任何的随机化,可能的情况如下所示:
- 如果进行了随机化,那么,历史的报文就很难落到滑动窗口当中,几乎不可能出现错乱