MAC数据帧传输类别
QoS数据帧
MAC数据帧定义传输类别(Traffc Identifer,TID)字段,用于指示业务优先级。包含TID的MAC数据帧被称为QoS数据帧(QoS data)。不包含TID的MAC数据帧,则称为非OoS数据帧(Non-OoS data)
类别
MAC层把数据业务分为8个类型,用TID0~7来表示不同业务类型的优先等级。MAC层按照优先级由高到低的次序传输不同的数据业务,数值越大等级越高。
指定Qos类别
iperf数据设置qos类别"-S"
//-S, --tos N ; 设置 IP 服务类型(TOS,Type Of Service)
iperf -c 192.168.0.1 -S 0x80 -u -p 1234 -i 1 -b 1M -l 626 -t 10
iperf -s -p 1234 -i 1 -u
应用层更改qos类别
1.通过DSCP的值将流量映射到WMM的多个访问类别:
数据流的DSCP(Differentiated Services Code Point)值可以通过修改IP标头中的TOS(Type of Service)字段来设置。这样可以将流量打上不同的QoS标记,让路由器或交换机对数据包进行差异化处理。
2.不同的网络设备、无线设备可能会略有不同的映射规则。
DSCP | TID |
---|---|
0x00 | BE(tid=0) |
0x20 | BK(tid=1) |
0x40 | (tid=2) |
0x60 | (tid=3) |
0x80 | VI(tid=4) |
0xA0 | VI(tid=5) |
0xC0 | VO(tid=6) |
0xE0 | VO(tid=7) |
lwip设置qos类别
1.setting:socket设置tos配置到“struct raw_pcb *pcb->tos”
2.output:发包过程中通过“IPH_TOS_SET”将pcb->tos设置ip包的tos字段
#include "lwip/ip.h"
#include "lwip/ip_addr.h"
#include "lwip/inet.h"
void send_packet_with_tos(const ip_addr_t *ipaddr, uint8_t tos) {
struct pbuf *p = pbuf_alloc(PBUF_TRANSPORT, 0, PBUF_RAM); // 分配一个PBUF
if (p != NULL) {
struct ip_hdr *iphdr = (struct ip_hdr *)p->payload; // 获取IP头部
IPH_TOS_SET(iphdr, tos); // 设置TOS字段
// 填充其他IP头部信息...
iphdr->src = ...; // 设置源IP地址
iphdr->dest = ipaddr; // 设置目的IP地址
// 设置其他必要的IP头部字段...
// 使用LwIP的API发送数据包
err_t err = ip_output_if(p, NULL, ipaddr, 0, 0, 0, IP_PROTO_TCP, etharp_output); // 根据需要调整协议类型
if (err != ERR_OK) {
// 处理错误...
}
pbuf_free(p); // 释放PBUF
}
}