来自上层网络层的数据报是否按 1:1 转换为下层网络?

网络工程 以太网 通讯协议 层2 第3层 第4层
2021-07-13 07:19:13

我知道通过添加元数据将来自上层的数据报转换为下层的数据报,但我似乎无法在任何地方找到这些信息。以下哪一项是正确的?

  1. 单个 TCP 段总是通过添加 IP 报头转换为单个 IP 数据包,然后通过添加以太网报头(和页脚)将其转换为单个以太网帧。换句话说,将上层的数据报作为一个整体转换为下层的数据报的有效载荷
  2. 网络软件将上层的所有数据报分组为一个二进制包(例如:3 个大小为 1000、800 和 1200 字节的 IP 数据包到一个 3000 字节的包),然后将该包剪切到任何感觉最好的地方,以制作有效载荷较低层的数据报(例如:到 2 个以太网帧,每个有效载荷为 1500 字节)。接收设备始终可以从 2 个以太网帧中获取 3 个原始 IP 数据包。
2个回答
  1. 单个 TCP 段总是通过添加 IP 报头转换为单个 IP 数据包,然后通过添加以太网报头(和页脚)将其转换为单个以太网帧。换句话说,将上层的数据报作为一个整体转换为下层的数据报的有效载荷

那要看。例如,TCP 从应用层协议(例如 HTTP)接收数据流,然后将其分段。这是一个较低的协议砍掉一个较高的协议。TCP本身是用MSS来决定segment size的,应该适合MTU,但是我见过有人做傻事,比如把MSS设置得比MTU大很多(以为会提高速度,结果适得其反) . 这会强制 IP 在发送之前创建片段。此外,如果 MTU 沿路径收缩,则会导致 IPv4 分段(IPv6 没有路径分段)。IP 分片和重组是资源昂贵的。我们有 PMTUD 来发现路径中的最小 MTU,这样 MTU 以及扩展的 MSS 可以在发送之前自动设置。

顺便说一下,简单地假设以太网已经被 Wi-Fi 取代为 LAN 之王是错误的。另外,你真的不知道沿途会遇到哪些二层协议,例如,许多DSL连接使用PPPoA(PPP over ATM)而不是以太网。

  1. 网络软件将上层的所有数据报分组为一个二进制包(例如:3 个大小为 1000、800 和 1200 字节的 IP 数据包到一个 3000 字节的包),然后将该包剪切到任何感觉最好的地方,以制作有效载荷较低层的数据报(例如:到 2 个以太网帧,每个有效载荷为 1500 字节)。接收设备始终可以从 2 个以太网帧中获取 3 个原始 IP 数据包。

下层网络协议不捆绑上层网络协议的数据报。TCP,因为它是一个流协议,可以捆绑应用层数据报并将数据报切割成适当的 TCP 段。

没有转换。上层数据单元被下层数据单元封装数据单元本身没有改变(除了像 NAPT 这样的特殊转换方案)。它作为一个整体(服务数据单元)嵌入到下一层的数据单元(协议数据单元)中。

例如,用户数据被封装在一个UDP数据报中(UDP头在前面),它被封装在一个IP包中(IP头在前面)。IP 数据包由以太网帧封装(前置以太网帧头,附加 FCS)。以太网帧由物理层信令封装,有时称为以太网数据包(前置前导,附加 IPG)。(实际上,在这个阶段有一些转换,因为数据经常需要行编码。)

单个 TCP 段总是通过添加 IP 报头转换为单个 IP 数据包,然后通过添加以太网报头(和页脚)将其转换为单个以太网帧。

是的,在最简单的情况下。生成的 IP 数据包可能太大而无法放入单个以太网帧,然后需要进行分段(以防源主机不知道沿路径的 MTU 限制)。

网络软件将上层的所有数据报分组为一个二进制包(例如:3 个大小为 1000、800 和 1200 字节的 IP 数据包到一个 3000 字节的包),然后将该包剪切到任何感觉最好的地方,以制作有效载荷较低层的数据报(例如:到 2 个以太网帧,每个有效载荷为 1500 字节)。

对于 TCP,TCP/IP 堆栈决定如何将用户数据划分为 TCP 段(和重新组合)。UDP 数据报被封装并按原样发送(除了可能的分段)。通常,来自不同套接字的数据不能捆绑在一起。