深刻探索 Android 网络优化(2、网络优化基础篇)下

前言

成为一名优秀的Android开发,须要一份完备的知识体系,在这里,让咱们一块儿成长为本身所想的那样~。

8、移动网络

用 2G 看 txt,用 3G 看 jpg,用 4G 看 avi。html

一、G字号移动网络简介

峰值数据速率 说明
1G 无数据 模拟系统
2G Kbit/s 第一代数字系统,做为对模拟系统的替代或与之并存
3G Mbit/s 专用数字网络,与模拟系统并行部署
4G Gbit/s 数字及分组网络

1)、1G

最先的商业 1G 网络于 1979 年部署于日本。这种网络属于模拟系统,没有数据传输能力。android

2)、2G

1991 年,芬兰基于新兴的GSM(Global System for Mobile communications, 全球移动通讯系统) 标准建设了第一个 2G 网络,最先在无线电网络中引入了数字 信令。git

直到 1990 年代中期,GPRS(General Packet Radio Service,通用无线分组业务) 被 引入 GSM 标准,无线互联网才真正走向实用。而 GPRS 与早期 2G 语音技术的 结合一般被称为 2.5G。github

3)、3G

1998 年,GSM 和 IS-95 组织又成立了两个全球性的合做伙伴项目便于指定 3G 标准:web

  • 3GPP(3rd Generation Partnership Project,第三代合做伙伴项目):负责制定 UMTS(Universal Mobile Telecommunication System,通用移动通讯系统),其后来也负责维护 GSM 标 准和制定新的 LTE 标准
  • 3GPP2(3rd Generation Partnership Project 2):负责基于 CDMA2000,也就是高通制定的 IS-95 标准的后续技术制定 3G 规范

3GPP 和 3GPP2 共同管理每种技术的演进。在 Android 手机上,输入:##4636##,能够看到移动链接的类型、电池诊断等信息。算法

4)、知足 IMT-Advanced 的 4G

所谓 4G,背后是一组具体要求(IMT-Advanced), 这组要求是 ITU 在 2008 年就制定和公布了的。任何达到这些要求的技术,均可以看做是 4G 技术。例如:json

  • 以 IP 分组交换网络为基础。
  • 与以前的无线标准(3G 和 2G)兼容。
  • 移动客户端的速率达到 100 Mbit/s,静止时的速率达到 Gbit/s 以上。

5)、长期演进(LTE)

随着对高速率和低延迟的需求愈来愈强烈,3GPP 计划从新设计核心及无线网络,因而 LTE(Long Term Evolution,长期演进)标准应运而生。而它与前面介绍的 IMT-Advanced 要求很相似。浏览器

二、无线电资源控制器(RRC)

2G、3G 和 4G 网络都有 RRC,它具备以下特色:缓存

  • 1)、 负责调度协调移动设备与无线电基站之间全部的通讯链接
  • 2)、 直接直接影响延迟、吞吐量和设备电池的使用时间
  • 3)、 2G 和 3G 网络中的 RRC 处于核心运营网络, 而在 4G 中,为提高性能、减小协调时间,RRC 被转移到了无线信号塔 (eNodeB)

简而言之,RRC 就是无线电网络的大脑。想要经过无线信道发送数据?你必须先向 RRC 申请无线电资源。想要接收互联网上的数据? RRC 会通知你何时监听接收到来的分组性能优化

三、移动网络中的分组流

1)、初始化请求

核心流程

  • 1)、 首先,因为手机处于空闲 RRC 状态,所以无线电模块必须与附近的信号塔同步,而后发送一个请求,以便创建无线通讯环境,这次协商须要手机与信号塔之间的几回往返,可能须要花 100ms。若是是前几代网络,那 RRC 由服务网关负责管理,这个协商过程要长得多,可达几秒钟
  • 2)、 创建了无线通讯环境后,设备就会从信号塔获得相应资源,从而可以以特定的速度和功率传输数据
  • 3)、 分组经过核心网络从 SGW 传输到 PGW
  • 4)、 最后向外传到公共互联网

其中各个步骤的延迟特色以下所示:

  • 1)、 控制面延迟:由 RRC 协商和状态切换致使的固定的、一次性的延迟时间,从空闲到活动少于 100 ms,从休眠到活动少于 50 ms
  • 2)、 用户面延迟:即用户数据从无线电模块传输到信号塔的时间,应用的每一个数据分组从设备到无线电信号塔之间都要花的固定的时间,少于 5 ms
  • 3)、 核心网络延迟:分组从无线电信号塔传输到分组网关的时间,因运营商而不一样,通常为 30~ 100 ms
  • 4)、 互联网路由延迟:从运营商分组网关到公共互联网上的目标地址所花的时间,可变

2)、入站数据流

核心流程

  • 1)、 PGW 把入站分组路由到 SGW,SGW 进一步查询 MME
  • 2)、 若是设备处于空闲状态,MME 会向当前跟踪区内的全部信号塔发送一条寻呼消息
  • 3)、 收到消息的信号塔接着经过共享的无线信道广播一条通知,告知设备应该重建无线通讯环境,以便接收数据
  • 4)、 设备周期性地唤醒以监听寻呼消息,若是在寻呼列表中发现了本身,它就会向无线电信号塔发送一条协商请求,请求重建无线通讯环境
  • 5)、 无线通讯环境重建以后,负责协商的信号塔向 MME 回发一条消息,表示它 正在为用户服务
  • 6)、 而后,MME 向服务网关返回一个应答,服务网关因而就会把数据路由到该信号塔
  • 7)、 最后,该信号塔再把数据转发给目标设备

设备一旦处于链接状态,无线信号塔与服务网关之间就会创建一条直连信道,从而 让后续到达的数据能跳过第2 ~ 5步(不用再通过寻呼),直接被转发到信号塔。所以,第一个分组的延迟是较长的

四、LTE-A(千兆级 LTE )

理论上速度能够达到光纤级别的 1Gbps(125MB/s),平常实际使用时平均速度 100Mbps 以上。

核心技术

1)、载波聚合

将多个载波聚合成更高的带宽,理论上LTE-A系统中能够实现2-5个LTE成员载波(ComponentCarrier,CC)的聚合。

当三个射频信道变成一个更宽的信道,三个20MHz就至关于60MHz,那么数据吞吐量便提高了3倍。

2)、高阶调制

利用有限带宽资源提供高数据速率一种的手段。

提升收发器的复杂程度可让一个信号搬运更多的比特。例如将 64-QAM (64个样点,样点数目越多传输效率越高)提高到 256-QAM(256个样点),一个信号能够从承载6个比特提高到8个比特,带宽效率提高了33%。

3)、更高阶的 MIMO(Multiple-Input Multiple-Output)

在发射端和接收端分别使用多个发射天线和接收天线。 这使信号经过发射端与接收端的多个天线传送和接收,大大增大信道容量。

五、5G

通讯技术的极限,并非技术工艺方面的限制,而是创建在严谨数学基础上的推论,在能够碰见的将来是基本不可能突破的。而 1G ~ 5G 都逃脱不了下面这个公式:

光速 = 波长 × 频率
复制代码

1)、现代通讯技术的现状

有线通讯

实验室中的单条光纤最大速度 26 Tbps。

无线通讯(瓶颈)

4 G LTE 理论速率仅有 150 Mpbs。

5G 实际上如何工做?

通讯技术并不神秘,5G 做为通讯技术皇冠上最耀眼的宝石,也不是什么高不可攀的创新革命技术,它更可能是对现有通讯技术的演进。而其实质就是 向新的毫米波和其余高频频段的转变。 第五代移动通讯技术,5G速率是4G的100倍,实际使用至少是10倍。

2)、优点

  • 1)、高性能
  • 2)、低延迟
  • 3)、高容量

3)、核心技术

一、毫米波

目前主流的 4G LTE 波长都是集中在分米波与厘米波这两个区间,而 5 G 的波长是位于 毫米波 的区间

二、微基站

因为电磁波频率越高,衰减越大的特色,若是使用高频,那么传输距离与覆盖能力都会减弱。所以覆盖同一个区域,须要的 5G 数量将大大超过 4G。为了下降基站成本,微基站应运而生

基站分为宏基站和微基站,宏基站在郊外、山上常常能够看到,微基站一般在城区和室内,它能够小到只有巴掌大:)

三、Massive MIMO(大量的多输入、多输出 => 多天线技术)

之前的手机有天线,其实如今的手机也有,只不过天线已经很是小了。由于 天线的长度与波长成正比,公式以下所示:

天线长度 = 波长/10 ~ 波长/4
复制代码

若是使用了 5 G 的毫米波通讯,天线也就能够变成毫米级了,所以,高阶版的多天线技术应运而生

须要注意的是,不管是基站仍是手机中的天线制做,天线之间的距离都应该保持在半个波长以上,以免互相干扰

四、全双工

手机与手机直接不只能够直接进行通讯,并且能够实现全双工。

五、波束成形

在基站布设天线阵列(一大群天线),经过对射频信号相位的控制,使得互相做用后的电磁波的波瓣变得很是狭窄,并指向它所提供服务的手机,而且还可以根据手机的移动而转变方向

优点

将全向的信号覆盖转变为精准指向性服务,这样即可以在相同的空间中提供更多的通讯链路

而目前经常使用 WIFI 协议标准 5 G:802.11ac,它的特色以下所示:

  • 理想速率 866.7Mbps
  • 支持8个 MIMO 空间流

六、华为 Link Turbo 网络聚合加速技术

在理想环境下,手机开启 Link Turbo 功能后,速度相比只链接 WiFi 和只链接 4G 的速度分别提升了 135% 和 71%,由于它在基础网络协议和算法两方面作了大量的优化。

  • 1)、 它从业务类型、接入网络的类型、用户喜爱三方面进行感知建模,在通过处理以后找到最佳匹配的网络协议
  • 2)、 经过算法让两条通道(WIFI、4G)同时满载,须要大量的计算与调试,才能平衡数据包在快慢通道之间的运送比例,最终达到运送效率最佳,速度最快

须要注意的是,硬件上 WIFI 与 蜂窝网络属于基带芯片的不一样模块 => 相似双网卡。

MultiPath TCP(iOS 7 引入)

  • 1)、 可让 TCP 链接使用多条路径来最大化资源利用率
  • 2)、 须要解决 跨路径数据碎片化、SSL 解密效率低 的问题
  • 3)、 MPTCP 会话同 TCP 同样的方式启动,不一样的是在 TCP 的 SYN、SYN-ACK、最终的 ACK 数据包的选项中多添加了一个 MP_CAPABLE 选项

而 Link Turbo 使用了自研 MultiPath UDP,Link Turbo 就是在使用 WIFI 的同时使用移动网络加速

所以,尝试跟手机厂商、芯片厂商或运营商合做也是一大优化方向。

七、移动网络优化 Tips

1)、爆发传输数据并转为空闲

移动无线接口专门为爆发性传输作过优化,咱们能够 尽量多和快地下载数据,而后让无线模块转为空闲。这样,既能够得到最大的网络吞吐量,也能节约电量

若是须要大型音频或视频文件,考虑提早下载整个文件,而不要以比特为单位地流式下载。

2)、把负载转移到 Wi-Fi 网络

Wi-Fi 链接下的大数据量传输更省电,并且在通讯过程当中也不须要 RRC,相对于 4G 网络,这将会节省 50~100 ms 的延迟

9、HTTP

一、非官方的 HTTP 0.9

1991 年出现,它是只有一行的协议。其主要功能以下:

  • 客户端 / 服务器、请求 / 响应协议;
  • ASCII 协议,运行于 TCP/IP 连接之上;
  • 设计用来传输超文本文档(HTML);
  • 服务器与客户端之间的链接在每次请求以后都会关闭。

二、非互联网标准的 HTTP 1.0

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 链接严重影响性能。

三、互联网标准 HTTP 1.1

1997 年 1 月,定义正式 HTTP 1.1 标准的 RFC 2068 发布了。

HTTP 1.1 中引入了大量加强性能的重要特性:

  • 1)、 持久化链接以支持链接重用;
  • 2)、 分块传输编码以支持流式响应;
  • 3)、 请求管道以支持并行请求处理;
  • 4)、 字节服务以支持基于范围的资源请求;
  • 5)、 改进的更好的缓存机制

HTTP 1.1 改变了 HTTP 协议的语义,默认使用持久链接。换句话说,除非明确告知(经过 Connection: close 首部),不然服务器默认会保持链接打开。

不过,这个功能也反向移植到了 HTTP 1.0,能够经过 Connection: Keep- Alive 首部 来启用。实际上,若是你使用的是 HTTP 1.1,从技术上说不须要 Connection: Keep-Alive 首部,但不少客户端仍是选择加上它。

1)、持久链接的优势

在启用持久链接的状况下,N 次请求节省的总延迟时间就是 (N-1) × RTT

2)、HTTP 管道

持久 HTTP 可让咱们重用已有的链接来完成屡次应用请求,但屡次请求必须严格 知足先进先出(FIFO)的队列顺序:发送请求,等待响应完成,再发送客户端队列 中的下一个请求。HTTP 管道是一个很小但对上述工做流却很是重要的一次优化。 管道可让咱们把 FIFO 队列从客户端(请求队列)迁移到服务器(响应队列)。以下图所示:

优点

  • 消除了发送请求和响应的等待时间。这种并行处理请求的能力对提高应用性能的帮助很是之大
  • 网络延迟越高,请求越多,节省的时间就越多。而越是大型应用,网络优化的影响就越大

HTTP 中的队首阻塞

例如第一个请求无限期挂起,或者要花很长时间才能处理完,怎么办呢?在 HTTP 1.1 中,全部后续的请求都将被阻塞,等待它完成。

3)、计算图片对内存的需求

全部编码的图片经浏览器解析后都会以 RGBA 位图的形式保存于内存当中。每一个 RGBA 图片的像素须要占用 4 字节:红、绿、蓝通道各占 1 字节,Alpha(透明) 通道占 1 字节

因此,一张图片占用的内存量 = 图片像素宽度 × 像素高度 × 4 字节

4)、谨慎使用 base64 编码

base64 编码使用 64 个 ASCII 符号和空白符将任意字节流编码为 ASCII 字符串。编码过程当中,base64 会致使被编码的流变成原来的 4/3,即增大 33% 的字节开销

四、改进传输性能的 HTTP 2.0

HTTP 工做组已经在 2012 年宣布要开发 HTTP 2.0,HTTP 2.0 的主要目标是 改进传输性能,实现低延迟和高吞吐量。其具体是 经过支持请求与响应的多路复用来减小延迟,经过压缩 HTTP 首部字段将协议开销降至最低,同时增长对请求优先级和服务器端推送的支持

1)、历史及其与 SPDY 的渊源

SPDY 是谷歌开发的一个实验性协议,于 2009 年年**中 发布,其主要目标是 经过解决 HTTP 1.1 中广为人知的一些性能限制,来减小网页的加载延迟**。

2012 年初,HTTP-WG(HTTP Working Group) 把 HTTP 2.0 提到了议事日程,并吸收 SPDY 的经验教训,在此基础上制定了官方 HTTP 2.0 标准。

2)、走向 HTTP 2.0

SPDY 是 HTTP 2.0 的催化剂,但 SPDY 并不是 HTTP 2.0。SPDY 规范仅仅是做为制定 HTTP 2.0 标准的基础。

3)、二进制分帧层

HTTP 2.0 性能加强的核心,全在于新增的二进制分帧层,它定义了如何封装 HTTP 消息并在客户端与服务器之间传输

能够看到,相较于 HTTP 1.1,编码方式变了。HTTP 1.x 以换行符做为纯文本的分隔符,而 HTTP 2.0 将全部传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码

流、消息和帧

在 HTTP 2.0 中,全部通讯都在一个 TCP 链接上完成。而要理解 HTTP 2.0,就 必须理解流、消息和帧这几个基本概念,以下所示:

  • 流:已创建的链接上的双向字节流。流是链接中的一个虚拟信道,能够承载双向的消息;每一个流都有一个惟一的整数标识符(一、2...N)
  • 消息:与逻辑消息对应的完整的一系列数据帧。消息是指逻辑上的 HTTP 消息,好比请求、响应等,由一或多个帧组成
  • 帧:HTTP 2.0 通讯的最小单位,每一个帧包含帧首部、负荷等等,至少也会标识出当前帧所属的流

多向请求与响应

在二进制分帧层的基础上,客户端和服务器能够把 HTTP 消息分解为互不依赖的帧,而后乱序发送,最后再在另外一端把它们从新组合起来

所以,HTTP 2.0 的二进制分帧机制解决了 HTTP 1.x 中存在的队首阻塞问题,也消 除了并行处理和发送请求及响应时对多个链接的依赖

请求优先级

每一个流均可以带有一个 31 比特的优先值:

  • 0 表示最高优先级
  • 2 ^ 31 - 1表示最低优先级

服务器能够根据流的优先级,控制资源分配(CPU、内存、带宽),而在响应数据准备好以后,优先将最高优先级的帧发送给客户端

每一个来源一个链接

  • 全部 HTTP 2.0 链接都是持久化的,并且客户端与服务器之间也只须要一个链接便可。
  • 虽然 HTTP 2.0 消除了 HTTP 队首阻塞现象,但 TCP 层次上仍然存在队首阻塞。

4)、首部压缩

每次都要传输 UserAgent、Cookie 这类不会频繁变更的内容,网络开销随着请求数的增多而变大。所以,HTTP 2.0 实现了首部压缩。

实现原理

在支持 HTTP2 的客户端与服务端之间:

1)、维护一份相同的静态字典 Static Table

常见头部名称、特别常见头部名称及值的组合

HTTP2 静态字典 的做用是什么?

  • 1)、 彻底匹配的头部键值对,例如 :method:POST, 直接使用一个字符表示
  • 2)、 匹配头部名称的键值对,例如 cookie: xxx,将名称使用一个字符表示
2)、维护一份相同的动态字典 Dynamic Table
  • 1)、 用于动态添加内容
  • 2)、 客户端与服务端能够相互通知对方,将发送的 key-value,例如 cookie:xxx 添加到自身的动态字典中
  • 3)、 同一个链接上产生的请求和响应越多,动态字典积累得越全,头部压缩效果也就越好
  • 4)、注意, 须要为每一个 HTTP2 链接维护不一样的动态字典
3)、利用支持基于 静态哈夫曼码表 的哈夫曼编码 Huffman Coding

若是静态、动态字典中没有对应的 key:value,则使用哈夫曼编码减小体积

5)、帧首部

帧是 HTTP 2.0 中通讯的最小单位。全部帧都共享一个 8 字节的首部,以下图所示:

  • 16 位的长度前缀:意味着一帧大约能够携带 64 KB 数据,不包括 8 字节首部
  • 8 位的类型字段:决定如何解释帧其他部分的内容
  • 8 位的标志字段:容许不一样的帧类型定义特定于帧的消息标志
  • 1 位的保留字段:始终置为 0
  • 31 位的流标识符:惟一标识 HTTP 2.0 的流

HTTP 2.0 规定了以下帧类型:

  • 1)、 DATA用于传输 HTTP 消息体
  • 2)、 HEADERS用于传输关于流的额外的首部字段
  • 3)、 PRIORITY用于指定或从新指定引用资源的优先级
  • 4)、 RST_STREAM用于通知流的非正常终止
  • 5)、 SETTINGS用于通知两端通讯方式的配置数据
  • 6)、 PUSH_PROMISE用于发出建立流和服务器引用资源的要约
  • 7)、 PING用于计算往返时间,执行“活性”检查
  • 8)、 GOAWAY用于通知对端中止在当前链接中建立流
  • 9)、 WINDOW_UPDATE用于针对个别流或个别链接实现流量控制
  • 10)、 CONTINUATION用于继续一系列首部块片断

五、QUIC

  • Google 2013 实现,2018 基于 QUIC 协议的 HTTP 被确认为 HTTP3。
  • QUIC 简单理解为 HTTP/2.0 + TLS 1.3 + UDP。弱网环境下表现于 TCP。

1)、优点

  • 1)、 解决了在链接复用中 HTTP2 + TCP 存在的队首阻塞问题
  • 2)、 因为是基于 UDP,因此能够灵活控制拥塞协议。例如 Client 端能够直接使用 Google 的 BBR 算法
  • 3)、 链接迁移:因为 UDP 经过相似connection id 的特性,使得客户端网络切换的时候不须要重连,用户使用 App 的体验会更加流畅

2)、目前的缺点

  • 1)、 NAT 局域网路由、交换机、防火墙等会禁止 UDP 443 通行,所以 QUIC 建立链接成功率只有95%
  • 2)、 运营商针对 UDP 通道不支持/支持不足
  • 3)、 使用 UDP 不必定会比 TCP 更快,客户端可同时使用 TCP 和 QUIC 竞速,从而选择更优链路

3)、使用场景

  • 1)、实时性
  • 2)、可丢弃
  • 3)、请求互相依赖
  • 4)、可同时使用 TCP & QUIC

六、浏览器性能优化 Tips

大多数浏览器都利用了以下四种优化技术:

  • 1)、资源预取和排定优先次序:文档、CSS 和 JavaScript 解析器能够与网络协议层沟通,声明每种资源的优先 级:初始渲染必需的阻塞资源具备最高优先级,而低优先级的请求可能会被临时 保存在队列中。一样,客户端也能够对请求作优先级排序处理。
  • 2)、DNS 预解析:对可能的域名进行提早解析,避免未来 HTTP 请求时的 DNS 延迟。预解析能够 经过学习导航历史、用户的鼠标悬停,或其余页面信号来触发。而在客户端中可使用 HTTPDNS。
  • 3)、TCP 预链接:DNS 解析以后,浏览器能够根据预测的 HTTP 请求,推测性地打开 TCP 链接。 若是猜对的话,则能够节省一次完整的往返(TCP 握手)时间。
  • 4)、页面预渲染:某些浏览器可让咱们提示下一个可能的目标,从而在隐藏的标签页中预先渲染 整个页面。这样,当用户真的触发导航时,就能当即切换过来。

10、网络 IO

网络 IO 的本质是 Socket 的读取,Socket 在 Linux 系统被抽象为流,而 IO 能够理解为对流的操做。

一、Socket recvfrom 读取数据过程

  • 1)、 等待 Socket 数据准备好,即网络数据已下载至内核的缓冲区中
  • 2)、 将数据从内核的缓冲区中拷贝到应用进程的地址空间

二、Unix 网络 IO 模型

共有五种类型,分别以下所示:

1)、同步

一、阻塞 I/O(blockig I/O)

特色
  • 默认 I/O 行为,整个 Socket 的读取或发送都要阻塞应用进程。
  • 一、2阶段均阻塞。
优势

及时返回数据。

缺点

对用户来讲等待太耗性能。

二、非阻塞 I/O(non-blocking I/O)

特色
  • 经过 O_NONBLOCK 将 Socket 设为非阻塞。
  • 第1阶段
    • 不阻塞,数据没有准备好会当即返回。
    • 一直没有获取到数据的话会每隔必定时间轮询进行 recvform 系统调用。
  • 第2阶段:阻塞。
优势

可以在等待数据准备的时间里干其它事。

缺点

任务可能在两次轮询间的任意时刻完成,这将会下降总体数据的吞吐量。

三、多路复用 I/O(multiplexing I/O)

特色

通常使用 select/poll/epoll 实现,它们的好处在于 单个进程能够同时处理多个网络链接的 IO。其在内部会不断地轮询所负责的全部 socket,当某个 socket 有数据到达了,就通知用户进程。经过把多个 I/O 的阻塞复用到同一个 select 的阻塞上,从而使得系统在单线程的状况下能够同时处理多个客户端请求

  • 第1阶段:阻塞在 select/poll/epoll 调用处。
  • 第2阶段:阻塞。
优势

相比于多线程/多进程模型,系统开销更小

四、信号驱动式 I/O(signal-driven I/O)

经过 SIGIO 信息处理,不多用到。

  • 1阶段不阻塞: 首先须要开启 socket 信号驱动 IO 功能,并经过系统调用 sigaction 执行一个信号处理函数(非阻塞,当即返回)。当数据准备好时,进程会受到一个 SIGIO 信号,能够在信号处理函数中调用 I/O 操做函数处理数据
  • 2阶段:阻塞。

2)、异步

一、异步 I/O(asynchronous I/O)

Linux AIO库函数实现,但一般使用开源的异步 IO 库,例如 libevent、libev、libuv。一、2阶段非阻塞。

三、常见问题

1)、同步 IO 与异步 IO 的区别?

异步 IO 作 IO 操做时不会将 process 阻塞。

2)、非阻塞 IO 与异步 IO 的区别?

在非阻塞 IO 中,进程大部分时间都不会阻塞,可是须要进程主动去 check,而且当数据准备后,也还须要进程主动再次调用 recvfrom 将数据拷贝到用户内存。

而在异步 IO 中,用户进程将整个 IO 操做交给了内核完成,而后他人作完后发信号通知。在此期间,用户进程不须要去 check IO 操做的状态,也不须要主动地去拷贝数据。

3)、网络 IO 同时使用了软中断和硬中断?

首先,经过硬中断通知 CPU 有数据来了,处理过程很是轻量。而后,经过软中断处理函数去慢慢处理耗时操做。

4)、多路复用 I/O 必定比阻塞 I/O 好?

同通常的 多线程 + 阻塞 I/O 模式相比,多路复用 I/O 在网络链接很是多的时刻确定性能更好,但当在同一时刻的网络链接不多时,频繁使用 select/poll 系统调用消耗的性能会得不偿失。

5)、epoll 必定比 select/poll 好?

同一时间链接数不多时 select 性能会比 epoll 更好。

6)、epoll 使用了 mmap 减小内核到用户空间的拷贝?

不管是在单纯的 Linux 内核上仍是 Android 的 Linux 内核上均没有使用 mmap 去实现 epoll。

11、IPv6

中国 0.4% 用户使用。预计从 IPv4 所有切换到 IPv6,须要 5-10 年的时间。相比 IPv4 链接耗时下降 10%~20%。

IPv6 过渡技术分类

1)、翻译技术

  • 实现纯 IPv4 与 IPv6 网络互通,相似于 IPv4 NAT。
  • 根据 IP 报文头的地址和协议进行翻译。
  • 最经常使用的 NAT64 翻译技术使用地址池的方式将大量的 IPV6 地址转换为少许的 IPv4 地址,经常使用于 IPv6 网络发起链接到 IPV4 网络。

2)、双栈技术

目前大部分的网络设备和主机操做系统均已支持双栈协议—同时运行 IPv4 与 IPv6 两套协议。

链路协议支持双协议栈,例如在 以太网协议的以太帧中

  • 协议 ID 0x0800 表示网络层协议采用 IPv4
  • 协议 ID 0x86DD 表示网络层协议采用的是 IPv6

应用支持双协议栈,DNS 优先选择 IPv6 协议栈做为网络层协议。

3)、隧道技术

  • 经过 IPv4 骨干网络链接两端的 IPv6 孤岛:隧道技术经过网络边界设备将 IPv6 源封装到 IPv4 的报文中通过 IPv4 骨干网传递到另外一边的网络边界设备还原 IPv6 报文。
  • 经过 IPv6 骨干网络链接两端的 IPv4 孤岛:类好比上。

例如 GRE 隧道技术提供了点对点链接服务,须要手工指定隧道的端点地址。

12、总结

在本文中,咱们深刻学习地了网络优化相关的必备基础知识,能够看到,每一处优化基础知识点都是在原先的网络基础知识点上再深刻了一层,这不只有助于咱们更好地理解网络核心基础知识,并且也为咱们后续深刻探讨网络优化相关的课题提供了良好的基础储备。最后,再多提一句,在学习的过程当中,必定要注意多使用隔期复习法,特别是针对于计算机基础学科类的知识。

参考连接:


Contanct Me

● 微信:

欢迎关注个人微信:bcce5360

● 微信群:

微信群若是不能扫码加入,麻烦你们想进微信群的朋友们,加我微信拉你进群。

● QQ群:

2千人QQ群,Awesome-Android学习交流群,QQ群号:959936182, 欢迎你们加入~

About me

很感谢您阅读这篇文章,但愿您能将它分享给您的朋友或技术群,这对我意义重大。

但愿咱们能成为朋友,在 Github掘金上一块儿分享知识。

相关文章
相关标签/搜索