如果我没记错的话,在源节点,网络层将数据报传递到链路层。然后链路层将数据报分解为帧,并将整个帧从一个网络元素移动到相邻的网络元素。
我想知道在目标节点,将帧重新组装成数据报是在链路层还是网络层进行?链路层会将帧还是数据报传递给网络层?
一般来说在源节点处,当数据从较高层传递到较低层时,较大的数据单元是否会在较低层分解为较小的数据单元。
在目标节点,当从较低层传递到较高层时,较小的数据单元重新组装成较大的数据单元是在较低层还是较高层进行?
感谢致敬!
答案1
在使用 TCP/IP 的系统中,帧在 IP 层重新组装成数据报。这是因为 TCP/IP 堆栈在 IP 层进行分段。IP 层要求其下层有一个可以承载帧的层,但它不要求帧足够大以承载整个数据报。因此 IP 层同时执行分段和重新组装。
答案2
网络层需要输入源/目标 IP 地址和源/目标端口,即它必须是 IP 数据包标准格式的一系列字节。因此,在网络层获取以太网报头和报尾之前,需要将其剥离,否则当网络层查看其所需数据的某些偏移量(例如源 IP 地址等)时,它会获取错误的数据。
IP 数据包中的字段没有“标签”,它们通过数据包中的位置进行标识。因此,下层需要为网络层提供符合 IP 规范的数据流,而不是符合以太网规范的数据流。
从概念上讲,这是应该/会发生的情况,但只有检查 TCP/IP 实现的源代码或反汇编才能为您提供准确的答案,或者确切了解软件中“劳动”的划分方式。如果您拥有的嵌入式设备只能运行一种可能的 NIC 硬件设备,那么您可能可以将网络、数据链路和物理层紧密耦合在一起,我相信专用硬件路由器等可以做到这一点。如果您拥有支持各种硬件的通用操作系统,那么您就无法做到这一点。
就传输而言,情况也一样。NIC 卡需要源 MAC 和目标 MAC,它们出现在以太网帧中的特定位置。因此,让网络层直接将数据包发送到 NIC 会失败,因为不会将包含源/目标 MAC 的以太网报头附加到该数据包上。