用 2G 看 txt,用 3G 看 jpg,用 4G 看 avi。html
代 | 峰值数据速率 | 说明 |
---|---|---|
1G | 无数据 | 模拟系统 |
2G | Kbit/s | 第一代数字系统,做为对模拟系统的替代或与之并存 |
3G | Mbit/s | 专用数字网络,与模拟系统并行部署 |
4G | Gbit/s | 数字及分组网络 |
最先的商业 1G 网络于 1979 年部署于日本。这种网络属于模拟系统,没有数据传输能力。android
1991 年,芬兰基于新兴的GSM(Global System for Mobile communications, 全球移动通讯系统)
标准建设了第一个 2G 网络,最先在无线电网络中引入了数字 信令。git
直到 1990 年代中期,GPRS(General Packet Radio Service,通用无线分组业务)
被 引入 GSM 标准,无线互联网才真正走向实用。而 GPRS 与早期 2G 语音技术的 结合一般被称为 2.5G。github
1998 年,GSM 和 IS-95 组织又成立了两个全球性的合做伙伴项目便于指定 3G 标准:web
3GPP 和 3GPP2 共同管理每种技术的演进。在 Android 手机上,输入:##4636##,能够看到移动链接的类型、电池诊断等信息。算法
所谓 4G,背后是一组具体要求(IMT-Advanced), 这组要求是 ITU 在 2008 年就制定和公布了的。任何达到这些要求的技术,均可以看做是 4G 技术。例如:json
随着对高速率和低延迟的需求愈来愈强烈,3GPP 计划从新设计核心及无线网络,因而 LTE(Long Term Evolution,长期演进)标准应运而生。而它与前面介绍的 IMT-Advanced 要求很相似。浏览器
「2G、3G 和 4G 网络都有 RRC」,它具备以下特色:缓存
简而言之,「RRC 就是无线电网络的大脑。想要经过无线信道发送数据?你必须先向 RRC 申请无线电资源。想要接收互联网上的数据? RRC 会通知你何时监听接收到来的分组」。性能优化
其中各个步骤的延迟特色以下所示:
「设备一旦处于链接状态,无线信号塔与服务网关之间就会创建一条直连信道,从而 让后续到达的数据能跳过第2 ~ 5步(不用再通过寻呼),直接被转发到信号塔。所以,第一个分组的延迟是较长的」。
理论上速度能够达到光纤级别的 1Gbps(125MB/s),平常实际使用时平均速度 100Mbps 以上。
将多个载波聚合成更高的带宽,理论上LTE-A系统中能够实现2-5个LTE成员载波(ComponentCarrier,CC)的聚合。
当三个射频信道变成一个更宽的信道,三个20MHz就至关于60MHz,那么数据吞吐量便提高了3倍。
利用有限带宽资源提供高数据速率一种的手段。
提升收发器的复杂程度可让一个信号搬运更多的比特。例如将 64-QAM (64个样点,样点数目越多传输效率越高)提高到 256-QAM(256个样点),一个信号能够从承载6个比特提高到8个比特,带宽效率提高了33%。
在发射端和接收端分别使用多个发射天线和接收天线。 这使信号经过发射端与接收端的多个天线传送和接收,大大增大信道容量。
通讯技术的极限,并非技术工艺方面的限制,而是创建在严谨数学基础上的推论,在能够碰见的将来是基本不可能突破的。而 1G ~ 5G 都逃脱不了下面这个公式:
光速 = 波长 × 频率
复制代码
实验室中的单条光纤最大速度 26 Tbps。
4 G LTE 理论速率仅有 150 Mpbs。
❝5G 实际上如何工做?
❞
通讯技术并不神秘,5G 做为通讯技术皇冠上最耀眼的宝石,也不是什么高不可攀的创新革命技术,它更可能是对现有通讯技术的演进。而其实质就是 「向新的毫米波和其余高频频段的转变」。 第五代移动通讯技术,5G速率是4G的100倍,实际使用至少是10倍。
「目前主流的 4G LTE 波长都是集中在分米波与厘米波这两个区间,而 5 G 的波长是位于 毫米波 的区间」。
「因为电磁波频率越高,衰减越大的特色,若是使用高频,那么传输距离与覆盖能力都会减弱。所以覆盖同一个区域,须要的 5G 数量将大大超过 4G。为了下降基站成本,微基站应运而生」。
「基站分为宏基站和微基站,宏基站在郊外、山上常常能够看到,微基站一般在城区和室内,它能够小到只有巴掌大」:)
「之前的手机有天线,其实如今的手机也有,只不过天线已经很是小了。由于 天线的长度与波长成正比」,公式以下所示:
天线长度 = 波长/10 ~ 波长/4
复制代码
「若是使用了 5 G 的毫米波通讯,天线也就能够变成毫米级了,所以,高阶版的多天线技术应运而生」。
须要注意的是,「不管是基站仍是手机中的天线制做,天线之间的距离都应该保持在半个波长以上,以免互相干扰」。
手机与手机直接不只能够直接进行通讯,并且能够实现全双工。
「在基站布设天线阵列(一大群天线),经过对射频信号相位的控制,使得互相做用后的电磁波的波瓣变得很是狭窄,并指向它所提供服务的手机,而且还可以根据手机的移动而转变方向」。
「将全向的信号覆盖转变为精准指向性服务,这样即可以在相同的空间中提供更多的通讯链路」。
而目前经常使用 WIFI 协议标准 5 G:802.11ac,它的特色以下所示:
在理想环境下,手机开启 Link Turbo 功能后,「速度相比只链接 WiFi 和只链接 4G 的速度分别提升了 135% 和 71%」,由于它在基础网络协议和算法两方面作了大量的优化。
须要注意的是,硬件上 WIFI 与 蜂窝网络属于基带芯片的不一样模块 => 相似双网卡。
「而 Link Turbo 使用了自研 MultiPath UDP,Link Turbo 就是在使用 WIFI 的同时使用移动网络加速」。
所以,尝试跟手机厂商、芯片厂商或运营商合做也是一大优化方向。
移动无线接口专门为爆发性传输作过优化,咱们能够 「尽量多和快地下载数据,而后让无线模块转为空闲。这样,既能够得到最大的网络吞吐量,也能节约电量」。
若是须要大型音频或视频文件,考虑提早下载整个文件,而不要以比特为单位地流式下载。
「Wi-Fi 链接下的大数据量传输更省电,并且在通讯过程当中也不须要 RRC,相对于 4G 网络,这将会节省 50~100 ms 的延迟」。
1991 年出现,它是只有一行的协议。其主要功能以下:
1994 年,IETF(Internet Engineering Task Force,互联网工程任务组)
成立了 HTTP 工做组(HTTP-WG)
,致力于改进 HTTP 协议。
1996 年,HTTP 工做组发布了 RFC 1945,解释说明了当时不少 HTTP 1.0 实现的“公共用法”。但 HTTP 1.0 并非一个正式的规范或互联网标准。
因为响应对象自己能够是任何类型:HTML 文件、纯文本文件、图片,或其余内容类型。所以,HTTP 中的“HTT”(Hypertext Transfer,超文本传输)在协议出现后不久就已经用词不当了。在实践中,HTTP 迅 速发展为 「超媒体传输协议」,但最初的名字则沿用至今。
注意:HTTP 1.0 对每一个请求都打开一个新 TCP 链接严重影响性能。
1997 年 1 月,定义正式 HTTP 1.1 标准的 RFC 2068 发布了。
HTTP 1.1 中引入了大量加强性能的重要特性:
HTTP 1.1 改变了 HTTP 协议的语义,默认使用持久链接。换句话说,除非明确告知(经过 Connection: close 首部
),不然服务器默认会保持链接打开。
不过,这个功能也反向移植到了 HTTP 1.0
,能够经过 Connection: Keep- Alive 首部
来启用。实际上,若是你使用的是 HTTP 1.1,从技术上说不须要 Connection: Keep-Alive 首部,但不少客户端仍是选择加上它。
「在启用持久链接的状况下,N 次请求节省的总延迟时间就是 (N-1) × RTT」。
持久 HTTP 可让咱们重用已有的链接来完成屡次应用请求,但屡次请求必须严格 知足先进先出(FIFO)的队列顺序:发送请求,等待响应完成,再发送客户端队列 中的下一个请求。HTTP 管道是一个很小但对上述工做流却很是重要的一次优化。 「管道可让咱们把 FIFO 队列从客户端(请求队列)迁移到服务器(响应队列)」。以下图所示:
例如第一个请求无限期挂起,或者要花很长时间才能处理完,怎么办呢?在 HTTP 1.1 中,全部后续的请求都将被阻塞,等待它完成。
「全部编码的图片经浏览器解析后都会以 RGBA 位图的形式保存于内存当中。每一个 RGBA 图片的像素须要占用 4 字节:红、绿、蓝通道各占 1 字节,Alpha(透明) 通道占 1 字节」。
因此,「一张图片占用的内存量 = 图片像素宽度 × 像素高度 × 4 字节」。
「base64 编码使用 64 个 ASCII 符号和空白符将任意字节流编码为 ASCII 字符串。编码过程当中,base64 会致使被编码的流变成原来的 4/3,即增大 33% 的字节开销」。
HTTP 工做组已经在 2012 年宣布要开发 HTTP 2.0,HTTP 2.0 的主要目标是 「改进传输性能,实现低延迟和高吞吐量」。其具体是 「经过支持请求与响应的多路复用来减小延迟,经过压缩 HTTP 首部字段将协议开销降至最低,同时增长对请求优先级和服务器端推送的支持」。
SPDY 是谷歌开发的一个实验性协议,于 2009 年年**中
发布,其主要目标是 经过解决 HTTP 1.1 中广为人知的一些性能限制,来减小网页的加载延迟**。
2012 年初,HTTP-WG(HTTP Working Group) 把 HTTP 2.0 提到了议事日程,并吸收 SPDY 的经验教训,在此基础上制定了官方 HTTP 2.0 标准。
SPDY 是 HTTP 2.0 的催化剂,但 SPDY 并不是 HTTP 2.0。SPDY 规范仅仅是做为制定 HTTP 2.0 标准的基础。
「HTTP 2.0 性能加强的核心,全在于新增的二进制分帧层,它定义了如何封装 HTTP 消息并在客户端与服务器之间传输」。
能够看到,相较于 HTTP 1.1,编码方式变了。HTTP 1.x 以换行符做为纯文本的分隔符,「而 HTTP 2.0 将全部传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码」。
在 HTTP 2.0 中,全部通讯都在一个 TCP 链接上完成。而要理解 HTTP 2.0,就 必须理解流、消息和帧这几个基本概念,以下所示:
「在二进制分帧层的基础上,客户端和服务器能够把 HTTP 消息分解为互不依赖的帧,而后乱序发送,最后再在另外一端把它们从新组合起来」。
所以,「HTTP 2.0 的二进制分帧机制解决了 HTTP 1.x 中存在的队首阻塞问题,也消 除了并行处理和发送请求及响应时对多个链接的依赖」。
每一个流均可以带有一个 31 比特的优先值:
「服务器能够根据流的优先级,控制资源分配(CPU、内存、带宽),而在响应数据准备好以后,优先将最高优先级的帧发送给客户端」。
每次都要传输 UserAgent、Cookie 这类不会频繁变更的内容,网络开销随着请求数的增多而变大。所以,HTTP 2.0 实现了首部压缩。
在支持 HTTP2 的客户端与服务端之间:
「常见头部名称、特别常见头部名称及值的组合」。
❝HTTP2 静态字典 的做用是什么?
❞
「若是静态、动态字典中没有对应的 key:value,则使用哈夫曼编码减小体积」。
帧是 HTTP 2.0 中通讯的最小单位。「全部帧都共享一个 8 字节的首部」,以下图所示:
HTTP 2.0 规定了以下帧类型:
DATA
:
「用于传输 HTTP 消息体」。
HEADERS
:
「用于传输关于流的额外的首部字段」。
PRIORITY
:
「用于指定或从新指定引用资源的优先级」。
RST_STREAM
:
「用于通知流的非正常终止」。
SETTINGS
:
「用于通知两端通讯方式的配置数据」。
PUSH_PROMISE
:
「用于发出建立流和服务器引用资源的要约」。
PING
:
「用于计算往返时间,执行“活性”检查」。
GOAWAY
:
「用于通知对端中止在当前链接中建立流」。
WINDOW_UPDATE
:
「用于针对个别流或个别链接实现流量控制」。
CONTINUATION
:
「用于继续一系列首部块片断」。
HTTP/2.0 + TLS 1.3 + UDP
。弱网环境下表现于 TCP。
大多数浏览器都利用了以下四种优化技术:
网络 IO 的本质是 Socket 的读取,Socket 在 Linux 系统被抽象为流,而 IO 能够理解为对流的操做。
共有五种类型,分别以下所示:
及时返回数据。
对用户来讲等待太耗性能。
可以在等待数据准备的时间里干其它事。
任务可能在两次轮询间的任意时刻完成,这将会下降总体数据的吞吐量。
通常使用 select/poll/epoll 实现,它们的好处在于 「单个进程能够同时处理多个网络链接的 IO。其在内部会不断地轮询所负责的全部 socket,当某个 socket 有数据到达了,就通知用户进程。经过把多个 I/O 的阻塞复用到同一个 select 的阻塞上,从而使得系统在单线程的状况下能够同时处理多个客户端请求」。
「相比于多线程/多进程模型,系统开销更小」。
经过 SIGIO
信息处理,不多用到。
Linux AIO库函数实现,但一般使用开源的异步 IO 库,例如 libevent、libev、libuv。一、2阶段非阻塞。
异步 IO 作 IO 操做时不会将 process 阻塞。
在非阻塞 IO 中,进程大部分时间都不会阻塞,可是须要进程主动去 check,而且当数据准备后,也还须要进程主动再次调用 recvfrom 将数据拷贝到用户内存。
而在异步 IO 中,用户进程将整个 IO 操做交给了内核完成,而后他人作完后发信号通知。在此期间,用户进程不须要去 check IO 操做的状态,也不须要主动地去拷贝数据。
首先,经过硬中断通知 CPU 有数据来了,处理过程很是轻量。而后,经过软中断处理函数去慢慢处理耗时操做。
同通常的 多线程 + 阻塞 I/O 模式相比,多路复用 I/O 在网络链接很是多的时刻确定性能更好,但当在同一时刻的网络链接不多时,频繁使用 select/poll 系统调用消耗的性能会得不偿失。
同一时间链接数不多时 select 性能会比 epoll 更好。
不管是在单纯的 Linux 内核上仍是 Android 的 Linux 内核上均没有使用 mmap 去实现 epoll。
中国 0.4% 用户使用。预计从 IPv4 所有切换到 IPv6,须要 5-10 年的时间。相比 IPv4 链接耗时下降 10%~20%。
目前大部分的网络设备和主机操做系统均已支持双栈协议—同时运行 IPv4 与 IPv6 两套协议。
链路协议支持双协议栈,例如在 「以太网协议的以太帧中」:
应用支持双协议栈,DNS 优先选择 IPv6 协议栈做为网络层协议。
例如 GRE 隧道技术提供了点对点链接服务,须要手工指定隧道的端点地址。
在本文中,咱们深刻学习地了网络优化相关的必备基础知识,能够看到,「每一处优化基础知识点都是在原先的网络基础知识点上再深刻了一层,这不只有助于咱们更好地理解网络核心基础知识,并且也为咱们后续深刻探讨网络优化相关的课题提供了良好的基础储备」。最后,再多提一句,在学习的过程当中,「必定要注意多使用隔期复习法」,特别是针对于计算机基础学科类的知识。
❝欢迎关注个人微信:
❞bcce5360
❝微信群若是不能扫码加入,麻烦你们想进微信群的朋友们,加我微信拉你进群。
❞
❝2千人QQ群,「Awesome-Android学习交流群,QQ群号:959936182」, 欢迎你们加入~
❞