在阅读RFC793时,我了解到应该以防止段重叠的方式选择初始序列号。
有人可以解释重复段如何影响发生重叠的 TCP 吗?
不同的操作系统有不同的行为。请参阅http://insecure.org/stf/secnet_ids/secnet_ids.html的第 4.3.2 节
我在这里复制了该表:
Operating System Overlap Behavior
Windows NT 4.0 Always Favors Old Data
4.4BSD Favors New Data for Forward Overlap
Linux Favors New Data for Forward Overlap
Solaris 2.6 Always Favors Old Data
HP-UX 9.01 Favors New Data for Forward Overlap
Irix 5.3 Favors New Data for Forward Overlap
它不会发生。序号选择在a way that segment-overlapping is prevented
更新
初始序列号优选地是随机数。在此之后,为每个段分配一个序列号,该序列号等于其距数据流开头的偏移量和初始序列号的总和。因此,即使某些实现决定重新发送某个段甚至将其拆分为多个段,也不会发生任何危险 - 如果我们将流视为内存空间,则该段在流中具有它的“地址”
更新
考虑到您的问题的编辑。实际上确实发生了段的重复。例如,当接收器检测到它错过了某个段时,就会发生这种情况。然后它通过发送拒绝请求发送方重新发送该段。但是随后丢失的、最初发送的段到达了。在此之后,被重新发送的第二段到达。然后接收器要么只是丢弃已经接收到的段,要么用最新版本覆盖其缓冲区中的数据。在任何情况下,如果堆栈错过了该数据之前的某个段,则堆栈不会以任何方式通知上层某些数据已到达。