【问题标题】:How to work out length of an IP Packet如何计算 IP 数据包的长度
【发布时间】:2015-12-07 07:48:35
【问题描述】:

一个没有选项的 IP 数据包,分成 3 个片段。

片段 1 - 偏移量 0 片段 2 - 偏移量 358 片段 3 - 偏移量 510,总长度 120

如何计算原始 IP 数据包的长度?

【问题讨论】:

  • 没有 IP 数据报这样的东西。你的意思是UDP数据报还是IP数据包?什么是“总长度”的长度?
  • @EJP 我已经更新了问题
  • @EJP RFC 将 IP 数据包称为“互联网数据报”。
  • @RonMaupin 确实,但不是“IP 数据报”,而且这个问题很模糊。
  • @EJP,第 2 层帧是数据报,第 3 层数据包或第 4 层段也是如此。 IP 数据包是第 3 层数据报。数据报只是特定层的基本单元。

标签: networking ip datagram


【解决方案1】:

我认为您的片段偏移量有一些无效数字,因为 IP 必须在 64 位边界上分段。

如有疑问,请参阅 RFC (RFC 791, INTERNET PROTOCOL):

碎片化

互联网数据报的分段是必要的 起源于允许大数据包大小的本地网络,并且必须 遍历将数据包限制为较小尺寸的本地网络以达到 它的目的地。

可以将 Internet 数据报标记为“不分段”。任何互联网 如此标记的数据报不会在任何 情况。如果 Internet 数据报标记为不分段,则不能 在不将其分割的情况下交付到目的地,它将被 而是丢弃。

跨本地网络的分段、传输和重组 互联网协议模块不可见的称为 内网碎片化,可以使用[6]。

互联网碎片和重组程序需要能够 将数据报分解成几乎任意数量的片段 以后可以重新组装。片段的接收者使用 标识字段,以确保不同数据报的片段 不混合。片段偏移字段告诉接收器 片段在原始数据报中的位置。片段 偏移量和长度确定原始数据报的部分 被这个片段覆盖。 more-fragments 标志表示(通过 被重置)最后一个片段。这些字段提供了足够的 重组数据报的信息。

标识字段用于区分一个的片段 来自另一个人的数据报。始发协议模块 互联网数据报将标识字段设置为一个值 对于该源-目标对和协议必须是唯一的 数据报在 Internet 系统中处于活动状态的时间。这 一个完整数据报的始发协议模块设置 more-fragments 标志为零,片段偏移量为零。

为了分割一个长的互联网数据报,一个互联网协议模块 (例如,在网关中),创建两个新的互联网数据报和 从 long 复制 Internet 标头字段的内容 数据报到两个新的互联网标头。长的数据 数据报在 8 个八位字节(64 位)边界上分为两部分 (第二部分可能不是 8 个八位字节的整数倍, 但第一个必须是)。调用 8 字节块的数量 第一部分 NFB(表示片段块数)。首先 部分数据被放置在第一个新的互联网数据报中, 并且总长度字段设置为第一个的长度 数据报。 more-fragments 标志设置为 1。第二 部分数据被放置在第二个新的互联网数据报中, 并且总长度字段设置为第二个的长度 数据报。 more-fragments 标志的值与 长数据报。第二个新互联网的分片偏移量字段 数据报设置为长数据报中该字段的值加上 NFB。

这个过程可以推广到 n 路拆分,而不是 描述的双向拆分。

为了组装互联网数据报的片段,互联网 协议模块(例如在目标主机)结合 四个字段都具有相同值的 Internet 数据报: 标识、来源、目的地和协议。组合 是通过将每个片段的数据部分放在相对的 由该片段中的片段偏移量指示的位置 互联网标题。第一个片段将具有片段偏移量 零,最后一个片段将重置更多片段标志 归零。

【讨论】:

    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    相关资源
    最近更新 更多