iPhone上的TOS到802.11 QOS控件

时间:2015-05-11 19:14:14

标签: ios iphone cocoa voip qos

我们有基于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上采购数据包?

1 个答案:

答案 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来决定接下来应该从其输入队列发送哪个数据包。