TCP序列号到达时发生的情况与预期不符?

zer*_*dev 5 c tcp packet-capture libpcap

我正在编写一个程序,它使用libpcap来捕获数据包并重新组装TCP流.我的程序只是监控流量,所以我无法控制数据包的接收和传输.我的程序忽略所有非TCP/IP流量.

我从ISN计算下一个预期的序列号,然后计算连续的SEQ号.我进行了设置,以便每个TCP连接由一个由源IP,源端口,dest IP和dest端口组成的元组唯一标识.一切都顺利进行,直到我收到一个序列号不同于我所期望的数据包.我上传了屏幕截图,以帮助说明我在这里描述的内容.

我的问题是:1."丢失"数据包中的数据在哪里?2. SEQ数字顺序如何从这种情况中恢复?3.我该怎么做才能处理这些事件.

请记住; 但是,我不是在编写一个遵循TCP的程序.我正在编写一个程序,被动地监视TCP流的网络流量并尝试将原始数据保存到磁盘,我很困惑为什么上面的状态发生以及如何编程来处理它.

谢谢

cni*_*tar 13

"丢失"数据包中的数据在哪里?

  • 它被某人丢弃了
  • 它在途中迷路了(错误的绕行)并将在稍后到达

SEQ数字顺序如何从这种情况中恢复

接收器注意到该段不按顺序并且不将其发送到应用程序,从而履行其合同:有序可靠字节流.现在,实际上发现缺少的部分是非常错综复杂的,并且从堆栈到堆栈各不相同.简而言之,堆栈等待丢失的部分到达.

  • 接收器可以丢弃无序段,也可以在重组队列中对它们进行排队
  • 接收器可以等待丢失的段到达,或者它可以立即发送它之前已经发送的ACK.重复的ACK会提醒对等方有问题(寻找快速重传)
  • 发送确认时,TCP可以通知对端一些段成功到达 - 它们只是不按顺序(SACK)

我该怎么做才能处理这些事件

由于您只是在监控,因此无法执行任何操作.如果您还捕获了响应流量,您可能会更深入地了解实际发生的情况.