web

WPO一续 wireless Network

无线通信

Posted by Lorry on December 9, 2018

文章字数:20748, 阅读全文大约需要:59 分钟

现在无线连接无处不在, 用户也不会关心你的应用是不是”有线应用”, 他们只希望不管在什么情况下, 访问相同的网址, 有相同的使用体验, 得到相同的结果, 甚至更好.

无线标准有相当多种: WIFI, Bluetooth, MIMAX, ZigBee, NFC, LTE, HSPA, EV-DO, 甚至更早的3G, 卫星通信.如果要把每一个都搞懂然后去优化那是需要相当大的勇气, 好消息的大多数无线技术都是基于通用的规则, 相同的权衡因素, 性能指标以及约束条件, 只要把影响无线性能的基本原理搞清楚, 其他问题就迎刃而解了.

无线网络的类型

按照影响地理范围划分

类型 范围 应用 标准
个人局域网(PAN Personal area network) 个人活动范围 替代有线传输 蓝牙, ZigBee, NFC
本地局域网(LAN, Local area network) 一栋建筑或一个校园 有线网络的无线扩展 IEEE 802.11(W-Fi)
城域网(MAN, Metropolitan area netw) 城市范围 无线内联网 IEEE 802.15(WiMAX)
广域网(WAN, Wide area network) 全球范围 无线网络 蜂窝(UMTS, LTE等)

无线网络性能基础

每种类型的无线技术都有其自由的一套约束和限制, 但是无论哪种无线技术, 都有一个最大通道容量. 信道容量是最大的信息速率

  • C 是信道荣祥, 单位为bits/s
  • BW是可用带块, 单位为hz
  • S是信号, N是噪声, 单位为W

带宽 BW

不像有线网络通过线缆将各个节点连接起来, 无线电是一种公用的机制 - radio-wave 无线电波, 更准确的将是电磁辐射. 收发双方都必须遵循一个使用频率. 比如802.11b 和 802.11g标准都是使用的2.4-2.5GHz频带.

在美国, 这个过程是由FCC(Federal Communications Commission), 不同政府由不同规则, 所以有可能在不同国家由不一样的频率范围

除开政治原因, 共享相同的频带能保证兼容的交互, 性能因素最重要的就是分配的频带范围. 在上述公式中信道总体比特率与分配的带宽成正比. 这就是最初802.11n相比于早期WIFI标准提升性能的方式.

最后值得注意的是不是所有的频段提供相同的性能, 越低的频率信号传输得越远, 并且覆盖更广的面积(macrocells-大蜂窝), 但是需要花费更多的大型天线还要由更多的竞争(接入的范围大).

高频信号可以传输更多的数据, 但是传不远, 从而形成较小的覆盖范围(microcells-小蜂窝)并且需要更多的基础设施.

不同的频段对不同的应用来说价值也不一样, 对广播来说, 更需要低频, 而双向通信则需要高频, 提供更大的带宽, 竞争也会少一些.

分频历史

这个比较有意思, 提出来说一下, 在1912年前, 任何人都可以使用她想要的任何频段. 1912年, 美国通过了射频法案, 规范射频光谱的使用, 而设立该法案的初心是因为泰坦尼克的沉没–如果有专用的紧急信道, 其他更多的船只就可以收到信号前去营救, 这样就不会死那么多人了.1934年FCC出台通信法案并负责分配频谱.

1947年, ISM(industrial, scientific, medical)频带是第一个被国际通信委员会建立并在各国有保留频段. 2.4-2.5GHz(100MHz) 和 5.725-5.825GHz(159MHz)带宽, 这也是现在用的无线通信(WiFi)的频段之一. 这些频段也被视为”没有证书的频段”, 可以允许任何人允许在无线网上, 不管是因为商业还是私有用途. 在这些频段和使用的硬件遵从具体的技术标准,比如 transmit power, 传输功率

最后, 因为不断增长的无线通信需求, 政府开始举办频谱拍卖, 售出证书以允许在特定频段上传输信号. 2008年, 698-806MHz在美国拍出了196亿美金.足以证明带宽的稀有和珍贵. 这将继续成为一个高竞争的领域.

信号功率

除开带宽之外, 次要因素就是收端和发端的信号功率大小. 也成为信噪比( SNR S/N ratio), 值越大,信号就越强. 通常来说所有的无线信号是共用媒质的, 比如空气, 这也就意味着会被其他设备产生信号干涉, 举例: 微波炉工作在2.5GHz, 笔记本也用这个频段使用 WiFi, 就会发生跨标准感谢. 如果手机其他 WiFi 设备, 比如邻居家的WiFi,甚至连接同一个 WiFi 的同事的电脑, 也能对你的传输产生干涉.

最好的情况是, 你自己用自己的某个特殊评断, 没有任何噪声和干扰, 但那几乎是不可能的. 只能保证需要的数据在即使有干扰的情况下也能被收到, 可以尝试

  • 尽可能提高传输功率, 增大 signal 的值
  • 降低传输距离

还有一个因素是路径损耗, 距离越长, 信号量越少的现象. 这个现象没法避免, 具体可以参见 维基百科

上图展示了两个重要的问题

  1. 远近问题
    1. 接受者获取强信号的条件
    2. 接受者不可能从比1条件更弱的信号中获取信息有效的区分出信息
  2. 蜂窝呼吸
    1. 覆盖范围的条件, 或者说信号传递的距离
    2. 会基于噪音和干扰强度不停地扩张或收缩

数模转换

可用的带宽和信噪比是影响无线信道容量的主要的两个物理因素. 但是信号量算法的编码也能有重大的影响. 这里涉及到数模转换 - 把数字信号的0和1放到模拟信号(射频信号)上.

  • 收发两端可以处理1000个脉冲每秒(1000 baud)–波特率
  • 每个传输元代表不同的位序列, 由选择的字母表决定比如 2-bit 字母表为: 00, 01, 10, 11
  • 通道的比特率是1000 baud * 2bits = 2000bits/s

数模转换的算法取决于可用的技术, 收发双端的计算功率和信噪比. 越高等级的转换表可以降低干扰, 但是也会提高成本.

衡量现实世界的无线性能

所有的射频通信基于:

  • 共享通信媒质
  • 受限与使用具体的带宽频率范围
  • 受限于使用具体的传输功率比
  • 受限于不停变化的背景噪音和干扰
  • 受限于无线技术类型
  • 受限于设备, 成型因素( form factor), 功率等

所有的无线技术都有建议的峰值, 或数据的最大值. 举例: 802.11g 标准是 54Mbit/s, 802.11n 标准是600Mbit/s, 类似的, 一些移动运营商选出 LTE 的吞吐量可达100+Mbit/s, 但是, 这些都是在最理想的情况下的数据. 啥事最理想的条件?

  • 分配的带宽的最大值
  • 专享带宽
  • 最小化甚至没有背景噪音
  • 最高的数模转换吞吐量
  • 多个射频流( MIMO )

所以这些因素就可以影响无线网络性能了:

  • 收发端举例
  • 当前位置的背景噪声
  • 相同网络下不同用户干扰
  • 附近不同网络干扰
  • 收发双端的可用传输性能
  • 处理性能和选择的模数转换类型

上述的影响性能因素只考虑了吞吐量, 还没有考虑延迟, 因不同的无线方案而不同, 之后会详细说明延迟的

WiFi

  • 简单,便宜, 无须许可,可在任何地方由任何人部署, 是部署最广也最受欢迎的无线标准.
  • 最初来自WiFi联盟推广无线本地局域网技术( wireless LAN )
  • 严格来说WiFi 设备需要得到 WiFi 联盟的检测证书, 并带有 WiFi 的名字和 logo, 实际上现在基于 IEEE 802.11标准的都叫 WiFi
  • 1997年提出802.11, 但多少是作为802.3的改良和扩展,直到1999年802.11b 标准才被引入.
  • 2.4GHz ISM 带宽

从以太网到无线WLAN

以太网基于802.3, WLAN 基于802.11

ALOHAnet是1971年6月诞生的第一个无线网络系统. 它成为以太网和WiFi 的基础, 他是基于随机存取信道, 意味着没有中央处理, 没有规划者来控制哪些设备在什么时候允许传输, 而是所有的设备都在他们自己的信道上, 并且所有设备协同一起工作来保证共享信道的性能.

以太网曾经还出过一个叫 CSMA 的协议 (carrier sense multiple access):

  1. 检查有没有人在传输
  2. 如果信道忙, 等待释放
  3. 一旦释放后立即开始传输

显而易见很容易产生冲突, 于是有了 CSMA/CD(collision detection):

  • 如果一个冲突被检测到, 所有的传播都立即停止
  • 休眠一个随机间隔(线性增加的)
  • 多个冲突者不会有相同的休眠间隔, 也就不会在重启时再有冲突

WiFi 的模型跟上述有些相似, 但是因为硬件限制, 无法再数据发送是发现冲突, 所以 WiFi 依赖于冲突避免( CSMA/CA collision avoidance).每个发送方都会通过只在信道为空闲的时候发死欧诺个来避免冲突, 然后发送他的一整个消息帧. 一旦 WiFi 帧被发送, 发送方须等待一个接收方可以处理下一个传输的告知. 这里信道使用率很重要, 尽量保持在10%以下. 随着使用率的增高, 冲突的数量也会很快上升.

WiFi 标准和特性

802.11 protocol Release Freq(GHz) Bandwidth(MHz) 单个流的速率(Mbit/s 最大多输入多输出流数
b Sep 1999 2.4 20 1, 2, 5.5, 11 1
g Jun 2003 2.4 20 6, 9, 12, 18, 24, 36, 48, 54 1
n Oct 2009 2.4 20 7.2, 14.4, 21.7, 28.9, 43.3, 57.8, 65, 72.2 4
n Oct 2009 5 40 15, 30, 45, 60, 90, 120, 135, 150 4
ac ~2014 5 20, 40, 80, 160 up to 866.7 8

现如今 b 和 g 是部署和支持最广的标准

  • 利用无证书的2.4GHz ISM 频带
  • 使用20MHz 带宽
  • 最多一个数据流
  • 传输功率最大200mW

如何优化 WiFi 性能? 把 n 升级成 ac, 这样每个信道带宽从20到40MHz, 使用更高的数模转换, 添加了更多的射频来平行传输多个流( MIMO ), 因此 ac 可以由 G+ 级别的吞吐量

WiFi 性能检测和优化

WiFi 多媒体( WiFi Multimedia)提出在对延迟敏感的应用中(比如视频, 音频等)QoS(Quality of Service)的概念, 但是只有一些路由, 甚至更少数的部署客户端可以感知到. 同时, 所有的流量不管是你自由网络还是附近的 WiFi 都必须竞争者使用射频资源.

路由器可以为客户端设置一些 QoS 的策略, 比如最大化每个客户端的速率或者根据流量限速. 但是不能控制其他人产生的流量. WiFi 的易用性促进了使用它的网络无处不在,也同时导致了许多性能问题. 实践上来说, 在高密度的城市或者办公室环境中发现好几十个不同的重叠 WiFi 网络是很常见的.

最常用的2.4GHz 频带提供了三个不重叠的20MHz 信道, 1, 6, 11.但是在不同的国家也是不一样的, 有些可以允许使用13,14信道, 而另一些则被限制在较小的子集中.即便不看区域因素, 只要附近有超过2个或3个的 WiFi, 就会有重叠和竞争.

802.11g 的设备和路由器可以上到54Mbps, 但是这时候一个使用相同 WiFi 信道的邻居, 开始通过 WiFi 下载高清 电影, 带宽就会减少一半, 甚至更多. 接入点对此没有任何办法, 这是特性, 不是 bug.

不幸的是, 延迟性能也没有更好, 没有任何可以保证在客户端和 WiFi 接入点的第一跳的延迟. 因为你在同其他无线使用者竞争进入一个共享的信道. 好消息是, 如果你是一个爱尝鲜的人, 可以试试使用802.11n 和802.11ac 标准的5GHz, 提供了一个更宽的频率范围, 而且现在在大多数环境中用得还比较少. 一些双频段路由器可同时支持2.5GHz 和5GHz.下表是典型的2.4GHz 和5GHz 的无线网首跳延迟

Freq (GHz) Median (ms) 95% (ms) 99% (ms)
2.4 6.22 34.87 58.91
5 0.90 1.58 7.89

所以, 综上述:

  • WiFi 没有任何带宽或延迟保证
  • WiFi 基于环境信噪比提供动态带宽
  • 传输功率限制在200mW 以内.
  • WiFi 接入点覆盖被设计时分配的信道(2.4,还是5)
  • WiFi 接入点之间对同一个射频信道进行竞争.

没有什么”典型”值, 这个范围会根据标准, 地理位置, 使用设备, 当地射频环境而变化, 如果很幸运整个 WiFi 只有一个使用者, 那么可以由一个很高的吞吐量, 低延时, 低波动等, 一旦一开始竞争, 那所有的都会有竞争.

因为没有带宽保证, 所以会有不同的信息流去适配不同的带宽改变, 比如带宽好的时候传输 1080p 的数据流, 带宽不好的时候传输720或480p 的数据流. 自适应比特流

Container Video resolution Encoding Video bitrate (Mbit/s)
mp4 360p H.264 0.5
mp4 480p H.264 1–1.5
mp4 720p H.264 2–2.9
mp4 1080p H.264 3–4.3

因为没有延迟的保证, 如果是对延迟敏感的就不要使用 WiFi 进行传输了, 这也是使用不可靠 UDP 传输的WebRTC 诞生的一个诱因. 当然改变传输并没有影响射频网络, 但是能减低协议和应用层面的延迟.

WiFi 的丢包

看到这些竞争导致的不稳定, 是否会让 WiFi 传输的包丢失很多呢? 实际上不必过多担心 TCP 丢包, 因为数据链路和物理链路层会有自己的重发和错误校验机制, 而无线的冲突在网络七层结构中华是更高的层.换句话说, TCP 的丢包不是 WiFi 应该绝对考虑的问题, TCP 传输的绝对速率不会比大多数有线网络高, 反而相对于直接的 TCP 丢包, 更容易在低层的连接和物理层看到因为波动性导致包到达时间不同.

WiFi 网络的优化

不由带宽影响的因素

在实践中, WiFi 网络经常被视为有线 LAN 的扩展, 有线 LAN是通过 DSL, 线缆或光线连接到广域网. 2015年底, 在美国的平均用户来说, 传输速率在12.6Mbps, 而全球来说是5.1Mbps, 所以首先因素在于 WAN 带宽, 而不是 WiFi 本身. |Rank| Country |Average Mbps |Year-over-year change| |—|—|—|—| |- |Global |5.1 |14%| 1 |South Korea| 20.5 |-19%| |2 |Sweden |17.4 |23%| |3 |Norway |16.4 |44%| |4 |Switzerland |16.2 |12%| |5 |Hong Kong |15.8 |-2.7%| |… | |21 |United States |12.6 |9.4%|

但是, 除开带宽瓶颈, 流量是在背连 WAN 连接当中不会考虑的因素(相当于有线连接), 特别是在大的数据容量和最大吞吐量的时候, 许多用户可能会在3G 或4G 会因为费用和带宽的因素非常敏感, 而这不是 WiFi 要考虑的.

这种排除假设法不是在所有环境都是正确的, 比如把 WiFi 建立在3G 或4G 的连接(移动热点), 但大多数情况下是. 结果下载, 更新, 数据流的使用都应该尽可能使用 WiFi.

移动网络

人口的增长带动无线设备的大量增长, 对移动网络的需求也只会越来越大.

G的历史

|Generation |Peak data |rate |Description| |—|—|—|—| |1G |no data| Analog systems| |2G |Kbit/s| First digital systems as overlays or parallel to analog systems| |3G |Mbit/s| Dedicated digital networks deployed in parallel to analog systems| |4G |Gbit/s| Digital and packet-only networks|

峰值光谱效率 bps/Hz, 它可以转换到4G的Gbit/s+ 峰值数据速率, 注意这里使用的都是峰值(peak),意味着所有的条件都是最理想情况下的数据

Generation Data rate Latency
2G 100–400 Kbit/s 300–1000 ms
3G 0.5–5 Mbit/s 100–500 ms
4G 1–50 Mbit/s < 100 ms

第一个数据服务-2G

第一个商用1G网络诞生1979年的日本, 他是一个模拟系统没有提供任何数据容量, 1991年, 第一个2G网络诞生在芬兰, 它基于聚合GSM(Global System For Mobile Communications最初是Groupe Special Mobile)标准, 也是第一次把数字信号带入射频网络. 它开启了第一个电路切换移动数据服务, 比如SMS, 并且包传递效率峰值为9.6Kbit/s

90年代中期, GPRS(General Packet Radio Service)第一次引入GSM标准, 无线网的接入开始变得可用, 虽然仍然很慢(172Kbit/s), 典型的往返延时在好几百毫秒. GPRS和2G语音技术合起来被成为2.5G, 一些年一个, 网络被提升到使用EDGE(Enhanced Data rate for GSM Evolution) 峰值速率到了384Kbit/s, 第一个EDGE, 也被称为2.75G网络诞生于2003年的美国.

3GPP和3GPP2联盟

这些技术的实现没有一个具体的工厂标准, 比如最开始的GSM全球标准覆盖了80%到85%, 但是并不是只有一个, 还有高通自己的标准(IS-95)占据10%到15%, 主要在北美, 这就导致了全球漫游网络不可用的问题.下图是03到07年的移动标准市场

3GPP(3rd generation Partnership Project)

致力于在对GSM进行3G升级时发展全球移动通信网(Universal Mobile Telecommunication System–UMTS), 它被视为GSM的修正标准和新的LTE实验性标准

3GPP2(3rd generation Partnership Project 2)

致力于发展基于CDMA2000技术的3G技术, 这是IS-96的高通标准

  • 有两种主导性的部署在移动网络上的类型
  • 3GPP和3GPP2 主导了每个技术的改良
  • 3Gpp和3Gpp2标准不能让设备互通.

不存在孤立的3G或4G技术, 国际通信联盟(International Telecommunication Union–ITU)指定国际标准和性能指标, 3GPP和3GPP2使用各自的技术去定义这些标准, 达到实现指标甚至超过预期.

3G技术的革命

3GPP –> UMTS 3GPP2 –> CDMA 还分别被分为: 3.5G, 3.75G, 3.9G 技术, LTE 是3.9G 传输技术.

为什么不直接跳到4G?

  • 技术不断发展
  • 沿用已有的基础网络节省开支
  • 4G有完全不同的射频接口和完全平行的基础设施
  • 使已有的3G 用户不用换设备

IMT-Advanced 4G 需求

4G 跟3G 一样没有一个具体的标准, 凡是满足下列需求的都可以成为4G

  • 基于 IP 包交换网络
  • 可降级 3G 或2G
  • 100 Mbit/s 移动速率, Gbit/s+ 固定速率
  • 低于100ms 控制延迟, 低于10ms 的用户延迟
  • 动态分配用户间网络资源
  • 使用变化的带宽分配, 从5到20MHz

LTE 十分的接近4G, 但依然不是, LTE 和 LTE-Advanced 是有区别的.所以虽然很多运营商说4G, 具体是不是可以按照上述要求进行测试

LTE(Long Term Evolution)

为了满足高速数据传输速率和低延迟,3GPP 重新设计了核心网和射频网络, 包括

  • 所有 IP 核心网
  • 简化网络架构到更低的成本
  • 更低延迟(<10ms for user, < 100ms for control)
  • 为高吞吐(100Mbps)新的射频接口和调制
  • 更大带宽分配和载波聚合
  • MIMO

LTE(release 8)为新的网络架构完成了基础工作, LTE-Advanced(release 10)才真正达到了 IMT-Advanced 的标准

为何电池用得那么快?

每个支持 LTE 的设备都需要使用 4*MIMO, 还需要使用独立的接口来使用之前的2G 和3G, 所以医用需要5种或6中射频信号, 这也是为什么电池会消耗得如此快的原因之一吧.

HSPA+(High Speed Packet Access Evolution) 引领全球4G的到来

为什么有了 LTE 还需要 HSPA+ 呢? 成本, HSPA+ 可以在已有的设备上进行升级, 而且获得跟 LTE 差不太多的性能.下图是 LTE, HSPA+, CDMA 的移动宽带增长预期

建造多代(multigeneration)的未来

  1. 无线标准的进化非常的快, 但是物理上的突破会非常消耗成本和时间去验证
  2. 一旦部署, 网络一定会被维护相当长的时间以收回成本也要保证已有用户的 online, 比如有了4G, 3G和2G也需要维护至少十年

虽然现在4G 极大的提升了 IP 数据传输, 但是3G 网仍然在处理语音通话更加有效, 所以 Voice over LTE(VoLTE)是当前被采用的用来有效解决通过 4G 进行通话的可靠性, 但是大多是4G 都还是依赖电路交换( circuit-switched)来进行通话.

这就是需要多代考虑, 包括 LTE, HSPA+, HSPA, EV-DO, 甚至 GPRS(基于不同的覆盖范围和信号强度). 如果应用因为网络不能使用的话, 用户体验极差.

幸运的是4G 的推进相当的快, 而且4G的延迟和吞吐量都可以满足大多数办公和家庭需求

- HSPA+ LTE LTE-Advanced
Peak downlink speed (Mbit/s) 168 300 3,000
Peak uplink speed (Mbit/s) 22 75 1,500
Maximum MIMO streams 2 4 8
Idle to connected latency (ms) < 100 < 100 < 50
Dormant to active latency (ms) < 50 < 50 < 10
User-plane one-way latency (ms) < 10 < 5 < 5

但是如果把4G 跟 WiFi 和有线宽带比较的话, 还是有差距的, 因为他们三者根本不可能在同一个环境, 又如何比较呢?

用户侧单向延时是一个 LTE的标准: 从无线设备可用的包到相同的包在射频塔可用的单向传输时间. 单向延时是当设备在高功率持续接受状态时是首跳( first wireless hop ), 每个设备都会有这个消耗, 没有捷径

设备的未来和性能

射频网络只是影响性能的一小部分原因, 还有设备的 CPU, GPU, RAM, ROM, 电池等. 但是当考虑射频性能时, 设备制造商必须让最新的 LTE 可用,

用户设备分类

3GPP 和3GPP2标准的提升都在提升射频接口的门槛: 1 调制方案 2 射频数量. 以 LTE 举个例子, 首先要知道设备的种类, 之后还要知道运营商是跑在哪一个 release 版本上

3GPP release Category MIMO Peak downlink (Mbit/s) Peak uplink (Mbit/s)
8 1 1x 10.3 5.2
8 2 2x 51.0 25.5
8 3 2x 102.0 51.0
8 4 2x 150.8 51.0
8 5 4x 299.6 75.4
10 6 2x or 4x 301.5 51.0
10 7 2x or 4x 301.5 102.0
10 8 8x 2998.6 1497.8

以下是 Google Nexus 4的说明

  • GSM/EDGE/GPRS (850, 900, 1800, 1900 MHz)
  • 3G (850, 900, 1700, 1900, 2100 MHz)
  • HSPA+ 42

  • 第一行说明可以运行在GPRS(2.5G)和 EDGE(2.75G), 峰值速率几百 Kbit/s, 频率表示射频可以运行的频段
  • 第二行类似, 但是没有说明3G 的最大吞吐量, 但是的第三行说明 HSPA+ 表示该手机可以在3.75G 网络运行, 42表面是 MIMO 的第20种设备, 或 dual-call 的24种类设备, 最高可达42.2Mbps的下载速率. 实际上该手机是种类24的双 cell 设备.
  • 最后这个手机是不支持 LTE的.

射频资源管理器RRC

3G 和4G 网络跟有限和 WiFi 都不同, RRC(Radio Resource Controller)在设备和基站之间连接两者. RRC直接决定延迟, 吞吐量, 设备电池寿命.

当使用物理连接, 比如以太网, 电脑是直连的并且是始终在线的, 客户端和移动端任何一方都可以在任意时候发送数据.这是降低延时最好的方法. WiFi也差不多, 只是说由于共享射频介质的原因, 有高冲突和不可预期的性能波动, 而且要保持始终在线, 需要消耗更大的性能.在移动端, 比如手机, 让 WiFi 一直在线不太现实, 太消耗性能, WiFi 提供了一个低功耗优化方案, 核心在于 DTIM(delivery traffic indication message)周期性广播表面是否有客户端需要接受数据, 客户端可以监听 DTIM 帧来确定射频需要准备好接收数据, 否则射频会一直休眠直到下一个 DTIM 到来. 这个节电策略带来了更多的延迟.

相同的问题也摆在3G 和4G 网络面前: 网络效率和功耗.这就是 RRC 存在的必要.RRC 是射频接入网的大脑. 如果要发送数据到无线信道, 需要首先向 RRC 分配一些射频资源, 如果接收到信息, RRC 也会通知客户端的.好消息是, RRC 是网络自己维护, 不用我们操心, 坏消息是, 因为没有可以控制 RRC 的 API, 所以优化3G4G 应用的时候, 需要知道一些 RRC的限制.

在2G 和3G 的时候, RRC 只在核心网, 4G 时代 RRC 直接到了服务射频塔(eNodeB)用于提升性能和减少地理延迟.

3G, 4G 和 WiFi 功耗需求

WiFi 功耗通常为30-200mW,3G,4G 在空闲时低于15mW. 但是在高功率使用时可以到1000-3500mW, 如果传输大型数据, WiFi 更好, 如果空闲时较多, 3,4G更好. 如果可以自动切换最好, 但是现在还没有出来.功耗直接影响吞吐量和延迟性能, 所以需要 RRC, 不仅仅告诉你什么时候通信, 还告诉你传输的频率以及何时周期性进入不同的功耗状态

LTE RRC 状态机

  • RRC Idel
    • 设备射频进入低功耗状态(<15mW)
    • 只监听 control traffic控制信道的广播
    • 没有射频资源被运营商分配给客户端
    • 不能收和发任何数据
      • 如果要的话必须通过监听网络广播同步自己到网络
      • 然后向 RRU 请求转移到”connect”状态
      • 协商过程需要好几次来回
      • 3GPP LTE 规定<100ms, LTE-Advanced 规定< 50ms
  • RRC Connected
    • 高功耗模式(1000-3500mW), 不管在传输或是等待数据
    • 分配射频资源给客户端
    • 射频塔和 LTE 设备的网络上下文被建立
    • 数据开始被传输
    • 一旦一方完成传输, RRC 如何知道让传输设备到一个低功耗的状态呢? 实际它上并不知道, 因为
      • IP 流是突发性的
      • 优化的 TCP 连接是长连接( long-alive )
      • UDP 不提供传输结束的信号
    • RRC 其实是像 NAT 那样的连接状态超时方案
    • 连接状态功耗高, 所以有了多个子状态
      • Continuous reception
        • 最高功耗, 建立上下文, 分配网络资源
      • Short Discontinuous Reception (Short DRX)
        • 已建立网络上下文, 没有分配网络资源
        • 值监听周期性广播, 跟 WiFi 的 DTIM 差不多
      • Long Discontinuous Reception (Long DRX)
        • 也是已建立网络上下文, 没有分配网络资源
        • 与 short 的区别是每次唤醒去监听广播的睡眠周期更长了

如果设备处在 long 或 short 的 DRX 状态时想传输数据的话, 需要先和 RRC 交换控制信息, 协商什么时候去传输和什么时候监听射频广播, 对 LTE 来说, 协商时间是要小于50ms 的, 并且 LTE-Advanced 更严格, 要少于10ms

- LTE LTE-Advanced
Idle to connected latency < 100 ms < 50 ms
DRX to connected latency < 50 ms < 10 ms
User-plane one-way latency < 5 ms < 5 ms

什么叫分配资源? LTE 也是共享上传链路和下载链路的射频信道, 当在连接状态是, RRC 告诉每个设备时间要给谁, 必须使用哪个传输功率, 调制机制和其他十几个变量 如果移动设备没有被 RRC 分配这些资源, 它不能传输或接受任何用户数据, 结果就是, 在 DRX 状态, 设备是和 RRC 同步, 但是没有上传和下载的资源被分配, 可以成为: “半睡眠”

HSPA 和 HSPA+的RRC

跟 LTE 差不多, 只是更复杂了, 这也是为什么 LTE 可以提供更好的性能的原因之一, 在RRC 中简化的结构和更有的性能.

  • idel, 跟 LTE 差不多
  • Cell DCH, 跟 LTE 的 continuous reception 差不多
  • Cell Fach
    • 中间功耗态, 比 DCH 少得多的功耗(大约一半), 从DCH一定 timeout 后触发
    • 没有网络资源被分配
    • 通过共享的低速通道以极低的速度传输小的用户数据(<20Kbps)

从 idel 到 DCH 的状态需要最多到2s, 并且会需要十几个设备和RRC间的控制消息传递. FACH 和 DCH 也好不到那里去, 最多需要1.5s来改变状态.

EV-DO(CDMA)RRC

虽然3GPP 标准大行其道, 但也不能忘记3GPP2 CDMA的网络

  • Idel
    • 跟3GPP 标准一样.
  • Connected
    • 跟 LTE 和 HSPA 的DCH类似

这是最简单的 RRC 定义, 只有两种状态, 高或者低功耗, 有或者无连接状态. HSPA 网络的延迟大概为百毫秒到秒级(视不同的修正版本). 没有中间态, 会在运营商定义的 timeouts 之后回退到 idle 态

低效的周期传输

不管传输的大小, 只要有传输, 就会以最大的功耗其发, 然后等待超时. 相当消耗电量

由超时时间驱动状态改变而产生的energy tail 是使周期性传输非常低效的原因, 首先, 要付出延迟的代价去改变状态, 然后开始传输, 最后空闲, 浪费电量, 知道所有的 timer 都启动后, 设备才能进入低功耗模式

端到端传输架构

Radio Access Network(RAN)

用户在 cell 旁边就能有强的信号, 或者如果当前 cell 超载了可以去旁边的 tower.听着简单, 这个”去旁边”的过程可不简单. 如果所有的用户都是固定的位置, 都在单个 tower 覆盖范围内, 那么一个静态的路由拓扑足够了, 但是用户是移动的, 必须要涉及从塔和塔之间的迁移, 迁移过程不能打断数据和语音传输,

在 LTE, 这种塔到塔的转换在百毫秒级, 会造成物理层的很小的数据传输中断, 但是用户感知不到, 在之前的几代技术, 相同的过程会花上好几秒.

但是在密度较大的城市或者办公室, 这样的塔到塔握手会频繁的发生. 甚至在设备处于 idle 状态也一样, 这样会造成电量的浪费.因此一个没有方向的额外的层被加上: 一个或多个塔形成一个 “跟踪区域( tracking area )”, 核心网必须知道用户位置, 但是通常它只知道 tracking area而不是某个具体的塔当前正在服务的用户. 换句话说, 设备可以在相同的 tracking area 间任意移动, 如果设备在空闲的 RRC 状态, 不会发送转换的消息, 由此节约性能.

Core Network(CN)

核心网在 LTE 中也被成为 Evolved package core(EPC), 负责数据路由, 统计, 策略管理. 简单来说就是连接射频和公网.

  • PGW(packet gateway)
    • 连接移动运营商和公网的公共网关
    • 外部连接的终点
    • 当移动设备连接上运营商网络后, 会由网关分配设备的IP 地址和维护.
    • 每个设备都有内部标识符, 独立于 IP 地址.
    • 一旦包被 PGW 收到之后, 会被包含并且通过 EPC 发到 RAN
    • LTE 使用 SCTP(Stream Control Transmission Protocol)来控制流量, 也会结合 GPRS 隧道协议(GPRS Tunneling Protocol) 和 UDP控制其他数据.
  • PGW 的作用
    • 包过滤和检测
    • QoS
    • DoS 保护
    • Policy and Charging Rules Function(PCRF)组件响应式是维护并评估网关的上述规则.

假设现在有个包从公网来了, 发给网络中的某个移动设备.

  • 路由到哪里呢? PGW 是不知道 user 的实际位置或者 RAN 中不同的 tracking area
  • PGW路由所有的包给Serveing Gateway (SGW), SGW 也不知道用户的位置. 这个方法实际上是 MME(Mobility Management Entity)
  • MME 实际上是一个用户数据库, 管理网络中所有用户的状态
    • 网中的位置
    • 账户类型
    • 账单状态
    • 开通的服务
    • 其他用户元数据
  • 一旦用户的位置发生改变, 位置便会更新到 MME 中
  • 当用户打开手机, MME 负责鉴权
  • SGW 向 MME 查询用户位置, 一旦 MME 返回数据( 包含 tracking area 和 服务中的具体某个塔的 ID), SGW和那个塔建立连接, 路由到用户数据到 RAN

简而言之. 可能逻辑组件的名称有所不同, 但是基本上所有的移动网络都遵从一下的工作流:

  • 数据到达分组网关, 这个网关通过核心网连接公网
  • 一套路由和分组策略被应用在这个分组网关上( PCRF )
  • 数据从公共网关路由到一个或多个服务网关(SGW), SGW 充当了设备在射频网络中一个移动的锚的作用
  • 用户数据库包含每个用户的鉴权, 账单, 服务的提供, 位置追踪( MME )
  • 一旦用户位置确定, 数据可以从 SGW 路由到合适的射频塔
  • 射频塔进行资源分配以及目标设备的协商
  • 通过射频接口传输数据

LTE 相对简化了很多架构, 一些组件被移除, 其他的被合并到一些逻辑组件里, 决策的制定都迁移到网络的边缘, 比如 LTE 的 RRC 就在射频塔那儿( eNodeB )而不是像之前的在更高的网络( SGW )中, 这将在所有流量控制过程中减少额外的延时.

回传容量和延迟

因为单个塔会同时服务很多用户, 就算用户和塔的速率可以达到100Mbps, 也不能保证塔能够把数据全部传输出去. 不用说, 要想用4G 就需要 carrier 在所有的射频站之间跑在光纤上, 有高性能的路由等. 回传容量而不是射频接口成为性能限制因素也屡见不鲜了.这些都不是移动应用开发者可以控制的东西, 但是这些确实也展示了一个很重要的真相: IP 网络最好的传输架构是基于最好传输模型, 但是不保证端到端的传输性能. 一旦解决了无线首跳的问题, 就到了之前说过的有线的瓶颈限制.

移动网络中的分组流

数据发送流

当用户输入一个网址并点击跳转之后会发生如下图所示过程

  1. 手机还处在空闲RRC状态, 射频必须同步附近的射频塔, 发送建立一个新的射频连接的请求, 4G做多消耗100ms
  2. 射频连接建立之后,被分配了具体的速率和功率来传输数据. 传输数据的时间成为用户侧单向延迟, 4G最多5毫秒, 所以首跳是导致延时的重要原因(100对5).
  3. SGW 到 PGW
  4. PGW 到公网

4G 没有标准保证3,4的延迟.

一般来说一个连接状态(非首跳)的4G 网络端到端延迟应该在30-100ms 范围内.

那如果用户访问了一个网络, 这是后点击链接跳转到另一个网络, 这个时候会花多少时间呢? 因为此时是在DRX(dormant) 状态, 一个比较快的协商会发生, 最大50ms 的延迟.

总结:

  • 控制端延迟:RCC 固定 <100ms idel–>connected, <50ms DRX–>connected
  • 用户端延迟:固定 <5ms
  • 核心网络延迟: 30-100
  • 内部路由延迟: PGW 到公网的延迟

数据接收流

  1. PGW把包发到 SGW, SGW 向 MME 查询用户 tracking area 信息, 如果MME 也不知道塔当前服务的用户, 需要再次收集塔的 tracking area 信息, 因为用户进入不同的 tracking area 会更新 MME, 但是如果一直在同一个 tracking area 是不会触发更新的.
  2. 如果设备是空闲的, MME 会发送页面消息给所有的在 tracking area 中的塔
  3. 在共享的信道上发送一个广播通知, 让设备可以被唤醒, 准备接收数据
  4. 设备与塔开始协商重建连接
  5. 塔根据协商内容发回给 MME 用户的位置, MME 响应给 SGW,
  6. SGW 把数据路由到塔
  7. 塔再传输到设备上

一旦连接被建立, 2-5的过程可以忽略. 同样的, 第一个分组会导致较高的延迟成本

上一张所有的无线通信的性能比较图:

线代表整个分配的范围, 盒子表示25%到75%范围, 盒子里的黑线表示中间值.

LTE 的性能最佳, 更快的吞吐量, 更稳定的 RTT(Round-Trip Time). packet延迟也更低.

移动网络的优化

  • 通过keepalive 最小化延迟
  • 地理分布服务器位置, 尽可能的接近客户端
  • 优化TLS部署
  • 所有其他优化协议–延迟和吞吐量始终是优先级最高的

还有一些新的独有的三个需求:

  • 仔细规划和审视设备的形态因素因为会限制传输的内容
  • 射频接口的性能
  • 电池寿命

因为表现层最容易被控制, 所以响应式设计越来越吸引人的眼球, 但是本质上的传输并没有改变, 依然受限于物理传输层的限制, 越多的请求必然导致更多的延迟以及响应时间的减慢, 甚至消耗更多的电量

对上述的三个限制没有一个通用的解决方案, 通常不会在表现层弄得太复杂, 因为他是根据平台和应用类型而不同的. 除开操作系统, 射频和电量的限制在移动网络中是通用的, 这是接下来集中研究的重点

保留电量

物理层的射频接口对电池寿命会为了下列几个方面有特殊的优化:

  • 射频在使用时会在几小时内消耗完电量
  • 无线代数的升级也导致了功率更高的需求
  • 射频通常是除了屏幕之外的第二消耗
  • 射频有一个因数据传输率大小非线性的电量消耗

应用应该在射频在打开时最大化传输有效数据(避免额外的数据传输)

移动端在周期进入全性能模式的时候是不会区分大数据还是小数据请求的, 所以应该坚决避免短短续续的传播

  • 查询在移动网络中十分昂贵, 最小化它
  • 可能的话去推送和通知
  • 收发请求应该聚合
  • 非重要请求应该延迟到射频开启状态

推送相比于查询, 它效率更高, 但也不应高频的推送, 如果有实时更新的需求, 应该考虑下列问题:

  • 更新间隔是什么? 如何去匹配上用户的期望
  • 除了固定更新, 有无其他策略
  • 收发请求可否在几个网络请求中集中处理
  • 收发请求可否延迟?

对 web 应用来说, SSE(server-send event)和 websocket 的传输就是最好的例子, 避免使用查询和 XHR 技术来降低延迟和开支

集中收发的请求需要基于间隔, 用户偏好, 甚至设备的电池等级, 特别是后台的应用经常依赖网络接入类型.

TCP 有个 Nagle 算法, 可以将小的 TCP 请求集中到一个 packet 中来减少协议开支和在传输中的包的数量. 移动应用也可以采用相同的技术. 最直接的应用就是 GCM(Google Cloud Messaging)会集合所有的消息, 只在用户设备活跃时传输更新.应用服务器推送给 GCM, GCM 来决定优化传输方案(按时, 按大小, 按数量等等) 但现在还没有跨平台的接口可以实现 GCM 的功能, 但是 W3C 已经有了 push 的 API, 可尝试使用

避免非必要的应用长连接(keepalives)

没必要保持 active 来让连接不中断, 可以等到RRC 来唤醒设备, 一直保持 active 很耗电

分析网络延迟开支

在移动网中单个 HTTP 请求需要成百上千毫秒, 这有部分原因是来回(roundtrip)的延迟, 也有 DNS, TCP, TLS和控制端的花销.

最好的情况是, 现在处在高功耗的连接模式, DNS 已经提前解析, tcp 不用重新建立, 可以重用之前的连接来避免建立新连接的开支. 但是总归是有新连接的产生的.

减少用户交互感知

在有网络的时候让请求在后台发生, 先立刻反馈给用户一个 UI 反馈, 请求一定要在百毫秒级完成.

为不同的网络接口可用性设计

用户不喜欢慢的应用, 但是因为网络传输而崩溃的应用用户体验更差.所以需要实时监测用户的无线环境, H5有一个接口 navigator.onLine可以查看当前的连接状态.

在流媒体应用是一个问题, 如果需要大量的下载并且确定整个文件将会被使用, 可以一次性下载整个文件然后让射频处于尽可能长的空闲状态, 比如音乐文件. 但是如果因为体积大小不能传输完整的文件, 比如 HD 的视频文件, 需要采取比特流去持续的调整网络吞吐量. 会导致高的电量消耗, 但至少可以由最好的用户体验. 当然, 最好是让用户切换到 WiFi 状态.

知道移动网络的类型和代级并不会保人任何端到端循环数的性能, 但是可以知道无线首跳的延迟和运营商端到端性能的重要信息.

最后除了吞吐量和延迟, 还应该考虑连接的丢失:

  • 不要缓存或企图猜测网络状态, 要实时获取
  • 发出请求, 监听失败时间, 如果失败要诊断错误
  • 制定重试策略
  • 制定重试停止的算法, 不要一直 spin
  • 监听连接状态去预计最好的请求策略
  • 如果离线, 记录并且在可能的一段时间后再发送请求
  • 为离线模式使用 H5 AppCache 和 localStorage

使用连接时要预计用户将要使用什么资源, 提前请求, 一次性发完, 尽可能让射频进入 idel 状态

  • 如果需要获取大的音乐或视频文件, 考虑先下载整个文件, 而不是看到哪儿(听到哪儿)再去下载流
  • 预获取应用内容, 使用数据分析出那些内容应该提前被下载(不要全都下)
  • 预获取第三方内容, 比如广告, 使用应用的逻辑来显示和更新状态
  • 终止不必要的间歇传输

其实这里是有矛盾的, 之前是要求尽可能的只获取必要的数据, 尽量小的数据, 避免长时间传输, 然后这里又说要预获取, 那不是就让数据变大了吗?时间变长了吗? 这个问题就错了, 要做到三要素的平衡: 传输大小, 电池的容量, 网络吞吐和延迟的变化. 在单次传输中传输一堆数据能有更好的吞吐量. 因为这些数据是极有可能被用户使用的, 从用户总的使用情况来看, 并没有增加总的数据的大小.

转移到WiFi

90%的无线流量来自有WiFi的室内, 虽然现在的4G于WiFi的吞吐量和延迟时间不相上下, 但是

  1. 4G的流量有限, 且较为昂贵
  2. WiFi连接对大型传输更省电
  3. WiFi不需要RRC, 首跳延迟低

所以可以在应用中建议用户打开WiFi

遵从协议和应用的最佳实践

在网络分层架构中从传输层抽象出了物理交付接口, 传输层抽象了路由和数据交付从应用协议中抽象出来. 这样提供了很好的API抽象, 但是对端到端的性能来说需要考虑整个架构. 移动网络中在物理层比较特殊的属性

  • RRC的存在
  • 电池使用时间
  • 路由延迟

物理层之上,属于传输和会话协议的部分也同样至关重要, 请参见上一篇文章, 包括 TCP,UDP和TLS的优化.

通过使用 keepalive的链接最小化延迟, 将服务器和数据放到离客户端近的地方(HetNet), 优化TLS部署以及之前谈到的在移动网络中的优化, 因为移动网的往返延迟高, 并且带宽很昂贵

当然, 优化策略不会止于传输和会协议, 这只是基础. 之后还有许多不同的协议(HTTP1.0, 1.1和2)以及通用的web应用最佳实践.