我们有一个基于iPhone的IP音频应用程序,目前正在设置TOS级别,并在802.11 Qos Control字段中查看如何反映这一点。
我们只是在执行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分类,但是当IP标头中的TOS值为C8时,网络的其余部分似乎会感到困惑。
有人知道从iPhone上获取数据包时,通过VOICE获得802.11的价值是什么?
最佳答案
您正在查看两个不同的值-一个是第1层的值,另一个是第2层的值。两者之间没有直接对应关系-需要提供一些映射。
在您的情况下,此映射必须由访问点(如果使用轻型访问点,则由无线Lan控制器)和原始设备上的网络堆栈执行,因此您无法直接控制此映射。
您在IP层而不是网络链路层上运行,因此您所能做的就是设置一个适当的DSCP(通过TOS值),并信任较低的层来做正确的事情。
DSCP 46(EF)(TOS值0xB8)最适合语音通信。 iOS堆栈似乎已将其放入802.11e UP5。尽管您可能更喜欢6,但您对此无能为力。其他设备将以不同的方式映射事物。例如,Cisco AP将EF映射到UP 6
最主要的是,通过提名DSCP EF,您将为端到端的所有网络元素提供最佳的指示,说明如何处理此流量。
无论如何,来自原始无线设备的QoS都是毫无用处的-通常,设备内的WiFi不会拥塞,因此QoS是不必要的,并且您无法控制正在网络上发送的其他设备-WiFi是共享访问介质。
接入点中的QoS可能是一个好处,因为整个无线链路可能会拥塞,并且AP可以使用QoS来决定下一步应从其输入队列中发送哪个数据包。
关于ios - iPhone上的TOS到802.11 QOS控制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30175828/