无法理解 wireshark 中的数据包

Trouble understanding packets in wireshark

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

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

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

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

假设: 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 发送 ACK # 1100(初始序列号 100 加上附加的 1000 字节有效负载)向 HostA 确认接收到发送方在前一个数据包中发送的所有 1000 字节数据。 HostB 自己的序列号 200 在此数据传输中不起任何作用,只是向 HostA 指示 HostB 没有向 HostA 反向发送任何数据。

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

希望对您有所帮助?

有关更多信息和详细信息,请参阅 RFC 793