android 应用程序在连接到网络时将如何表达其 QOS 要求?
通常,他们不会。
如果有人有不同的经历,我会很感兴趣。
即使 Android API 允许您请求特定的 QoS(我不知道这是否可能),移动运营商也不太可能接受您的请求,除非您有一些特殊协议。
手机和网络之间有两种类型的承载(也就是您的流量的隧道):
您的流量将流经的承载将决定 QoS。
默认承载
该隧道是拥有您的 IP 地址的隧道,并且在您连接到 LTE 时至少会建立一个隧道。
更多这种类型的隧道意味着你有很多 IP 地址。
每个隧道映射到您的设备请求的接入点名称(APN)。每个 APN 代表一个不同的网络,就像一个独立的 LAN;一些 APN 可以访问互联网,另一些可以访问运营商的 VOIP 网络,而其他一些 APN 是运营商保留 MMS 服务器的网络。
我希望你能明白。
此类承载中允许的 QCI 为 5 到 9,运营商知道您有权访问哪个 APN。这里的QOS通常是在承载建立时根据APN和数据规划分配的,会应用到所有通过这个隧道的数据,直到你断开连接为止。
如果您是一家非常大的企业(Apple/iphone 有人吗?),您可能会要求运营商拥有您的专用 APN,并且您的设备将对通过该网络的流量进行一些特殊处理。
简而言之,这不是一个 App 要求某些特定 QOS 的好地方。
专门的承载者
这是一个连接到默认承载的隧道。
它充当在其附加的默认承载上执行的流量的过滤器。
对于与默认承载过滤器(ip/port/port-range/protocol)匹配的流量,将应用与默认承载不同的 QOS。这实际上是获得介于 1 和 4 之间的 QCI 的唯一方法。
您可能有多个不同的专用承载连接到您的默认承载,并且网络能够根据请求动态分配和删除它们。由于它们非常消耗资源,因此运营商倾向于在数量和持续时间上限制专用承载的使用。
触发分配专用承载有4种方式:
- 静态配置:运营商在每次连接时分配承载,无论如何。这在实践中从未用于专用承载。
- 设备请求:手机主动请求具有某些特定特性的专用承载。运营商倾向于放弃这种类型的请求,他们更愿意由他们自己决定何时激活它们。
- 触发流量检测:运营商以某种方式监控您的流量,如果检测到某些特定模式(基于 ip/port/protocol/whatever 或这些的组合),则可能会分配专用承载。
- 应用程序功能请求:这就是 IMS 发生的情况;当您开始通话时,SIP 服务器会通知运营商正在进行的通话,运营商会为您分配一个 QCI 1 的专用承载。
在每种情况下,请求都将由一个名为 PCRF 的节点进行评估。此节点是网络检查您是否拥有特定 QoS 和/或专用承载的权利的地方。
如果此处没有与您的应用程序、流量类型、订阅或设备匹配的特定规则,您的应用程序将永远不会有介于 1 和 4 之间的 QCI
TLDR
就 QoS 策略而言,您需要一个非常宽松的运营商
或者
您需要与运营商达成某种协议。