拥塞管理和拥塞避免

  1. 真正体现差分服务的技术是对不同标记的报文执行对应拥塞管理和拥塞避免技术

  2. 当网络中间歇性的出现拥塞,且关键报文要求被更优先地转发时,此时就需要进行拥塞管理。通过采用队列技术及不同的调度算法来发送队列中的报文流。

  3. 如果某些突发的、非关键的报文装满队列,而后续发往该队列的关键报文都被全部丢弃,那么拥塞管理也未起到理想的效果,此时就需要配合使用拥塞避免技术

  4. 拥塞现象的产生

    • 在流量汇聚的链路容易产生流量拥塞
    • 流量从高速链路往低速链路发送

    当接口硬件队列(始终是FIFO)装满报文,则认为产生拥塞。

    拥塞后设备启动软件队列,对不同标记的报文执行对应拥塞管理和拥塞避免技术

拥塞管理

  1. 根据报文所携带标记对应的LP值与队列索引号的对应关系表,来实现将不同报文送入不同队列

    • LP:本地优先级,优先级取值0-7,优先级映射实现从数据原始携带的QoS优先级到内部优先级或从内部优先级到QoS优先级的映射。

      • 对于进入设备的报文,设备将报文携带的优先级或者端口优先级映射为内部优先级,然后根据内部优先级与队列之间的映射关系确定报文进入的队列。
  2. 提供差分服务的核心就是拥塞发生时如何决定不同队列报文的转发次序,这就用到了队列的调度机制。常见的队列调度算法包括:EIEO,PO, WRR, WFQ, CBQ等

    • FIFO(先进先出)

      FIFO队列不对报文进行分类,当报文进入接口的速度大于出接口能发送的速度时FIFO在队列的出口让报文按进队的顺序出队,先进的报文将FIFO按报文到达接口的先后顺序让报文进入队列,同时,先出队,后进的报文将后出队。

      • 优点:实现机制简单且处理速度快。
      • 缺点:不能有差别地对待优先级不同的报文。
    • PQ(优先级):8队列,值越大越优先

      PQ调度机制:关键业务的报文放入较高优先级的队列,将非关键业务(如E-Mail)的报文放入较低优先级的队列,可以保证关键业务的报文被优先传送,非关键业务的报文在处理关键业务数据的空闲间隙被传送。

      如果高优先级队列中持续有报文等待被发送,那么后面较低优先级队列中的报文就迟迟不能得到发送,出现"饿死"现象。

      • 优点:对高优先级的报文提供了优先转发。
      • 缺点:低优先级队列可能出现"饿死"现象。
    • WRR(加权轮循)

      在RR调度的基础上演变而来,根据每个队列的权重来轮流调度各队列中的报文流。每个队列的权重代表一次发送的报文数量 实际上,RR调度相当于权值为1的WRR调度。

      • 优点:避免了PQ调度的"饿死"现象。
      • 缺点:基于报文个数来调度,容易出现包长尺寸不同的报文出现不平等调度;低时延业务得不到及时调度。
    • WFQ(加权公平队列)

      • 基于流的:当报文的SIP+DIP+SPORT+DPORT+TCP/UDP+Tos六元组为一个流
      • 基于优先级:优先级相同的报文放到同一个队列
      • 优点:可完全按照权重分配带宽;自动分类,配置简单。
      • 缺点:低时延业务仍得不到及时调度;无法实现用户自定义分类规则。
    • PQ+WFQ

      • 优点:可保证低时延业务得到及时调度;实现按权重分配带宽等。
      • 缺点:无法实现根据用户自定义灵活分类报文的需求。
    • CBQ(基于类的队列)使用较多

      • 根据管理员自行对流量分类,分出来的一个类就算一个队列
      • 优点:提供了自定义类的支持;可为不同的业务定义不同的调度策略。
      • 缺点:由于涉及到复杂的流分类,故启用CBQ会耗费一定的系统资源。
  3. 队列的组成

    1. 分类机制
    2. 调度机制
    3. 丢弃机制(默认为伪丢弃)

拥塞避免

  1. 尾丢弃的缺点和解决办法

    由于每个队列长度有限,当某一队列已经被装满时,传统的处理方法会将后续向该队列发送的报文全部丢弃,直至拥塞解除,这种处理方式称为尾丢弃(TailDrop)。

    • 缺点

      • 引发TCP全局同步现象:

        • 响应报文被丢弃引发TCP重传,导致客户端降低TCP窗口,降低自己发送报文的频率和数量。同时也会降低其他所有客户端的TCP窗口

        • 当网络没有拥塞每个会话都尽量使用带宽,等到拥塞后断崖式降低流量。


          TCP全局同步:对于TCP报文,如果大量的报文被丢弃,将造成TCP超时,从而引发TCP慢启动,使得TCP减少报文的发送,当队列同时丢弃多个TCP连接的报文时,将造成多个TCP连接同时进入拥塞避免和慢启动状态以调整并降低流量,这就被称为TCP全局同步现象。这样多个TCP连接发队列的报文将同时减少,而后又会在某个时间同时出现流量高峰,如此反复,使网络资源利用率低。

      • 引发TCP饿死现象


        导致原因伪丢弃无法对流量进行区分丢弃

      • 无差别丢弃

        可能导致大量关键非关键数据被转发,大量关键数据被丢弃。导致原因:伪丢弃无法对流量区分丢弃

    • 解决方式:RED

      • 为避免TCP全局同步,可在队列未装满时先随机丢弃一部分报文。通过预先降低一部分TCP连接的传输速率来尽可能延缓TCP全局同步的到来。这种预先随机丢弃报文的行为被称为早期随机检测。

    • 解决方法:WRED

      • 通过对不同优先级数据包和队列设置相应的丢弃策略,实现不同流量区分丢弃\

相关推荐
Sheffield7 小时前
Docker的跨主机服务与其对应的优缺点
linux·网络协议·docker
舒一笑1 天前
程序员效率神器:一文掌握 tmux(服务器开发必备工具)
运维·后端·程序员
NineData1 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
梦想很大很大2 天前
拒绝“盲猜式”调优:在 Go Gin 项目中落地 OpenTelemetry 链路追踪
运维·后端·go
Sinclair2 天前
内网服务器离线安装 Nginx+PHP+MySQL 的方法
运维
叶落阁主2 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
茶杯梦轩3 天前
从零起步学习RabbitMQ || 第二章:RabbitMQ 深入理解概念 Producer、Consumer、Exchange、Queue 与企业实战案例
服务器·后端·消息队列
甲鱼9294 天前
MySQL 实战手记:日志管理与主从复制搭建全指南
运维
blasit4 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
YuMiao5 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议