我是 CN 的新手,有些东西我还无法掌握。为什么传输层不让网络层完成所有的拆分?细分如何使事情变得可靠?另外,我知道这个论坛上已经发布了一个类似的问题,但我不明白其中一个答案中解释的 64K IP 数据包大小限制。
为什么传输层要将数据分解成数据包?这如何使事情变得可靠?网络层不是在做同样的事情吗?
网络工程
ip
通讯协议
联网
2021-07-07 00:50:38
2个回答
(至少)两个原因:
传输层 (TCP) 必须跟踪段,以便在需要时重新传输它们。如果让网络层段,一个段丢了,传输怎么知道?
理论上,发送方知道路径的 MSS。通过在开始时调整大小,它消除了下游路由器分段的需要,以及接收器必须重新组装它的需要。
一些传输层协议对数据进行分段和/或提供可靠的传输,例如 TCP - 其他协议则没有,例如 UDP。
分段不会使传输可靠。源使用跟踪缓冲区(发送窗口)并不断重新发送在合理时间范围内尚未确认的段。
分段和可靠性是为上层(应用程序)提供的服务,因此不需要跟踪数据或计算最佳数据包大小。
IP 数据包的 65,535 字节限制只是由 IP 报头大小字段为 16 位大小引起的:2 16 = 65,536。这和上面的完全没有关系。由于底层数据链路层协议在数据单元(帧)大小方面受到更多限制,因此 IP 可以对超过最大可能数据包大小 (MTU) 的数据包进行分段。这与 TCP 的分段无关,但有时可能需要结合使用两者。
例如,服务器使用 1500 字节的以太网标准 MTU 向 Internet 发送已经分段的 TCP 数据,但 Internet 路由器必须在其 WAN 链接上使用 PPPoE。这将 MTU 减少了 8 个字节,需要路由器进行分段。
当然,这对于带宽使用和处理开销来说是低效的,因此发送方应使用路径 MTU 发现(PMTUD) 将其最大 TCP 段大小 (MSS) 调整为最佳值(这已成为 IPv6 的强制要求)。另一种方法是使用MSS 钳位,有选择地减少路由器上通过的 MSS 值。