为什么传输层要做数据分块。如果网络层有碎片

网络工程 ipv4 通讯协议 第3层 第4层
2021-07-14 23:59:59

我只是好奇地想知道有关 L4、L3 数据块、IP 分片的问题:

  1. 数据分块发生在第 4 层(传输、TCP),并且
  2. 三层分片(网络、ipv4)

根据维基百科,数据块发生在 L4:“传输控制协议接受来自数据流的数据,将其分成块,并添加创建 TCP 段的 TCP 标头”来源:https : //en.wikipedia.org/wiki/传输控制协议#TCP_segment_structure

此外,第 3 层(网络)发生了碎片。现在这里有两个问题-

  1. 我相信 L4 发生数据分块是因为超出了 MTU 大小限制,那么为什么还有另一个称为 Fragmentation 的进程?

  2. 如果数据分块发生与否,每个 TCP 段都会有一个序列号.. 如何将一个 TCP 段与 L3 中的每个数据包片段相关联,以便在接收端成功重组?

请看图片(第二次查询)- 在此处输入图片说明

任何帮助是极大的赞赏..

2个回答

传输层协议需要确保数据可以正确打包。它缺乏对此的支持(如 UDP),应用层需要处理这一点。

网络层中的 IP 分段是一种主要用于在路径内的 MTU 收缩时启用转发的机制。由于其局限性,它不打算作为主要的大小调整机制:

  • IP分片仅支持64KB数据包,各种传输层协议支持任意流长
  • 当数据包丢失时,分段非常低效——网络层 (IP) 甚至不会尝试恢复丢失的片段甚至数据包,并且由于当单个片段丢失时整个数据包不会通过堆栈,传输-层协议或应用程序将需要重新传输整个数据包
  • 除了简单的数据分块,传输层还可以做很多事情,比如子寻址(端口)、流控制、拥塞控制、错误恢复、数据包/段重新排序

在数据通过堆栈向上传递到传输层协议之前,碎片数据包的重组发生在网络层。

并非所有传输层协议都支持数据分段(例如 UDP 不支持),因此对于 MTU 而言太大的数据报需要分段或使用较小的数据块发送。

最初,分段是处理大型网络中不同 MTU 大小的策略,但由于增加了路由器负载并且通常效率低下,这在很大程度上已被路径 MTU 发现所取代。对于 IPv6,路由器根本不支持分段,它们会丢弃过大的数据包(尽管发送主机可能会分段)。

TCP 分段过程基于 MSS(最大分段大小,即基于 MTU(通常)并且通信双方可以不同)。它是分段(此过程的正确名称),而不是碎片。“如果数据分块发生与否,每个 TCP 段都会有一个序列号”是不对的句子 - 如果您看到序列号,那就是分段过程。它在您开始通过 TCP 会话发送数据的任何时候开始,并且无论应用程序使用数据部分多于 MSS 与否都无关紧要 - 您可以看到序列,它是 TCP 段。

MSS 现在基于 MTU 只是为了避免 IP 分片。所以想法是将一个 TCP 段放入一个 IP 数据包。

IP分片根本不基于TCP,它基于接口的MTU,可以用于TCP/UDP/ICMP任何。这是OSI模型的另一条路径。基于 IP 标志(更多片段、偏移值)重新创建完整 IP 数据包。

您可以详细阅读很多相关内容,例如,此处 https://www.cisco.com/c/en/us/support/docs/ip/generic-routing-encapsulation-gre/25885-pmtud-ipfrag。 html