1

我们有一个基于 iPhone 的基于 IP 的音频应用程序,我们目前正在尝试设置 TOS 级别,并查看这如何反映在 802.11 Qos 控制字段中。

我们这样做只是简单的 setsockopt 调用:

    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 标头中时,网络的其余部分似乎会感到困惑。

任何人都知道我们应该使用什么值来获得超过 802.11 的 VOICE,在来自 iPhone 的数据包上?

4

1 回答 1

3

您正在查看两个不同的值 - 一个是第 1 层值,另一个是第 2 层值。两者之间没有直接对应关系——需要提供一些映射。

在您的情况下,此映射必须由接入点(如果使用轻量级接入点,则由无线局域网控制器)和原始设备上的网络堆栈执行,因此您无法直接控制此映射。

您在 IP 层而不是网络链路层进行操作,因此您所能做的就是设置适当的 DSCP(通过 TOS 值)并相信较低层会做正确的事情。

DSCP 46 (EF)(TOS 值 0xB8)最适合语音流量。似乎 iOS 堆栈将此放入 802.11e UP 5。虽然您可能更喜欢 6,但您无法控制它。其他设备会以不同的方式映射事物。例如,思科AP 会将 EF 映射到 UP 6

主要的是,通过提名 DSCP EF,您可以向所有网络元素(端到端)提供关于应如何处理此流量的最佳指示。

无论如何,来自始发无线设备的 QoS 相当无用 - 通常设备内的 WiFi不会拥塞,因此 QoS 不是必需的,并且您无法控制在网络上发送的其他设备 - WiFi 是一种共享访问媒体。

接入点中的 QoS 可能是一个好处,因为整个无线链路可能会拥塞,并且 AP 可以使用 QoS 来决定接下来应该从其输入队列中发送哪个数据包。

于 2015-05-11T20:46:18.900 回答