抛个问题
在网络传输中,通常会看到MSS,MTU这样的设置,为什么数据需要分段传输?
假如nodeA要给nodeB发送1MB的数据,为什么TCP不直接传送1MB的数据,而是要分段传送,再组装
为什么需要分段传送
- 公平使用网络
组成网络的各种硬件是一种基础设施,为上层应用提供数据传输服务。为了公平,每个数据传输需求应该被被分成合适的大小,再传输。类似cpu时间片 - 硬件处理能力
- 网络吞吐量,这个领域有许多研究性的paper讨论。行文时暂未深入到这个层面,暂时作罢。
mtu值的影响
- 更大的分片,传输的次数变少,但是发生拥堵的情况相对会更加严重
- 基础设施的数据处理能力
分段不佳导致的fragmentation(path mtu)
由于发送方定义的mtu大于网络路径上某个节点(比如路由器)的mtu,会导致ip fragmentation。这个会引发:
- 节点工作负载增加(fragmentation)
- 单个碎片出错,导致整个重传,又重新fragmentaion
如何避免呢?有个path mtu discovery 的策略。本质上就是一种“投石问路”的办法,发送icmp报文去“问”清楚mtu