【问题标题】:Fragmentation of TCP packet at network layer网络层 TCP 数据包的分片
【发布时间】:2017-04-19 02:32:29
【问题描述】:

假设一条 TCP 消息包含 900 个字节的数据和 20 个 TCP 标头的字节数。现在,如果我们有一个可以支持最大帧大小为 512 字节的链路,我们是否会在传输层有 2 个大小足够小的 TCP 数据包,以便它们可以通过该链路发送。还是会在数据链路层进一步碎片化?

以下哪种情况会发生:

Transport layer:    h1   data
Network layer:      h2 h1 data
data link layer:  frame 1 -  h3 h2 h1 data-part1
                  frame 2 -  h3 h2 h1 data-part2

data link layer:  frame 1 -  h3 h2 h1 data-part1
                  frame 2 -  h3 data-part2

【问题讨论】:

    标签: networking tcp fragmentation


    【解决方案1】:

    分片是 IPv4 DNA 的一部分,它发生在 IPv4 的第 3 层。 IPv6 已经消除了分片,由发送主机决定只发送正确大小的数据包(预先对数据进行分片)。

    路由器在第 3 层(网络层)运行,并且在 IPv4 的路由器中发生分段。如果 IPv6 数据包对于下一跳来说太大,它们会被路由器毫不客气地丢弃,并向源主机发送 ICMPv6 消息。

    RFC 791, INTERNET PROTOCOL:

    互联网协议还提供分段和重组 长数据报,如有必要,通过“小 分组”网络。

    互联网协议实现了两个基本功能:寻址和 碎片化。

    在从一个互联网模块到另一个互联网模块的消息路由中, 数据报可能需要遍历最大数据包大小为 小于数据报的大小。为了克服这个困难,一个 互联网协议中提供了分片机制。

    分片过程说明:

    碎片化

    互联网数据报在产生时需要分段 在允许大数据包大小的本地网络中,并且必须遍历 本地网络,将数据包限制为较小的大小以到达其 目的地。

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

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

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

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

    为了分割一个长的互联网数据报,一个互联网协议模块(对于 例如,在网关中),创建两个新的互联网数据报和副本 将长数据报中的 Internet 标头字段的内容放入 两个新的互联网标题。长数据报的数据被划分 分成 8 个八位字节(64 位)边界上的两个部分(第二部分 可能不是 8 个八位字节的整数倍,但第一个必须是)。 在第一部分 NFB 中调用 8 个八位字节块的数量(对于 Number 片段块)。数据的第一部分放在 第一个新的互联网数据报,总长度字段设置为 第一个数据报的长度。 more-fragments 标志设置为 1。 第二部分数据放在第二个新互联网 数据报,总长度字段设置为 第二个数据报。 more-fragments 标志的值与 长数据报。第二个新的片段偏移量字段 互联网数据报设置为该字段的值在长 数据报加NFB。

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-19
      • 2016-02-12
      • 2017-03-05
      • 1970-01-01
      • 2014-10-27
      • 2023-03-24
      • 1970-01-01
      • 2012-07-23
      相关资源
      最近更新 更多