0

我被问到一个与数据报有关的有趣问题,以及它们是如何分段的,即用什么来重新组装原始数据报。

  • 我知道每个片段中的 ID 号都是相同的,以表明它们都属于一个更大的数据报。
  • 我知道将 FragFlag 设置为 1 意味着途中有更多片段,但是 FragFlag 为 0 的片段意味着它是最终片段。

我还缺少一件事,我认为还必须使用序列号,以便片段知道它们必须放回哪个顺序。但是,如果这是真的,那让我有点困惑,因为数据报使用 UDP,这是假定的不可靠,最终可能会在传输过程中丢失数据包或以错误的顺序发送它们。

相比之下,TCP 被认为是可靠的,并且是保证数据包以正确顺序发送的最佳方式。因为我们处理的是数据报而不是数据包,所以这里的工作方式不同吗?或者只是为了使 UDP 更“可靠”而创建的序列号。

谢谢你的帮助。

4

2 回答 2

0

这里的重要区别在于 TCP 定义了发送方和接收方之间的流控制,因此双方总是知道通信的状态是什么,例如成功/不成功/正在进行/...。UDP 更底层:发送方只是发送一些数据,并不关心是否接收到它(当然你可以在 SW 中使用 UDP 实现一些更高级别的协议)。

于 2013-04-28T17:16:07.350 回答
0

但是,如果这是真的,那让我有点困惑,因为数据报使用的 UDP 被认为是不可靠的,最终可能会在传输过程中丢失数据包或以错误的顺序发送它们。

为什么会让人困惑?如果所有片段都到达,数据报将被重新组装(在 IP 层)并交付给应用程序。如果他们不这样做,那就倒霉了。

于 2013-04-30T00:28:46.037 回答