【问题标题】:How to sort TCP fragments如何对 TCP 片段进行排序
【发布时间】:2019-09-02 23:20:52
【问题描述】:

我有 10 个未排序的 TCP 段 (A-J),我想暂时对它们进行排序。 我从每个人那里得到的信息:

  • A:{序列号:43 4a 6f bd,确认号:66 6e b6 f4, 标志:ACK}。
  • B:{序列号:43 4a 6e 71,确认号:66 6e b2 53, 标志:ACK}。
  • C:{序列号:43 4a 6e 70,确认号:00 00 00 00, 标志:SYN}。
  • D:{序列号:66 6e b6 f3,确认号:43 4a 6f bd, 标志:ACK+FIN}。
  • E:{序列号:66 6e b2 52,确认号:43 4a 6e 71, 标志:ACK+SYN}。
  • F:{序列号:66 6e b2 53,确认号:43 4a 6f bd, 标志:ACK+PSH}。
  • G:{序列号:66 6e b2 53,确认号:43 4a 6f bd, 标志:ACK}。
  • H:{序列号:66 6e b3 a4,确认号:43 4a 6f bd, 标志:ACK+PSH}。
  • I:{序列号:43 4a 6e 71,确认号:66 6e b2 53, 标志:ACK+PSH}。
  • J:{序列号:43 4a 6f bd,确认号:66 6e b6 f3, 标志:ACK}。

据我所知,第一个应该是C,第二个应该是E,但我不知道如何安排其他段。

谢谢

【问题讨论】:

  • 当然是按序号排序。这就是它的用途。
  • @EJP 分片属于两台设备之间的通信,暂时需要排序,即先Device1发送segmentC,然后Device2回复segmentE,以此类推。
  • 按源 ip:port、目的 ip:port、序列号排序。我假设你能够区分每个方向的流动。
  • 我知道@EJP,但是比如F和G的序号是一样的,这个我就不明白了。
  • 如果这是您的问题,为什么它不出现在您的问题中?显然 F 不包含任何数据,因此它没有为下一个片段增加序列号。

标签: sorting tcp segment


【解决方案1】:

为了更准确地排序,您需要知道每个数据包的有效负载大小(以免错过与前一个片段重叠的片段的顺序)。

但是,如果您确定没有包含一些重叠数据的段,您可以通过比较它们的序列和确认号(并考虑控制标志)来对数据包进行排序。

最好先对每个方向的数据包进行独立排序:

请求方:CBIJA

响应方:EGFHD

FG 之间进行选择时,我们认为F 的PSH 标志已设置;所以它包含数据并推进序列号。因此,它应该在G 之后,因为G 似乎不包含任何数据。

现在我们可以通过比较每一方的第一个数据包来合并:

  1. C: SYN

  2. E: SYN + ACK

  3. B: ACK E

  4. I:G的确认号大于I的序列号。

  5. G:J的确认号大于G的序列号。

  6. F:J的确认号大于F的序列号。

  7. H:J的确认号大于H的序列号。

  8. J: JD 之前,因为它不 ACK D。 (D 的 FIN 控制标志被设置;所以它推进了序号。)

  9. D:A的确认号大于D的序列号。

  10. A

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2013-04-20
    • 2018-06-25
    • 1970-01-01
    相关资源
    最近更新 更多