逐流和逐包
无论是路由负载分担、隧道负载分担,还是Trunk接口负载分担,都可按逐流或逐包方式进行。
逐流负载分担
逐流负载分担是指按照一定的规则,如根据五元组(源IP地址、目的IP地址、协议号、源端口号、目的端口号),将报文分成不同的流,同一条流的报文将在同一条链路上发送。
如图8-4,假设R1上有6个报文要通过R1和R2之间的LinkA和LinkB进行负载分担,其发送顺序为P1、P2、P3、P4、P5、P6,其中P2、P3和P5去往R3,P1、P4、P6去往R4。假设负载分担采用逐流方式,则去往R3的报文都通过LinkA发送,去往R4的报文都通过LinkB发送;或者去往R3的报文都通过LinkB发送,去往R4的报文都通过LinkA发送。
对称负载分担
对称负载分担是一种特殊的逐流负载分担。
对称负载分担是指根据报文IP地址区分数据流,使同一条流的数据流从相连两台设备的相同序号成员链路通过。
如图8-5,对于同一条数据流,由路由器R1通过Link A链路向路由器R2转发,在路由器R2设备上通过交换源和目的得到相同的链路索引。其反向流量(由路由器R2转发至路由器R1)Hash到同一条Link A链路上。
对称负载分担能保证包的顺序,但不能保证带宽利用率。
逐流和逐包的比较
逐包比逐流的负载均衡程度好。逐流的均衡程度取决于负载分担的规则和业务流量特征。
逐包的缺点是可能导致报文乱序。在逐包场景下,以下因素的影响会导致报文乱序:
- 链路质量差导致报文乱序。当链路质量较差时,会存在不同延时,链路丢包、错包,因此导致报文到达对端后乱序;
- 数据包大小不均,被混合发送时,在链路传输速率一定的情况下,长度较小的数据包即使后于长度较大的数据包被送到链路上,也可能会先到达对端。因此采用逐包负载分担时,需要考虑现网业务是否容忍乱序,所在链路是否有保序的功能。
由于逐包方式可能导致报文乱序,对报文顺序非常敏感的语音、视频等关键业务不建议使用逐包方式。