内容摘录自极客时间课程《趣谈网络协议》,如有侵权,请及时联系删除。
目录
云中的网络QoS
QoS(Quality of service):In the field of computer networking and other packet-switched telecommunication networks, quality of service refers to traffic prioritization and resource reservation control mechanisms rather than the achieved service quality.
对于控制一台机器的网络的QoS,分两个方向,一个是入方向,一个是出方向。其实我们能控制的只有出方向,通过Shaping,将出的流量控制成自己想要的模样。而进入的方向是无法控制的,只能通过Policy将包丢弃。
控制QoS的方式
Linux中,可以通过TC模块(Traffic control)控制网络的QoS,主要就是通过队列的方式。
无类别排队规则(Classless Queuing Disciplines)
不需要对接收到的网络包进行分类。
pfifo_fast
pfifo_fast 分为三个fifo队列,称为三个 Band。根据网络包里面TOS(type of service),看这个包到底应该进入哪个队列。使用tc qdisc show dev eth0命令可以查询该priomap的值。不同的 TOS 对应的不同的队列,其中 Band 0 优先级最高,发送完毕后才轮到 Band 1 发送,最后才是 Band 2。
随机公平队列(Stochastic Fair Queuing)
建立多个FIFO队列,TCP Session 会计算 hash 值,通过 hash 值分配到某个队列。在队列的另一端,网络包会通过轮询策略从各个队列中取出发送。这样不会有一个 Session 占据所有的流量。如果两个 Session 的 hash 是一样的,会共享一个队列,也有可能互相影响。hash 函数会经常改变,从而 session 不会总是相互影响。
令牌桶规则(TBF,Token Bucket Filter)
所有的网络包排成队列进行发送,但不是到了队头就能发送,而是需要拿到令牌才能发送。令牌根据设定的速度生成,所以即便队列很长,也是按照一定的速度进行发送的。
当没有包在队列中的时候,令牌还是以既定的速度生成,但是不是无限累积的,而是放满了桶为止。设置桶的大小为了避免下面的情况:当长时间没有网络包发送的时候,积累了大量的令牌,突然来了大量的网络包,每个都能得到令牌,造成瞬间流量大增。
基于类别的排队规则(Classful Queuing Disciplines)
分层令牌桶规则(HTB, Hierarchical Token Bucket)
Openvswitch控制QoS
网络拓扑图:
对应的QoS规则