当TCP序列号到达时发生了什么,而不是预期的情况?
我正在编写一个程序,它使用libpcap捕获数据包并重新组装TCP流。我的程序只是监控流量,因此我无法控制数据包的接收和传输。我的程序忽略所有非TCP/IP通信 我根据ISN计算下一个预期的序列号,然后是连续的序列号。我将其设置为每个TCP连接都由一个元组唯一标识,元组由源IP、源端口、目标IP和目标端口组成。一切都进展顺利,直到我收到一个序列号不同于我预期的数据包。我上传了屏幕截图,以帮助说明我所描述的内容 我的问题是: 1.“丢失”数据包中的数据在哪里? 2.序列号订单如何从这种情况中恢复? 3.如何处理这些事件 请记住;然而,我并不是在写一个遵循TCP的程序。我正在编写一个程序,被动地监视TCP流的网络流量,并尝试将原始数据保存到磁盘,我不明白为什么会出现上述状态,以及如何编写程序来处理它当TCP序列号到达时发生了什么,而不是预期的情况?,c,tcp,libpcap,packet-capture,C,Tcp,Libpcap,Packet Capture,我正在编写一个程序,它使用libpcap捕获数据包并重新组装TCP流。我的程序只是监控流量,因此我无法控制数据包的接收和传输。我的程序忽略所有非TCP/IP通信 我根据ISN计算下一个预期的序列号,然后是连续的序列号。我将其设置为每个TCP连接都由一个元组唯一标识,元组由源IP、源端口、目标IP和目标端口组成。一切都进展顺利,直到我收到一个序列号不同于我预期的数据包。我上传了屏幕截图,以帮助说明我所描述的内容 我的问题是: 1.“丢失”数据包中的数据在哪里? 2.序列号订单如何从这种情况中恢复?
谢谢根据当前TCP连接的窗口大小,如果新数据包适合接收窗口(多数据包缓冲区),它将被输入接收队列(并重新排序以便有序地发送到协议客户端) 如果序列号大于当前窗口的最大值,则数据包将被拒绝 另请参见中的第4.4.2节(输入数据包处理程序) “丢失”数据包中的数据在哪里
- 它被人扔了
- 它在路上(走错了弯路),稍后会到达
- 接收器可以扔掉顺序错误的片段,也可以将它们排在重新组装队列中
- 接收器可以等待丢失的段到达,也可以立即发送之前已发送的ACK。重复确认将提醒对等方出现问题(查找)
- 当发送确认时,TCP可以通知对等方某些段已成功到达-它们只是顺序错误()
你不能做任何事情,因为你只是在监视。如果您还捕获了响应流量,您可能会更深入地了解实际情况。@TySmith您可能希望不接受它,等待可能出现更好的消息。有公认答案的问题往往会让潜在的回答者望而却步。