我对传输层的段大小限制有疑问。
既然数据必须到达较低层,为什么还要将其分片呢?最终,数据在物理层以位为单位发送。
既然我们有另一层来处理它,为什么还要担心传输层的段长度呢?
答案1
数据链路层的一个属性是最大传输单元 (MTU)。
例如,传统以太网帧有效载荷的最大长度为1500字节。
这里有一个最大长度,因为以太网和任何其他网络技术都是共享介质,因此需要存在某种限制,以允许多个节点有机会使用该介质。否则,一台主机可能会通过连续传输垄断介质,或者介质可能会因为所有主机为了传输而不断互相干扰(导致冲突)而陷入僵局。请记住,IP 网络的一个总体原则是,在堆栈中越往下(朝向第 1 层),它就应该越“愚蠢”——因为“愚蠢”是可扩展的;智能在堆栈中被推高(与 POTS 网络相反)。
确实,这个限制越高,“协议开销”就越少,数据传输就越快——这就是千兆以太网支持 9000 字节“巨型帧”的原因。
因此,如果 TCP 连接的最大段大小 (MSS) 与底层 MTU 相协调,则 TCP 段将不会被较低层分割,从而提高性能。 路径 MTU 发现是 TCP 查找正确 MSS 的一种方法。如果 MTU 小于 MSS,则下层必须将数据包分割成适合 MTU 的内容。
分段会消耗资源并增加软件/设备的复杂性,而设备如果因过多分段数据包而超载,则可能会丢弃数据包,并导致速度变慢/超时。IPv6 甚至不支持分段,因此在这种情况下,如果数据包不符合 MTU,则整个数据包将被丢弃。