dscp值_差分服务代码点 (DSCP) 概述

差分服务代码点(DSCP)是IP数据包中的字段,用于在网络通信中实现不同级别的服务质量。DSCP通过标记数据包并分配相应服务等级,与旧版路由器的IP优先级兼容。它在QoS中起作用,如提供有保证的服务和受控加载服务。DiffServ是基于DSCP的一种服务模型,通过在边缘对流量分类并设置DSCP值,核心路由器根据DSCP值调度包转发,确保不同服务等级的流量得到适当处理。

差分服务代码点 (DSCP) 概述

差分服务代码点 (DSCP) 概述

1)在我们媒体网关的网络管理系统EMS上,我们可以对management message IP 和Signal IP

使用不同的

DSCP差分服务。

差分服务代码点 (DSCP) 是 IP 数据包中的一个字段,它能将不同级别的服务指派到网络通讯中。

2) 这是通过用 DSCP 代码对网络上的每个数据包作标记并向其分配相应级别的服务来实现的。

而服务

DSCP 是“IP 优先”和“服务类型”字段的组合。为了利用只支持“IP 优先”的旧路由器,会使用 DSCP 值,因为 DSCP

值与“IP 优先”字段兼容。详细信息,请参阅 RFC 编辑器网站上的 RFC 2474。

3) DSCP 工作原理

已启用服务质量 (QoS) 的程序会通过常规 QoS (GQoS) 应用程序编程接口 (API)

为通讯流请求特定的服务类型。可用的服务类型有:

有保证的服务

有保证的服务提供具有有限(保证最短的)延迟的高质量、可定量保证。

受控加载服务

受控加载服务提供没有有限延迟的高质量、可定量保证。

DSCP 是一个六位字段,包含有一些默认值,如下表所示。相同的“IP 优先”和 IEEE 802.1p 值在不同的列中显示。

4) DiffServ介绍

DiffServ

起源于IntServ。DiffServ的目的是在因特网上为流量提供有区别的业务级别。与IntServ相比,DiffServ定义的是一个相对简单而粒度粗一些的控制系统。另外,DiffServ针对的是流聚合后的每一类QoS控制,而不是像IntServ那样针对每个流。因此,DiffServ具有可扩展性,能够在大型网络上提供QoS服务。

5)  DiffServ在其域的边缘对进入流进行分类,并为每一类型指定一个类型标志DiffServ代码点(DSCP)。域内的核心路由器查看DSCP值,并根据每一类的特定逐跳行为(PHB)调度包的转发。DiffServ把基于相同的PHB转发的一组包称为行为聚集(BA)。

核心路由器将检查IP 数据包的字段DSCP 值

DiffServ工作组已经定义了DSCP与

PHB的映射关系(表1),但同时也允许ISP自行定义具有本地意义的映射关系。

表1 推荐的DSCP值

DSCP  PHB  说明

101110 EF  绝对QoS

001XXX AF1  QoS介于EF和BE之间。每一种AF可以划分为三种优先级,共12种

010XXX AF2

011XXX AF3

100 AF4

000000 BE 尽力而为业务

1.加速转发(EF)

EF PHB(或EF)的流量不受其它PHB流量的影响,确保包的离开速率高于所规定的值。与传统的租用线类似,EF

PHB能够提供低丢包率、低延迟、低抖动和有保证的带宽服务。EF

PHB转发只提供对已接受的固定流量以及对流进行最小程度的排队,并在边缘路由器丢弃掉任何超过EF指定数量的流。

2.保证转发(AF)

AF为IP包提供不同级别的转发特征,为四个级别AF中的每个都分配特定数量的转发资源(比如缓冲区和带宽),并且为每个包指派三种不同丢弃优先级中的一种。AF

PHB允许在整个流量不超过预先设定速率的前提下以更高的可能性转发包。

<think>我们有一个代码片段需要解释,它涉及DSCP差分服务代码点)的处理。代码出现在网络数据包处理上下文中,很可能是在Linux内核的网络加速模块(如SFE)中。 代码分解: 1. `dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT;` - `ip_hdr(skb)`: 获取skb(socket buffer,即网络数据包)中的IP头。 - `ipv4_get_dsfield`: 从IP头中获取DS字段(Differentiated Services Field,在IPv4中就是TOS字段,现在称为DS字段)。 - `XT_DSCP_SHIFT`: 这是一个移位常量,用于从DS字段中提取DSCP。在IPv4中,DSCP占用DS字段的高6位。因此,通常`XT_DSCP_SHIFT`为2(因为低2位是ECN,需要右移2位来去掉ECN,得到高6位的DSCP)。 - 因此,这行代码的作用是从IP头中提取DSCP。 2. `if (dscp) { ... }` - 如果DSCP不为0(即存在非零的DSCP),则执行括号内的代码。 3. 括号内的代码: - `nircm->dscp_rule.flow_dscp = nircm->dscp_rule.return_dscp = dscp;` 将提取的DSCP同时赋给`dscp_rule`结构中的`flow_dscp`和`return_dscp`。这里`dscp_rule`可能是用于记录DSCP标记规则的。`flow_dscp`可能表示正向流(请求方向)的DSCP,`return_dscp`可能表示反向流(响应方向)的DSCP。这里将两个方向都设置为相同的DSCP。 - `nircm->rule_flags |= SFE_RULE_CREATE_FLAG_DSCP_MARKING;` 设置规则标志位,表示该规则包含DSCP标记。这个标志可能用于后续处理,表明需要应用DSCP标记。 - `nircm->valid_flags |= SFE_RULE_CREATE_DSCP_MARKING_VALID;` 设置有效标志位,表示DSCP标记是有效的,即规则中DSCP相关字段已经被正确设置。 整体功能: 这段代码的作用是:从传入的数据包(skb)的IP头中提取DSCP,如果该非零,则将其记录在规则结构体(nircm)的DSCP规则中(同时用于正向流和反向流),并设置相应的标志位表示该规则需要应用DSCP标记且标记有效。 应用场景: 在创建加速规则时,如果检测到数据包已经带有DSCP标记,则加速引擎会记录这个标记,并确保在后续的数据包(包括反向流)中保持相同的标记。这样,加速引擎就可以在硬件加速路径中维护DSCP标记,而不需要回退到慢速路径。 注意事项: - 如果DSCP为0,则不设置这些标志,意味着可能不进行DSCP标记处理。 - 标志位的设置有助于后续流程判断是否需要处理DSCP。 现在,根据要求,我们必须在回答后提出3-5个相关问题。问题需基于用户的问题和我们的回答来设计。 </think>这段代码是网络加速引擎中DSCP差分服务代码点)标记处理的核心逻辑,用于提取和配置数据包的QoS优先级信息。以下是逐行解析: ### 代码功能解析 ```c dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT; ``` | 组件 | 说明 | |------|------| | `ip_hdr(skb)` | 获取skb中的IPv4头指针 | | `ipv4_get_dsfield()` | 提取IP头的DS字段(6位DSCP+2位ECN) | | `XT_DSCP_SHIFT` | 移位常量(通常为2) | | `>> XT_DSCP_SHIFT` | 右移2位剥离ECN字段,获取纯净的DSCP | ```c if (dscp) { nircm->dscp_rule.flow_dscp = nircm->dscp_rule.return_dscp = dscp; ``` - **条件判断**:仅当DSCP非零时处理(0表示默认BE服务) - **双向标记**: - `flow_dscp`:入向数据包的DSCP - `return_dscp`:出向(返回路径)DSCP - 等保证双向流量QoS一致性 ```c nircm->rule_flags |= SFE_RULE_CREATE_FLAG_DSCP_MARKING; nircm->valid_flags |= SFE_RULE_CREATE_DSCP_MARKING_VALID; } ``` | 标志位 | 作用 | |--------|------| | `SFE_RULE_CREATE_FLAG_DSCP_MARKING` | 启用加速引擎的DSCP标记功能 | | `SFE_RULE_CREATE_DSCP_MARKING_VALID` | 声明当前DSCP规则配置有效 | ### DSCP处理流程图 ```mermaid graph TB A[接收数据包] --> B{提取IP头DS字段} B --> C[右移2位获取DSCP] C --> D{DSCP≠0?} D -- 是 --> E[设置双向DSCP] E --> F[启用标记标志位] E --> G[设置有效标志位] D -- 否 --> H[跳过DSCP处理] ``` ### 关键常量定义 ```c #define XT_DSCP_SHIFT 2 // ECN占低2位,DSCP占高6位 #define DSCP_CS0 0x00 // 默认尽力而为服务 #define DSCP_EF 0x2E // 加速转发(46) #define DSCP_AF31 0x1A // 保证转发(26) ``` ### 典型应用场景 **VoIP流量加速:** ```mermaid graph LR Phone[IP电话] -->|DSCP=EF| Router Router -->|检测EF标记| SFE[加速引擎] SFE -->|设置加速规则| Core[核心网络] ``` 对应代码行为: 1. 提取EF标记(0x2E >> 2 = 0x0B) 2. 设置`flow_dscp = return_dscp = 0x0B` 3. 激活DSCP加速标志 ### 技术细节说明 1. **DSCP与TOS的关系** - 传统TOS字段被DS字段替代 - 计算转换:`dscp = (tos & 0xFC) >> 2` ```c // 等效计算示例 uint8_t tos = iph->tos; // 原始TOS dscp = (tos & DSCP_MASK) >> 2; // 掩码+移位 ``` 2. **双向标记的意义** - 保证往返流量相同QoS处理 - 适用于: - 视频会议(入向视频/出向音频) - 交互式应用(游戏/远程桌面) 3. **标志位协同工作** | 标志位 | 生效条件 | |--------|----------| | 创建标志(FLAG) | 声明需要DSCP处理 | | 有效标志(VALID) | 确认配置完成 | - 必须双标志同时设置才会触发硬件加速 ### 性能优化 - **移位代替除法**:`>>2`比`/4`效率更高 - **零跳过**:避免无效DSCP处理开销 - **位操作优化**:标志设置使用`|=`避免分支判断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值