在谷歌中找不到明确的答案。当队列被填满时,两者都会丢弃数据包。那么为什么使用两个术语呢?如果shaper包含scheduler,那么shaper除了drop还有什么作用呢?
或者,如果整形器只是丢弃数据包而调度程序只是决定如何处理这些丢弃的数据包,那么为什么https://en.wikipedia.org/wiki/Network_scheduler说“调度程序必须选择丢弃哪些数据包”?
在谷歌中找不到明确的答案。当队列被填满时,两者都会丢弃数据包。那么为什么使用两个术语呢?如果shaper包含scheduler,那么shaper除了drop还有什么作用呢?
或者,如果整形器只是丢弃数据包而调度程序只是决定如何处理这些丢弃的数据包,那么为什么https://en.wikipedia.org/wiki/Network_scheduler说“调度程序必须选择丢弃哪些数据包”?
权威来源是RFC7640,您将在其中找到以下定义:
流量调度:通过将数据包定向到各种类型的队列来提供网络设备内的流量分类,并应用调度算法来分配数据包的转发顺序。
流量整形:通过主动缓冲和平滑输出速率来控制流量,以尝试使突发流量适应配置的限制。
因此,整形是关于控制使用的带宽,而调度是关于优先考虑某种流量而不是其他流量。
但是请注意,我从未见过声称“符合 RFC7640”的设备,您很可能会发现不严格遵守这些定义的实现。在这个领域经常有一些混搭。
实际上这个RFC状态是:
本文档不是 Internet Standards Track 规范;它是为了信息目的而发布的。
因此没有人有任何义务遵守它。
流量整形是一个通用的过程,调度器可能是其中的一个特定部分。除了“只是”丢弃多余的流量(艺术是选择要丢弃的流量),整形还可以重新排序数据包以降低敏感协议或数据包的延迟(例如优先考虑 VoIP 或非对称链路上的 TCP ACK)。
通常,多个队列根据其优先级用于数据包。调度器以定义的权重运行这些队列(例如,三个队列以 4:2:1 调度)并转发或丢弃数据包。