欢迎您光临站群宝,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!

百度APP移动端网络深度优化实践分享(二):网络连接优化篇

一、前言本系列文章目录如下:二、相关文章三、技术背景连接优化需要解决两个核心问题:从上图我们能清晰的看出:综上所述:DNS、TLS、TCP握手阶段用了4个RTT才到了ApplicationData阶段,也就是数据开始传输阶段。四、连接优化我们都能做什么?五、连接优化之“TLS的连接优化”5.1 Session Resumption1)Session Identifier:2)Session Ticket:5.2 False Start从结果看省去了1个RTT的时间。False Start有两个前提条件:5.3 Session Resumption和False Start的区别六、连接优化之“TCP的连接优化”6.1 连接池不同类型的连接池以组合的形式互相复用能力:6.2 预连接预连接:预先创建好的连接。它解决的场景是在App使用阶段可以无耗时的获取连接。下面用四个问答来解释预连接。问题一:预连接是否能解决所有网络请求的提前连接建立?答:答案是否定的,预连接需要业务方进行核心业务的评估,针对核心的域名进行预连接的建立。问题二:预连接既然针对的是特定的域名,那么是如何配置的呢?答:采用域名+连接数的方式进行配置,比如https://a.baidu.com|2,表示给a.baidu.com这个域名配置两条预连接,这里要说明下,在HTTP/1.x协议下,网络库的实现都会对于单域名有最大连接数的限制,不同网络库的个数限制不一样,有5个也有6个,但对于HTTP/2协议,这个连接数就只能是1个。问题三:预连接是如何建立的?答:在网络库初始化的时候,会根据使用者的配置延迟5s进行预连接的建立,主要是考虑网络库在冷启动下对于启动性能的影响,为了保证网络库的整体性能,预连接的总个数限制在20个。问题四:预连接是如何保持的?答:在网络库初始化的时候,除了进行预连接的建立,还会创建一个预连接的定时器,这个定时器会每隔31s,这个值的设定取决于BFE(Baidu Front End,是七层流量的统一接入系统)和BGW(Baidu Gate Way,百度自主研发的四层负载均衡平台)对超时的最小值设定,根据使用者的配置重新建立连接。6.3 连接重建问题一:连接重建是否针对连接池里的所有连接?答:答案是肯定的。问题二:连接重建的过程是什么样的?答:在网络状态变化的时候,第一步会清除掉连接池里的idle socket,何为idle socket?即空闲socket,对于从未使用过的空闲socket超过60秒清除,对于使用过的空闲socket超过90秒清除。第二步重建连接需要等待200ms,目的是等待DNS先重建完成。问题三:连接重建对于性能有影响吗?答:出于性能考虑,连接重建的连接个数限制是100个。6.4 备用连接问题一:备用连接是否针对所有请求?答:答案是肯定的。问题二:备用连接的过程是什么样的?答:当有请求来临时,连接池内无连接可用,会启动一个定时器开启备用连接,定时器的间隔时间是250ms,与主连接进行竞争,如果主连接因为网络抖动或者网络状态不好,导致连接失败,那么备用连接就直接发送请求。如果主连接成功,那么备用连接就被取消掉。问题三:备用连接的目的是什么?答:在连接池无连接的情况下,务必是要创建连接的,在主连接之外加一个备用连接,会大大提升创建连接的成功率,从而提升用户体验。6.5 复合连接问题一:复合连接是否针对所有请求?答:答案是肯定的。复合连接可以全局开关,百度App现阶段暂时没有开启复合连接。问题二:复合连接的过程是什么样的?答:众所周知域名DNS查询一般情况下会返回多个IP,我们以域名查询返回两个IP为例问题三:复合连接的目的是什么?答:复合连接的好处是提供最优的IP选取机制,但也会带来服务端的高负载,所以使用的时候需要进行综合评估。七、连接优化的最佳实践7.1 连接优化在Android网络架构的位置及实践7.2 连接优化在iOS网络架构的位置及实践八、实际收益九、本文结语十、参考资料附录:更多网络通信方面的精华文章

《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移动端网络深度优化实践分享(二):网络连接优化篇》

 

>> 更多同类文章 ……

 

(本文同步发布于:http://www.52im.net/thread-2479-1-1.html)