移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 本系列文章引用了腾讯技术专家樊华恒《海量之道系列文章之弱联网优化》的部分章节,感谢原作者。1、前言随着移动互联网的高速发展,移动端IM以移动网络作为物理通信载体早已深入人心,这其中的成功者就包括微信、手机QQ、支付宝(从即时通讯产品的角度来看,支付宝已经算的上是半个IM了)等等,也为移动端即时通讯开发者带来了各种可以参考的标杆功能和理念:语音对讲、具有移动端体验特性的图片消息、全时在线的概念、真正突破物理体验的实时通知等。

本系列文章引用了腾讯技术专家樊华恒《海量之道系列文章之弱联网优化》的部分章节,感谢原作者。

1、前言

随着移动互联网的高速发展,移动端IM以移动网络作为物理通信载体早已深入人心,这其中的成功者就包括微信、手机QQ、支付宝(从即时通讯产品的角度来看,支付宝已经算的上是半个IM了)等等,也为移动端即时通讯开发者带来了各种可以参考的标杆功能和理念:语音对讲、具有移动端体验特性的图片消息、全时在线的概念、真正突破物理体验的实时通知等。

上述IM产品、功能和概念,在开发者间讨论时,无一例外都会被打上“移动端”这个特性,从网络通信的角度来说,这个特性的本质可以认为就是移动网络的特性。

以文件发送为例,传统的PC端IM(可以简单地理解为传统有线网络上的IM)可以直接实时点对点发送(理论上无需经过服务器中转)。

但在移动端IM里我们并不能这么干,原因是:

1)3G/4G/5G网络下P2P成功率并没有那么高(因为是对称型NAT,详见《通俗易懂:快速理解P2P技术中的NAT穿透原理》);

2)移动网络的信号跳变、抖动很难预测(甚至在你转身的瞬间,信号可能会立马由强变弱);

3)移动网络的延迟、丢包、重传等导致通信体验很差(就像从国内访问国外的网站那种“慢”,体验上是相似的);

4)延迟、丢包、重传带来的另一个后果就是电量消耗、流量消耗过大,这些都是不可接受的;

5)智能手机(主要是Android、iOS)的系统省电策略,导致网络可能被阻断,甚至进程被杀死,功能没办法在后台继续工作。

所以,正是移动网络的这些特性,使得原本在传统PC端再普通不过的功能(比如上面说的文件发送),在移动端IM中却不得不另想办法:以文件发送为例——主流的移动端IM现在都是使用服务器中转来搞定的。使用类似技术实现的功能,还有移动端IM里语音短消息的AMR音频小文件、图片消息的图片文件等。

那么回归到本文的正题:移动网络为什么会存在“弱”和“慢”这样的特性?

这个问题网络工程师来回答最为合适,对但于应用层的程序员来说,有关移动网络的理论太生涩枯燥,太难理解了。而对于网络工程师来说,他们也不理解“你们这些程序员到底在纠结移动网络的什么鬼?”。

就像黄品源的那首《那么爱你为什么》的歌曲里面莫文蔚的一段念白:“我讲又讲不清,你听又听不懂......”。这大概是应用层程序员很难能找到通俗易懂的有关移动网络资料的原因吧。

所以本文的目的,就是希望以通俗易懂的语言,帮助移动端IM开发者更好地理解移动网络的各种特性,使得开发出的功能能更好地适应移动网络,给用户带来更好的使用体验。

另外,《现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障》这篇文章也提到了本文所阐述的相关内容,强烈建议阅读。

学习交流:

- 即时通讯开发交流3群:185926912[推荐]

- 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM

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

2、系列文章

▼ 本文是《移动端IM开发者必读》系列文章的第1篇:

移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”》(本文)

移动端IM开发者必读(二):史上最全移动弱网络优化方法总结

如果您是IM开发初学者,强烈建议首先阅读《新手入门一篇就够:从零开发移动端IM》。

3、相关文章

1)关于网络通信的基础文章:

如果您对网络通信知识了解甚少,建议阅读《网络编程懒人入门系列文章》,更高深的网络通信文章可以阅读《不为人知的网络编程系列文章》。

2)涉及移动端网络特性的文章:

现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障

谈谈移动端 IM 开发中登录请求的优化

移动端IM开发需要面对的技术问题(含通信协议选择)

简述移动端IM开发的那些坑:架构设计、通信协议和客户端

微信对网络影响的技术试验及分析(论文全文)

腾讯原创分享(一):如何大幅提升移动网络下手机QQ的图片传输速度和成功率

腾讯原创分享(二):如何大幅压缩移动网络下APP的流量消耗(上篇)

腾讯原创分享(二):如何大幅压缩移动网络下APP的流量消耗(下篇)

如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源

4、正文引言

移动互联网颠覆着我们的生活方式,这个每时每刻伴随着我们的网络到底有哪些特点,又是如何影响我们接入信息世界的体验呢。

以下场景如似曾相识,敬请对号入座:

1)上班路上收到朋友分享的一张美女图片,缩略图目测衣服用料相当节俭,立马兴奋点开欲详细钻研,却发现怎么脱也脱不下来,不对,是“拖”不是“脱”,仰望苍天,欲哭无泪。

2)进电梯前收到女友一条消息:“你到底爱不爱我!”,当然马上回复“必须的必!”,电梯门关闭了,北风那个吹,菊花那个转,等到春暖梯开,满屏都是女友的问候“在吗!”、“这都要想那么久!”、“跟哪个MM聊天呢!”、“我生气了!”、“你是好人,再见!”,看着自己的回复刚刚发送成功,停在最后一行,整个互动信息一气呵成,都是眼泪。

3)和朋友聚餐,菜端上先拍照分享,再大快朵颐,明明坐在对面,偏偏还得用手机聊天,世界最远的距离,莫过于我们坐在一起,却只能用手指切磋。

有因有果,有道有术,不入虎穴焉得虎子,不扯了,进入正题。

5、移动网络的特点

理论上说,我们看到移动网络有如下三个典型特点:

1)移动状态网络信号不稳定,高时延、易抖动丢包、通道狭窄;

2)移动状态网络接入类型和接入点变化频繁;

3)移动状态用户使用高频化、碎片化、非WIFI流量敏感。

为什么?

参考【图一 无线网络链路示意】,我们尝试从物理上追根溯源:

▲ 图一:无线网络链路示意

根据“图一:无线网络链路示意”所示内容,我们可以得到以下信息。

第一、直观印象是通讯链路长而复杂:从(移动)终端设备到应用服务器之间,相较有线互联网,要多经过基站、核心网、WAP网关(好消息是WAP网关正在被依法取缔)等环节,这就像送快递,中间环节越多就越慢,每个中转站的服务质量和服务效率不一,每次传递都要重新交接入库和分派调度,一不小心还能把包裹给弄丢了。

第二、这是个资源受限网络:移动设备接入基站空中信道数量非常有限,信道调度更是相当复杂,如何复杂就不展开了,莫文蔚那首歌词用在这里正合适:“我讲又讲不清,你听又听不懂......”,最最重要的是分配的业务信道单元如果1秒钟不传数据就会立马被释放回收,六亲不认童叟无欺。

第三、这个链条前端(无线端)是高时延(除某些WIFI场景外)、低带宽(除某些WIFI场景外)、易抖动的网络:无线各种制式网络带宽上限都比较低而传输时延比较大(参见【表一 运营商移动信号制式带宽标准】),并且,没事就能丢个包裹玩玩,最最重要的是,距离基站的远近,把玩手机的角度、地下室的深度等等都能影响无线信号的质量,让包裹在空中飞一会,再飞一会......。这些因素也造成了移动互联网网络质量稳定性差、接入变化频繁,与有线互联网对比更是天上人间的差别,从【图二 有线互联网和移动互联网网络质量差异】中可以有更直观的感受。

▲ 图二:有线互联网和移动互联网网络质量差异


【表一 运营商移动信号制式带宽标准】数据来自互联网各种百科,定性不定量,仅供参考;

第四、这是个局部封闭网络:空中信道接入后要做鉴权、计费等预处理,WAP网络甚至还要做数据过滤后再转发,在业务数据有效流动前太多中间代理人求参与,效率可想而知。产品研发为什么又慢又乱,广大程序猿心里明镜似的;最最重要的是,不同运营商之间跨网传输既贵且慢又有诸多限制,聪明的运营商便也用上了缓存技术,催生了所谓网络“劫持”的现象。

如果我们再结合用户在移动状态下2G/3G/4G/WIFI的基站/AP之间,或者不同网络制式之间频繁的切换,情况就更加复杂了。

6、移动网络为什么“慢”

我们在移动网络的特点介绍中,很容易的得到了三个关键字:

1)“高时延”;

2)“易抖动”;

3)“通道窄”。

这些物理上的约束确实限制了我们移动冲浪时的速度体验,那么,还有别的因素吗。

当然有,汗牛充栋、罄竹难书:

1)DNS解析,这个在有线互联网上司空见惯的服务,在移动互联网上变成了一种负担,一个往复最少1s,还别提遇到移动运营商DNS故障时的尴尬;

2)链路建立成本暨TCP三次握手,在一个高时延易抖动的网络环境,并且大部分业务数据交互限于一个HTTP的往返,建链成本尤其显著;

3)TCP协议层慢启动、拥塞控制、超时重传等机制在移动网络下参数设定的不适宜;

4)不好的产品需求规定或粗放的技术方案实现,使得不受控的大数据包、频繁的数据网络交互等,在移动网络侧TCP链路上传输引起的负荷;

5)不好的协议格式和数据结构设计,使得协议封装和解析计算耗时、耗内存、耗带宽,甚至协议格式臃肿冗余,使得网络传输效能低下;

6)不好的缓存设计,使得数据的加载和渲染计算耗时、耗内存、耗带宽。

现在终于知道时间都去哪了,太浪费太奢侈,还让不让人愉快的玩手机了。天下武功,唯快不破,我们一起踏上“快”的探索之路吧。

更多有关TCP的基础理论性文章,可以看看下面的文章:

TCP/IP详解 - 第17章·TCP:传输控制协议

TCP/IP详解 - 第18章·TCP连接的建立与终止

TCP/IP详解 - 第21章·TCP的超时与重传

通俗易懂-深入理解TCP协议(上):理论基础

通俗易懂-深入理解TCP协议(下):RTT、滑动窗口、拥塞处理

理论经典:TCP协议的3次握手与4次挥手过程详解

7、针对移动网络“弱”和“慢”的特点,有优化办法吗?

答案是:有。

在移动互联网时代,对我们的产品和技术追求提出了更高的挑战,如何从容和优雅的面对,需要先从精神上做好充分的准备,用一套统一的思考和行动准则武装到牙齿。

从来就没有什么救世主,只有程序猿征服一切技术问题的梦想在空中飘荡。屡败屡战,把过往实践中的经验教训总结出来,共同研讨。针对移动网络的特点,我们总结一些实用方法,请看下篇《移动端IM开发者必读(二):针对移动弱网络特性的优化方法总结》。

(意犹未尽?请看下篇:《移动端IM开发者必读(二):史上最全移动弱网络优化方法总结》 )

附录:更多计算机网络方面的资料

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高性能网络应用的理论探索

不为人知的网络编程(一):浅析TCP协议中的疑难杂症(上篇)

不为人知的网络编程(二):浅析TCP协议中的疑难杂症(下篇)

不为人知的网络编程(三):关闭TCP连接时为什么会TIME_WAIT、CLOSE_WAIT

不为人知的网络编程(四):深入研究分析TCP的异常关闭

不为人知的网络编程(五):UDP的连接性和负载均衡

不为人知的网络编程(六):深入地理解UDP协议并用好它

不为人知的网络编程(七):如何让不可靠的UDP变的可靠?

网络编程懒人入门(一):快速理解网络通信协议(上篇)

网络编程懒人入门(二):快速理解网络通信协议(下篇)

网络编程懒人入门(三):快速理解TCP协议一篇就够

网络编程懒人入门(四):快速理解TCP和UDP的差异

网络编程懒人入门(五):快速理解为什么说UDP有时比TCP更有优势

技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解

让互联网更快:新一代QUIC协议在腾讯的技术实践分享

现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障

聊聊iOS中网络编程长连接的那些事

移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”

移动端IM开发者必读(二):史上最全移动弱网络优化方法总结

>> 更多同类文章 ……

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

目录
相关文章
|
11天前
|
数据采集 网络协议 算法
移动端弱网优化专题(十四):携程APP移动网络优化实践(弱网识别篇)
本文从方案设计、代码开发到技术落地,详尽的分享了携程在移动端弱网识别方面的实践经验,如果你也有类似需求,这篇文章会是一个不错的实操指南。
32 1
|
2月前
|
网络协议 程序员 5G
IM开发者的零基础通信技术入门(十五):理解定位技术,一篇就够
本系列文章尽量使用最浅显易懂的文字、图片来组织内容,力求通信技术零基础的人群也能看懂。但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获。如果您大学学习过《计算机网络》这门课,那么一定不要错过本系列文章。
59 7
IM开发者的零基础通信技术入门(十五):理解定位技术,一篇就够
|
2月前
|
缓存 监控 网络协议
移动端常见白屏问题优化之网络优化篇
本文将要分享的是得物技术团队针对移动端最常见的图片加载导致的端侧白屏问题,而进行的的移动网络方向的技术优化实践,希望能带给你启发。
36 1
移动端常见白屏问题优化之网络优化篇
|
2月前
|
网络协议 算法 程序员
IM开发者的零基础通信技术入门(十四):高铁上无线上网有多难?一文即懂!
本系列文章尽量使用最浅显易懂的文字、图片来组织内容,力求通信技术零基础的人群也能看懂。但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获。如果您大学学习过《计算机网络》这门课,那么一定不要错过本系列文章。
41 5
IM开发者的零基础通信技术入门(十四):高铁上无线上网有多难?一文即懂!
|
3月前
|
Java API UED
【实战秘籍】Spring Boot开发者的福音:掌握网络防抖动,告别无效请求,提升用户体验!
【8月更文挑战第29天】网络防抖动技术能有效处理频繁触发的事件或请求,避免资源浪费,提升系统响应速度与用户体验。本文介绍如何在Spring Boot中实现防抖动,并提供代码示例。通过使用ScheduledExecutorService,可轻松实现延迟执行功能,确保仅在用户停止输入后才触发操作,大幅减少服务器负载。此外,还可利用`@Async`注解简化异步处理逻辑。防抖动是优化应用性能的关键策略,有助于打造高效稳定的软件系统。
74 2
|
3月前
|
网络协议 程序员 5G
IM开发者的零基础通信技术入门(十三):为什么手机信号差?一文即懂!
本系列文章尽量使用最浅显易懂的文字、图片来组织内容,力求通信技术零基础的人群也能看懂。但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获。如果您大学学习过《计算机网络》这门课,那么一定不要错过本系列文章。
53 0
|
5月前
|
边缘计算 JSON 网络协议
移动端IM开发者必读(三):爱奇艺移动端跨国弱网通信的优化实践
本次分享的文章内容,基于爱奇艺面向全球用户推出的国际版,在海外跨国网络环境复杂的前提下,针对性地做了一系列弱网优化实践,取得了不错的效果,在此总结分享我们的一些做法和优化思路,希望对你有所帮助。
74 1
|
5月前
|
网络协议 Java 程序员
TCP/IP协议栈是网络通信基础,Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用
【6月更文挑战第23天】 **TCP/IP协议栈是网络通信基础,它包含应用层(HTTP, FTP等)、传输层(TCP, UDP)、网络层(IP)、数据链路层(帧, MAC地址)和物理层(硬件信号)。Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用,如Socket和ServerSocket用于客户端和服务器通信。**
55 3
|
5月前
|
机器学习/深度学习 Java Serverless
Java开发者的神经网络进阶指南:深入探讨交叉熵损失函数
今天来讲一下损失函数——交叉熵函数,什么是损失函数呢?大体就是真实与预测之间的差异,这个交叉熵(Cross Entropy)是Shannon信息论中一个重要概念,主要用于度量两个概率分布间的差异性信息。在信息论中,交叉熵是表示两个概率分布 p,q 的差异,其中 p 表示真实分布,q 表示预测分布,那么 H(p,q)就称为交叉熵:
|
5月前
|
数据采集 存储 中间件
Scrapy,作为一款强大的Python网络爬虫框架,凭借其高效、灵活、易扩展的特性,深受开发者的喜爱
【6月更文挑战第10天】Scrapy是Python的高效爬虫框架,以其异步处理、多线程及中间件机制提升爬取效率。它提供丰富组件和API,支持灵活的数据抓取、清洗、存储,可扩展到各种数据库。通过自定义组件,Scrapy能适应动态网页和应对反爬策略,同时与数据分析库集成进行复杂分析。但需注意遵守法律法规和道德规范,以合法合规的方式进行爬虫开发。随着技术发展,Scrapy在数据收集领域将持续发挥关键作用。
106 4

热门文章

最新文章