【问题标题】:Sequence Numbers in UDPUDP中的序列号
【发布时间】:2013-04-22 04:23:11
【问题描述】:

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

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

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

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

感谢您的帮助。

【问题讨论】:

    标签: tcp udp datagram fragmentation defragmentation


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-05-18
        • 2021-09-04
        • 2020-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-16
        • 1970-01-01
        • 2014-10-08
        相关资源
        最近更新 更多