我们有基于iPhone的音频IP应用程序,我们目前正在玩设置TOS级别,并了解这在802.11 Qos Control字段中的反映。
我们只是简单地设置了调用:
int tos = 0xB8; // VOICE
status = setsockopt(socketFD, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));
if (status == -1)
{
if (errPtr)
*errPtr = [self errnoErrorWithReason:@"Error setting TOS (setsockopt)"];
}
理论上,这会将所有数据包标记为WLAN链路上的VOICE,但我们最终得到的TID为5,表示VIDEO(至少根据Wireshark)。
这是从iPhone到无线AP的流量,因此我们无法进行WAP映射。
我们已经能够将TOS设置为0xC8,这确实会产生VOICE分类,但是当C8的TOS值最终出现在IP头中时,网络的其余部分似乎会感到困惑。 / p>
任何人都知道我们应该使用什么价值来通过802.11获取VOICE,从iPhone上采购数据包?
答案 0 :(得分:3)
您正在查看两个不同的值 - 一个是第1层值,另一个是第2层值。两者之间没有直接的对应关系 - 需要提供一些映射。
在您的情况下,此映射必须由接入点(或使用无线局域网控制器,如果使用轻量级接入点)和原始设备上的网络堆栈执行,因此您无法直接控制这种映射。
您正在IP层而不是网络链路层运行,所以您所能做的就是设置一个合适的DSCP(通过TOS值),并相信较低层做正确的事情。
DSCP 46(EF)(TOS值0xB8)最适合语音流量。似乎iOS堆栈将它放入802.11e UP 5.虽然您可能更喜欢6,但您无法控制它。其他设备将以不同的方式映射。例如,Cisco AP将EF映射到UP 6
主要的是,通过提名DSCP EF,您可以对所有网络元素进行端到端的最佳指示,了解如何处理此流量。
无论如何,来自始发无线设备的QoS无用 - 通常设备中的WiFi 不会拥挤,因此不需要QoS,您无法控制其他设备正在网络上发送 - WiFi是一种共享的访问媒体。接入点中的QoS可能是一个好处,因为整个无线链路可能拥塞,并且AP可以使用QoS来决定接下来应该从其输入队列发送哪个数据包。