【问题标题】:Trouble understanding packets in wireshark无法理解wireshark中的数据包
【发布时间】:2017-10-14 04:36:36
【问题描述】:

下一个数据包的序列号是否得到ack nr加上长度?

下一个数据包的序列号是否得到seq nr加上前一个数据包的长度

数据包可以随机排列吗?如果是这样,为什么以及如何知道数据包丢失了?

【问题讨论】:

    标签: networking wireshark packets


    【解决方案1】:

    首先,有两组序列号和确认号对,对话双方各一组。序列号是发送者的当前编号,确认号是接收者对发送者的“下一个预期序列号”的想法。一般来说,它们是这样工作的……

    假设: HostA 的初始序列号是 100,HostB 的初始序列号是 200(这些数字是随机的,它们的起始值根本不重要,但它们是在 TCP 3 次握手期间建立的。)

    场景:HostA 向 HostB 发送 1000 字节的 TCP 负载:

    Seq #  Ack #  TCP Payload (bytes)  Next Seq #
    -----  -----  -------------------  ----------
    100    200                   1000        1100
    

    这里,假设 HostA 的初始序列号为 100,因为我们假设它正在发送 1000 字节的 TCP 有效负载,我们计算下一个预期的序列号为 100 + 1000 = 1100。这就是我们的 ACK # '正在从 HostB 中查找,这将向 HostA 指示 HostB 接收到所有 1000 字节的有效负载,并期望来自 HostA 的下一个 TCP 段的序列号为 1100。

    HostB 确认从 HostA 接收到上述 TCP 段:

    Seq #  Ack #  TCP Payload (bytes)  Next Seq #
    -----  -----  -------------------  ----------
    200    1100                     0         200
    

    这是 HostB 的一组序列号和确认号。请注意,该集合完全独立于 HostA 的集合。在这里,HostB 通过向 HostA 发送 1100 的 ACK #(初始序列号为 100 加上额外的 1000 字节有效负载),向 HostA 确认接收到发送方在前一个数据包中发送的所有 1000 字节数据。 HostB 自己的序列号 200 在此数据传输中没有任何作用,除了向 HostA 指示 HostB 没有反向发送回 HostA 的数据。

    如果 HostB 确实没有从 HostA 接收到该段,则 ACK HostB 最终将发送回 HostA 将携带只有 100 的 ACK #,因此 HostA 会知道 HostB 没有收到该段携带 1000 字节的有效载荷,因此应该重新传输它。

    希望对你有帮助?

    欲了解更多信息和更多详情,请参阅RFC 793

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 2017-07-12
      • 2017-02-09
      • 1970-01-01
      相关资源
      最近更新 更多