繁体   English   中英

如何计算IP数据包的长度

[英]How to work out length of an IP Packet

一个无选项的IP数据包,分为3个片段。

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

如何计算原始IP数据包有多长时间?

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

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

碎片化

当Internet数据报起源于允许大数据包大小的本地网络并且必须穿越将数据包限制为较小大小的本地网络到达目的地时,必须进行分段。

互联网数据报可以标记为“不要分段”。 如此标记的任何Internet数据报在任何情况下都不得进行Internet分段。 如果标记为“不分段”的互联网数据报无法在不分段的情况下传递到其目的地,则应将其丢弃。

Internet协议模块不可见的跨本地网络的分段,传输和重组称为内部网分段,可以使用[6]。

Internet分段和重组过程需要能够将数据报分解为几乎任意数量的片段,以便稍后进行重组。 片段的接收者使用标识字段来确保不同数据报的片段不会混合。 片段偏移字段告诉接收者片段在原始数据报中的位置。 片段的偏移量和长度确定了此片段覆盖的原始数据报的部分。 more-fragments标志指示(通过重置)最后一个片段。 这些字段提供了足够的信息来重组数据报。

标识字段用于区分一个数据报的片段和另一个数据报的片段。 Internet数据报的始发协议模块将标识字段设置为对于该源-目的地对和协议必须唯一的值,以确保该数据报在Internet系统中处于活动状态。 完整数据报的始发协议模块将more-fragments标志设置为零,并将片段偏移设置为零。

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

可以将此过程推广到n向拆分,而不是所描述的双向拆分。

为了组装Internet数据报的片段,Internet协议模块(例如,在目标主机上)将Internet数据报的四个字段(标识,源,目的地和协议)的值都相同。 通过将每个片段的数据部分放置在该片段的Internet标头中的片段偏移量指示的相对位置来完成组合。 第一个片段的片段偏移量将为零,而最后一个片段的more-fragments标志将重置为零。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM