百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇
网络推广 2021-01-18 21:03

  文中由百度搜索技术性精英团队“蔡锐”原創发布于“百度搜索App技术性”微信公众号,原名为《百度搜索App网络深层优化系列产品《三》弱网优化》,谢谢创作者的不求回报共享。

一、序言

  网络优化处理的关键难题有三个,第一是安全隐患,我们在《百度搜索APP移动端网络深层优化实践活动共享(一):DNS优化篇》开展了详尽的解读。第二是速率难题,我们在《百度搜索APP移动端网络深层优化实践活动共享(二):网络联接优化篇》也干了详尽的详细介绍。第三是弱网难题,它是网络优化中更为繁杂且必须不断认证和剖析的难题,大家的《百度搜索APP移动端网络深层优化实践活动共享(三):移动端弱网优化篇(文中 *)》便是要深入分析这个问题。

  本系列产品文章内容文件目录以下:

  • 《百度搜索APP移动端网络深层优化实践活动共享(一):DNS优化篇》
  • 《百度搜索APP移动端网络深层优化实践活动共享(二):网络联接优化篇》
  • 《百度搜索APP移动端网络深层优化实践活动共享(三):移动端弱网优化篇》(* 文中)

  (文中同歩公布于:.1.html

二、类似文章

《TCP/IP详解-第11章·UDP:用户数据报协议》
《Android程序猿必知必会的网络通讯网络层协议书——UDP和TCP》
《网络程序编写懶人新手入门(四):迅速了解TCP和UDP的差别》
《网络程序编写懶人新手入门(五):迅速了解为什么说UDP有时候比TCP更有优点》
《技术性普及:新一代根据UDP的低廷时网络网络层协议书——QUIC详细说明》
《让互联网更快:新一代QUIC协议在腾讯的技术实践分享》
《当代移动端网络短链接的优化方式小结:要求速率、弱网融入、安全防范措施》
《移动端IM开发人员必看(一):浅显易懂,了解挪动网络的“弱”和“慢”》
《移动端IM开发人员必看(二):史上最牛全挪动弱网络优化方式小结》

三、技术性情况

  弱网优化必须处理的关键难题有二点:

  1)挪动网络自然环境这般繁杂,大家如何确定时下便是弱网自然环境;

  2)明确为弱网自然环境下,大家怎样提高弱线下的通过率,减少弱线下的延迟,从而提高客户的网络感受。

  百度搜索App安装着亿级总流量,弱网占比0.95%,可以说很大,这一占比是怎样获得的呢?還是要从什么叫分辨弱网指标值谈起。

四、分辨弱网的指标值

  最先大家来讨论下都有哪些指标值会危害到网络的品质,包含httprtt,tcprtt,throughput,signal strength,bandwidth-delay product。

  1)httprtt:

  httprtt(http Round-Trip Time)别名TTFB(Time to first byte),指从手机客户端要求的第一个字节数逐渐发送至接受到http header的第一个字节数的时差。httprtt的時间假如太长,一方面是手机客户端自身连接网络品质的难题,另一方面是服务项目的廷时较为大。

  2)tcprtt:

  tcprtt(tcp Round-Trip Time)指手机客户端tcp无线信道第一个字节数发送至接受第一个字节数的时差。由于HTTP协议书最底层是根据TCP的,因此在多路复用同一条tcp连接的前提条件下,httprtt的时间包括tcprtt的時间的。绝大多数状况下httprtt早已能够表明难题的缘故。

  3)throughput:

  throughput,中文名货运量,它是用于考量单位时间内取得成功传输数据的总数,是能够较为客观性的考量网络品质的指标值。货运量 =(获bits完毕尺寸 - 获bits逐渐尺寸)/(获bits完毕時间 - 获bits开始时间),这儿有一个关键点必须留意,posix socket的read函数返回值是bytes,因此要乘于8获得bits。一般 在httprtt较为小的状况下,网络仍然比较慢,这个时候就可以应用货运量来明确网络的品质。

  4)signal strength:

  signal strength,这儿指的是无线网络接收灵敏度,在Android上能够根据PhoneStateListener的onSignalStrengthsChanged方式获得到数据信号高低,但要留意只有在Android M之上的版本号才起效。iOS上暂时没有可靠的完成。

  5)bandwidth-delay product:

  bandwidth-delay product,中文名字网络带宽延迟相乘,指的是一个卫星通信系统路的能力(throughput)与往返通讯延迟时间(rtt)的相乘。网络带宽延迟相乘的結果是比特犬并不是位,这一比特犬值反映出当今网络管路的较大 容积。TCP中有一个对话框尺寸的定义,会限定推送和读取数据的尺寸,因此TCP对话框尺寸的调整是立即受网络带宽延迟相乘的危害,依据网络带宽延迟相乘的值去设定tcp协议的setsockopt方式,设定的option是SO_RCVBUF(接收缓冲区尺寸)和SO_SNDBUF(发送缓冲区尺寸)。

  根据上边的內容,大家对危害网络品质的指标值拥有一定掌握,针对不一样的商品,危害网络品质的指标值能够了解成一样的,但针对每一个指标值的阈值肯定是不一样的,由于这包括着业务场景,例如抖音短视频是视頻类网络传送,微信是长连接传输数据,搜百度文字照片类传输数据。还包含服务器端配置,不一样产品系列的服务项目群集能力毫无疑问不一样,例如回到手机客户端的服务器端用时毫无疑问不一样。因此对于不一样的商品弱网指标值是基本一致的,可是指标值的赋值肯定是不一样的。

五、怎样创建弱网规范

  创建弱网规范是一个由浅入深的全过程,在一穷二白的情况下大家应当怎样创建这一规范呢?回答分成三个环节。

  

  

  ▲ 创建弱网规范的流程

  1)第一阶段,线下推广开展检测:获得一些合乎大家预估的阈值,这个时候大家必须依靠一些网络检测工具,例如iPhone的Network Link Conditioner,Facebook的ATC(Augmented Traffic Control),来获得到线下推广不一样网络状况的阈值,一般大家会检测App冷启的情景,网络转换的情景,DNS常见故障情景,弱网情景(一般全是配备上行下行的网络带宽,网络丢包,延迟时间,DNS延迟时间主要参数,或是更加简易的是应用专用工具默认设置的一些弱网配备)。

  2)第二阶段,网上开展认证:根据线下推广充足检测获得到的阈值,线上上能够获得到弱网的占比,在这儿百度搜索App是对于特殊情景的,例如Feed更新,检索着陆页开启等,就算是在智能时代被大伙儿认可的网络感受好的手机微信,也仅仅在报文传送(收取和发送信息)上保证完美优化,因此对于情景收集弱网数据信息很重要。

  3)第三阶段,网上的不断实验:努力做到理想化的弱网实际效果,免不了网上不断的阈值调节,根据调节阈值较为对于情景的网络要求的通过率、用时、联接多路复用率等指标值,使大家得到 趋于对于情景的有效阈值。

  聊了这么多,那麼弱网的探测怎样完成呢?

六、网络探测的总体构架和完成

  网络探测是弱网检验的基本,是不是能及时,恰当的检验出网络品质,是大家最先要处理的难题。大家把网络探测区划为两一部分,积极网络探测和处于被动网络收集。

6.1 积极网络探测

  说白了积极探测,便是在开启了一些标准后,积极的开展网络探测,并依照一定的标准查验出是不是弱网情况。百度搜索App研发了积极探测部件,如下图所显示。

  

  

  ▲ 积极网络探测

  (6.1.1)对策层:

  探测对策层根据多种多样对策的组成,使积极探测的及时性和精确性得到进一步提高,大家融合上边的对策层图来表述下检验层面的实际意义。

  大家各自在网络要求取得成功和不成功的情况下开启了弱网检验的逻辑性。

  关键分成以下三种逻辑性:

  1)取得成功时,怎么知道进到弱网情况?查验weakhttprtt的阈值,这一值在于业务流程的设定(一般这一会对于独特情景的要求取95分位或是更高分位的值),超过这一值便会进到弱网检验,为了更好地避免 经常开启探测加了间隔时间层面,现阶段界定的是十分钟。从线下推广仿真模拟检测看来,只需超过这一阈值,检验結果必定是弱网情况。

  2)取得成功时,怎么知道撤出弱网情况?查验goodhttprtt的阈值,这一值在于业务流程的设定(一般这一会取总体网络的95分位或是更高分位的值),低于这一值证实要转换回一切正常网络情况,为了更好地避免 经常开启探测加了间隔时间层面,现阶段界定的是三十秒。从线下推广仿真模拟检测看来,只需低于这一阈值,检验結果必定是一切正常情况。假如超过或是相当于这一阈值,也不可以证实一定并不是一切正常网络,因此也必须进行网络探测,可是因为它是在取得成功回调函数里,次数会很高,因此大家再加上间隔时间的限定三十秒,还添加了频次的限定,持续取得成功频次%频次阈值(4次)相当于0。但这看上去還是次数有点儿高,因此大家引进了台阶增长体制,伴随着频次的提高,成60秒几何倍数提高。

  3)不成功时,怎么知道进到弱网情况?最先会分辨持续不成功频次,持续不成功频次/频次阈值(2次)相当于1而且持续不成功频次%频次阈值(2次)相当于0,对比取得成功,不成功的频次查验比较严苛,关键還是考虑到数次开启网络检验耗损特性。

  进到弱网情况后,便会开启基本能力层的ping和dns query的探测。

  (6.1.2)基本能力层:

  探测基本能力层,关键出示弱网检验的方式,一是dns query,一是ping,百度搜索App应用C 完成了这两个能力。

  为何要采用这二种方式呢?我们在系列产品二中详细介绍过,一个网络要求,分成DNS->TLS->TCP->传输数据 四个环节。想判断网络连接性关键在DNS和TCP环节,因此dns query和ping便是用于检验这两个阶段的连接性方式。dns query向百度搜索关键网站域名http://mbd.baidu.com进行dns查询,查看的DNS网络服务器为系统设置的DNS网络服务器(iOS根据res_ninit涵数搭建一个__res_state的建筑结构,Android根据systemproperty获得net.dns1和net.dns2的值,便可获得系统设置的DNS网络服务器),DNS查看的请求超时時间为三秒。ping的总体目标详细地址为百度搜索关键网站域名http://mbd.baidu.com,ping的频次为2次,每一次请求超时时间默认设置的1s。

  分辨出弱网情况后,会将結果出示给插口层。

  (6.1.3)插口层:

  插口层关键出示积极探测出去的网络情况,现阶段包含GOOD,BAD,UNKNOWN,OFFLINE。

  1)GOOD:dns查询取得成功而且ping也取得成功,即标识为GOOD情况;

  2)BAD:ping不成功一次标识为BAD情况;

  3)UNKNOWN:最初的状态或是鉴别不出来情况为UNKNOWN情况;

  4)OFFLINE:dns server不正确(沒有获得到要推送的DNS server详细地址),网关ip不正确(载入/proc/net/route文档內容不成功),推送dns错误(推送dns数据信息系统错误),ping读写能力不正确(ping的全过程中读写能力不正确),接受dns错误(接受dns数据信息系统错误),ping详细地址不正确(ping详细地址是空),dns不明网站域名不正确(dns沒有查看到网站域名不正确),复位icmp不正确(复位icmp不成功),dns udp不正确(建立UDP socket不成功),即标识为OFFLINE情况。

6.2 处于被动网络收集

  说白了处于被动收集,便是每一次网络要求的全部关键点都开展纪录,并依照一定的标准将初始信息内容开展汇报,顶层再依据标准分辨是不是弱网情况。百度搜索App根据cronet的NQE(Network Quality Estimator)开展了二次定制开发设计。

  最先大家解读下必须收集的数据信息,包含tcprtt、httprtt、throughput三个层面,如下图所显示。

  

  

  ▲ 处于被动采集数据

  1)tcprtt,根据posix和windows的socket程序编写插口来获得tcprtt。获得机会在联接进行,读进行和写进行;

  2)httprtt,根据HTTPtcp协议完成,根据测算接受response数据信息逐渐和逐渐推送的时差,来获得httprtt。获得机会在学首包过去进行时;

  3)throughput,根据上边的计算方法必须获得bytes和時间,根据posix和windows的socket程序编写插口来获得bytes。获得机会在学过去进行时纪录接受的bytes,在写过去进行时纪录推送的bytes。時间的获得在货运量管理方法控制模块里进行,下边会讲到。获得机会在要求进行和要求消毁时。

  以下为处于被动网络收集的总体框架图。

  

  

  ▲ 处于被动网络收集

  (6.2.1)能力层:

  能力层內容上边大家早已讲过,关键收集tcprtt、httprtt、throughput三个层面的数据信息。

  (6.2.2)对策层:

  处于被动收集对策层根据多种多样对策的组成,减少各种各样采集数据的汇报机会,减少特性的危害。

  1)tcp协议管理方法控制模块,最先负责获取tcprtt的值,如何获取tcprtt呢?通过getsockopt函数获取tcp_info结构体里的tcpi_rtt值。其次由于tcprtt的上报频次比较频繁,所以做了1秒的时间间隔上报限制。

  2)吞吐量管理模块,负责吞吐量的计算,上面介绍了计算公式,从网络活动监控器模块获取bytes,但吞吐量的计算单位是bits(位),所以将bytes乘以8。只有GET请求会被列入统计计算,并且至少要累计5个请求后才能开始统计计算。排除精准度的干扰,比如localhost,私有子网上的主机,特定用途子网主机,可参考RFC1918。

  3)网络质量管理模块,从套接字管理模块获取tcprtt,从吞吐量管理模块获取吞吐量,并且在HTTP协议栈读首包完成时获取httprtt。获取到这三个值后,需要经过一些策略限制上报的频次,10秒间隔的限制;网络类型不能是UNKNOWN(下文会详细讲解);网络不能频繁切换;rtt和吞吐量总大小各300个。

  (6.2.3)接口层:

  接口层主要提供被动采集出来的网络状态,目前包括GOOD,BAD,UNKNOWN,OFFLINE。

  1)GOOD:3G和广义的4G,任一条件满足标记为GOOD状态。通过阈值标记3G和广义的4G,httprtt大于等于273ms,tcprtt大于等于204ms,即标记为3G状态。小于这两个值被标记为广义的4G,所谓广义的4G包含4G、WiFi、以及质量较好的各种接入网络。

  2)BAD:慢2G,2G和httprtt大于1.31秒,任一条件满足标记为BAD状态。通过阈值标记慢2G和2G,httprtt大于等于2.01秒,tcprtt大于等于1.87秒,标记为慢2G。httprtt大于等于1.42秒,tcprtt大于等于1.28秒,标记为2G。httprtt大于1.31秒,为百度App的Feed刷新业务阈值。

  注:上面涉及的时间值为nqe内部的机制,具有普适性。

  3)UNKNOWN:非法的httprtt,tcprtt,吞吐量,任一条件满足标记为UNKNOWN状态。何为非法?值为-1为非法,那什么条件被标记为-1呢?首先初始化时会被标记为-1,其次在从来没有获取到过httprtt,tcprtt,throughput的值时,会使用本地默认的值做为判断标准,这是一种容错处理。

  4)OFFLINE:依赖平台能力进行判断,Android平台依赖ConnectivityManager获取NetworkInfo,通过NetworkInfo的isConnected获取是否连接,如果未连接则判断为OFFLINE状态,如果NetworkInfo为空则判断为OFFLINE状态。

七、弱网状态下百度App如何改善用户体验

  

  

  ▲ 百度App在弱网下的手段

7.1 QUIC在百度App弱网下的最佳实践

  QUIC(Quick UDP Internet Connections)是新一代的互联网传输协议,最早源于Google,它的详尽内容可参考资料:

  百度App的普通网络请求在弱网状态下会切换到QUIC,本章重点讲解下百度App针对弱网下开启QUIC后遇到的问题,一是开启QUIC一旦遇到问题是否可以回滚?二是在弱网下如何能让流量尽可能的走QUIC?针对这两个问题,我们的解决方案是QUIC升降级原理和QUIC预连接。

  (7.1.1)QUIC升降级原理:

  如上图QUIC部分所示,QUIC的升降级依赖于HTTP Alternative Services,HTTP Alternative Services是与HTTP有关的一个协议,它不是为QUIC专门设计的,在HTTP协议上主要负责新服务的替换,对于HTTP1.1协议,它是通过HTTP响应头传输回来的,所以只能在第二次请求时生效,如下面格式。

Alt-Svc: quic="http://alt.example.", quic=":443"; ma/blockquote>

  如上信息表明切换到quic协议,指定了域名服务和端口,并且指定了生效时间,以秒为单位。

Alt-Svc: clear

  如上信息表明将alter配置清空

  在网络库内部有一个alter连接和原连接的竞争机制,如果alter信息已经存在,优先发送alter连接,而原连接会延迟发送,延迟时间默认300ms,谁先成功就使用哪个连接,如果alter连接在QUIC握手时失败,会记录这个alter信息的失败次数,并根据失败的次数,计算出一个过期时间,这个过期时间会随失败次数指数增加,最长为2天。当过期时间到期后,会清除这个alter信息,当这个alter连接在QUIC握手成功后,会清除这个alter信息。

  (7.1.2)QUIC预连接:

  所谓QUIC的预连接,就是在进入弱网状态前提前建立QUIC连接。大家都知道QUIC引以为傲的0RTT,但第一次建立连接的时候是需要1RTT的,客户端首先会向服务器发送一个client hello消息,服务器会回复一个server reject消息,这个消息中包括了server config,有了server config后客户端就可以直接计算出密钥,完成0RTT,详尽内容可参考[url= ... %E5%8D%8F%E8%AE%AE/]资料【4】[/url]。

  通过上面的原理,客户端拉取server config的成功概率会直接影响QUIC在弱网下的流量,所以我们在App启动的过程中会做一次QUIC预连接,将server config拉取下来,这样等进入弱网后alter连接会大概率的竞争过原连接,进而走QUIC协议。

7.2 复合连接在百度App弱网下的最佳实践

  复合连接的具体原理可以查看《百度APP移动端网络深度优化实践分享(二):网络连接优化篇》里的具体介绍,百度App目前在弱网下只是针对图片网络请求开启了复合连接,因为图片请求不管是HTTPDNS结果还是localDNS的结果都是多个IP,这是满足复合连接的前提。在弱网下多IP的尝试会比单IP的结果好些,另外弱网的比例相对较小,复合连接对于服务器的负载也会小些。

八、百度App网络整体架构

  

  

  ▲ 百度App网络整体架构

  百度App网络整体架构,以网络门面为中间层,隔离上层的最佳实践和底层的基础网络库。

  1)最佳实践:

  客户端网络库的一部分工作量是在如何让最佳实践做的更好,在音视频上,不管是iOS的AVPlayer,还是双端的ijkPlayer,都是使用HTTPDNS组件接管DNS模块,没有全部接管网络模块。ReactNative的网络模块RCTNetworking,图片库Android的Fresco和iOS的SDWebImage,WebView组件Android的Chromium和iOS的WKWebView,以及百度App的自有业务,都是通过网络门面的接口层直接接管。而对于第三方业务考虑到与宿主耦合的关系,直接使用Android的HttpURLConnection和iOS的URLSession系统标准的接口。

  2)网络门面:

  网络门面主要包括:

a. 拦截器模块(提供给业务订制网络门面的机制);
b. 并发队列模块(提供高中低以及非常高的网络请求优先级);
c. 网络探测组件(弱网主动探测能力)、网络诊断模块(包括https,ping,dns的校验);
d. HTTPDNS组件(《百度APP移动端网络深度优化实践分享(一):DNS优化篇》里详细讲解);
e. 网络监控模块(客户端的打点机制,服务端的例行和突发监控);
f. HttpURLConnection封装层;
g. URLSession封装层。

  3)基础网络库:

  基础网络库包含两部分:

一部分是基于cronet二次订制的统一网络库;
一部分是WebSocket基础库(Android的JavaWebSocket,iOS的SocketRocket)。

  统一网络库内部包含连接优化的内容(在《百度APP移动端网络深度优化实践分享(二):网络连接优化篇》里详细讲解),弱网优化的内容(上面提到的被动采集)。通过AOP的方式将底层协议栈注入进HttpURLConnection(利用URLStreamHandlerFactory)和URLSession(利用URLSessionConfiguration的protocolClasses属性),两者都是系统提供的URL Loading机制。

九、实际收益

  弱网优化的收益我们主要从上面讲到的进入弱网状态后的手段来看,包括开启QUIC,QUIC预连接,开启复合连接。

  1)弱网下开启QUIC后,网络连接成功率提升0.01%,平均耗时降低23.5%;

  2)弱网下开启QUIC预连接后,QUIC协议的pv从37万涨到90万;

  3)弱网下开启复合连接后,bad状态下耗时降低2.5%,offline状态下耗时降低7.7%。

十、本文结语

  系列一到系列三的内容到今天全部完成,希望能对大家的工作和学习有所帮助,感谢大家的持续关注和鼓励。生命不息,优化不止,做技术我们是认真的。

十一、参考资料

[1]
[2]
[3]
[4]
[5]
[6]

附录:更多网络通信方面的精华文章

《TCP/IP详解-第11章·UDP:用户数据报协议》
《TCP/IP详解-第17章·TCP:传输控制协议》
《TCP/IP详解-第18章·TCP连接的建立与终止》
《TCP/IP详解-第21章·TCP的超时与重传》
《技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)》
《通俗易懂-深入理解TCP协议(上):理论基础》
《通俗易懂-深入理解TCP协议(下):RTT、滑动窗口、拥塞处理》
《理论经典:TCP协议的3次握手与4次挥手过程详解》
《理论联系实际:Wireshark抓包分析TCP 3次握手、4次挥手过程》
《计算机网络通讯协议关系图(中文珍藏版)》
《UDP中一个包的大小最大能多大?》
《P2P技术详解(一):NAT详解——详细原理、P2P简介》
《P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解》
《P2P技术详解(三):P2P技术之STUN、TURN、ICE详解》
《通俗易懂:快速理解P2P技术中的NAT穿透原理》
《高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少》
《高性能网络编程(二):上一个10年,著名的C10K并发连接问题》
《高性能网络编程(三):下一个10年,是时候考虑C10M并发问题了》
《高性能网络编程(四):从C10K到C10M高性能网络应用的理论探索》
《高性能网络编程(五):一文读懂高性能网络编程中的I/O模型》
《高性能网络编程(六):一文读懂高性能网络编程中的线程模型》
《不为人知的网络编程(一):浅析TCP协议中的疑难杂症(上篇)》
《不为人知的网络编程(二):浅析TCP协议中的疑难杂症(下篇)》
《不为人知的网络编程(三):关闭TCP连接时为什么会TIME_WAIT、CLOSE_WAIT》
《不为人知的网络编程(四):深入研究分析TCP的异常关闭》
《不为人知的网络编程(五):UDP的连接性和负载均衡》
《不为人知的网络编程(六):深入地理解UDP协议并用好它》
《不为人知的网络编程(七):如何让不可靠的UDP变的可靠?》
《不为人知的网络编程(八):从数据传输层深度解密HTTP》
《网络编程懒人入门(一):快速理解网络通信协议(上篇)》
《网络编程懒人入门(二):快速理解网络通信协议(下篇)》
《网络编程懒人入门(三):快速理解TCP协议一篇就够》
《网络编程懒人入门(四):快速理解TCP和UDP的差异》
《网络编程懒人入门(五):快速理解为什么说UDP有时比TCP更有优势》
《网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门》
《网络编程懒人入门(七):深入浅出,全面理解HTTP协议》
《网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接》
《网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?》
《技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解》
《让互联网更快:新一代QUIC协议在腾讯的技术实践分享》
《现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障》
《聊聊iOS中网络编程长连接的那些事》
《移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”》
《移动端IM开发者必读(二):史上最全移动弱网络优化方法总结》
《IPv6技术详解:基本概念、应用现状、技术实践(上篇)》
《IPv6技术详解:基本概念、应用现状、技术实践(下篇)》
《从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路》
《脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手》
《脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?》
《脑残式网络编程入门(三):HTTP协议必知必会的一些知识》
《脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)》
《脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?》
《脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?》
《以网游服务端的网络接入层设计为例,理解实时通信的技术挑战》
《迈向高阶:优秀Android程序员必知必会的网络基础》
《全面了解移动端DNS域名劫持等杂症:技术原理、问题根源、解决方案等》
《美图App的移动端DNS优化实践:HTTPS请求耗时减小近半》
《Android程序员必知必会的网络通信传输层协议——UDP和TCP》
《IM开发者的零基础通信技术入门(一):通信交换技术的百年发展史(上)》
《IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)》
《IM开发者的零基础通信技术入门(三):国人通信方式的百年变迁》
《IM开发者的零基础通信技术入门(四):手机的演进,史上最全移动终端发展史》
《IM开发者的零基础通信技术入门(五):1G到5G,30年移动通信技术演进史》
《IM开发者的零基础通信技术入门(六):移动终端的接头人——“基站”技术》
《IM开发者的零基础通信技术入门(七):移动终端的千里马——“电磁波”》
《IM开发者的零基础通信技术入门(八):零基础,史上最强“天线”原理扫盲》
《IM开发者的零基础通信技术入门(九):无线通信网络的中枢——“核心网”》
《IM开发者的零基础通信技术入门(十):零基础,史上最强5G技术扫盲》
《IM开发者的零基础通信技术入门(十一):为什么WiFi信号差?一文即懂!》
《IM开发者的零基础通信技术入门(十二):上网卡顿?网络掉线?一文即懂!》
《IM开发者的零基础通信技术入门(十三):为什么手机信号差?一文即懂!》
《IM开发者的零基础通信技术入门(十四):高铁上无线上网有多难?一文即懂!》
《IM开发者的零基础通信技术入门(十五):理解定位技术,一篇就够》
《百度APP移动端网络深度优化实践分享(一):DNS优化篇》
《百度APP移动端网络深度优化实践分享(二):网络连接优化篇》
《百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇》
《技术大牛陈硕的分享:由浅入深,网络编程学习经验干货总结》
>>更多同类文章 ……

  (本文同步发布于:.1.html



客户服务热线

15727267871

在线客服