在 TCP/IP 堆栈中,数据包分割和重组发生在什么地方?

网络工程 ip 通讯协议 互联网 第4层 传输协议
2021-07-19 06:34:12

我的理解是

1/ TCP/IP 堆栈中的传输层为正在发送的数据创建数据包,并且

2/ 数据包重组过程发生在接收端的 Internet 层,而不是其传输层。

请确认这些是否准确。

编辑:我的教科书声称显然

  1. TCP 创建一个或多个数据包并将第一个数据包发送到 IP...

并说 Internet 层只是将其作为带有 IP 地址的数据报传递,并且没有提及任何有关重组的内容,所以我只是好奇。

2个回答

数据包是第 3 层(网络层)数据报。IPv4 内置了数据包的分段和重组功能。

许多人感到困惑,因为 TCP(第 4 层,传输层)将数据流分段,保证各个段的交付,并将它们重新组合成应用程序的数据流。这是一样的数据包分段和重组。

数据包的分段和重组可能是处理器密集型的,并且会使用执行高速数据包交换(路由)所需的资源。因此,分段由 IPv4 执行,但 IPv6 取消了数据包分段。相反,如果需要的话,IPv6 要求源主机在路径上的任何地方执行分段。

RFC 791,互联网协议

如有必要,互联网协议还提供长数据报的分段和重组,以便通过“小数据包”网络进行传输。

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

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

碎片化

当 Internet 数据报源自允许大数据包大小的本地网络并且必须遍历将数据包限制为较小大小才能到达其目的地的本地网络时,需要对 Internet 数据报进行分段。

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

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

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

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

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

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

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

此外,分段发生在路由器中,但重组由目标主机执行

基本的 Internet 服务是面向数据报的,并在网关处提供数据报的分段,在目标主机的目标 Internet 协议模块中进行重组。当然,也允许在网络内或通过网络网关之间的私有协议对数据报进行分段和重组,因为这对互联网协议和更高级别的协议是透明的。这种透明类型的分片和重组被称为“网络相关”(或内网)分片,这里不再进一步讨论。

1) (IP) 数据包由网络层创建。虽然 TCP 有自己的传输大小 MSS,它应该对应于路径 MTU,但它可以发送更大的段,这些段必须在 Internet 层上分段(甚至可能重新组装)。(路径MTU不容易发现,MSS可能太大。)

2)数据包重组发生在网络层。传输层不处理数据包。