Jack Jiang

我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
posts - 531, comments - 13, trackbacks - 0, articles - 1

2026年2月25日

本文由vivo 互联网服务器团队Deng Qian分享,有排版和内容优化。

1、引言

在了解加密原理前,我们来看看这样一个故事:

小红和小明是情侣,一天,小红给小明发短信说:“亲爱的,我银行卡上没有钱了,你给我转1万块钱吧。”有过上当受骗经历的人都知道这有可能是小偷偷了小红手提包,然后拿手机发的短信。

不过我们小明学过加密原理,于是他回复说:“你直接拿我的银行卡刷吧,密码加上我们第一次约会的日期就是663156。”

很明显,只有小明和小红知道他们第一次约会是什么时候,假设是2008年4月1号,那么小红就可以根据计算663156-200841=462315得到银行卡密码,就可以消费了。

这就是加密的本质:将信息与密钥相加得到加密后的信息,只有知道密钥的人才能解密。

本文将以通俗案例讲解加密本质,介绍对称加密(含 AES、迪菲–赫尔曼密钥交换)与非对称加密(RSA)原理、特点及应用,并阐释其数学基础。

cover-opti

2、系列文章

  1. 即时通讯安全篇(一):正确地理解和使用Android端加密算法
  2. 即时通讯安全篇(二):探讨组合加密算法在IM中的应用
  3. 即时通讯安全篇(三):常用加解密算法与通讯安全讲解
  4. 即时通讯安全篇(四):实例分析Android中密钥硬编码的风险
  5. 即时通讯安全篇(五):对称加密技术在Android平台上的应用实践
  6. 即时通讯安全篇(六):非对称加密技术的原理与应用实践
  7. 即时通讯安全篇(七):用JWT技术解决IM系统Socket长连接的身份认证痛点
  8. 即时通讯安全篇(八):如果这样来理解HTTPS原理,一篇就够了
  9. 即时通讯安全篇(九):你知道,HTTPS用的是对称加密还是非对称加密?
  10. 即时通讯安全篇(十):为什么要用HTTPS?深入浅出,探密短连接的安全性
  11. 即时通讯安全篇(十一):IM聊天系统安全手段之通信连接层加密技术
  12. 即时通讯安全篇(十二):IM聊天系统安全手段之传输内容端到端加密技术
  13. 即时通讯安全篇(十三):信创必学,一文读懂什么是国密算法
  14. 即时通讯安全篇(十四):网络端口的安全防护技术实践
  15. 即时通讯安全篇(十五):详解硬编码密码的泄漏风险及其扫描原理和工具
  16. 即时通讯安全篇(十六):对称加密 vs 非对称加密?一文搞懂!》(☜ 本文

3、什么是秘钥

1

既然加密需要密钥,那么密钥是什么呢?

密钥是作用于加密时的一串密码,通过密钥进行信息加密,传输,到达接收者和监听者,由于接收者也有密钥,所以接收者可以根据密钥进行解密。从而防止通讯信息泄露。

4、什么是对称加密

2

前言讲的故事就是一个对称式加密,小明和小红都知道第一次约会的日期。所以传统的对称式加密需要通讯双方都保存同一份密钥,通过这份密钥进行加密和解密。所以对称加密也称为单密钥加密。

对称加密的优势在于加解密速度快,但是安全性较低,密钥一旦泄露,所有的加密信息都会被破解。同时密钥的传输和保密也成为难题。为了解决密钥传输的问题,出现通过密钥交换建立共享密钥的技术。具体如何建立共享密钥呢?我们往下看。

5、对称加密之建立共享密匙

在小明、小红和小偷的三人世界中,由于小明是学过加密原理的,知道迪菲–赫尔曼密钥交换(Diffie-Hellman Key Exchange),所以他知道如何建立共享密钥。

5.1 颜料混合把戏

接下来我们看看如何通过颜料混合把戏建立共享密钥吧。

假设在房间中有小明、小红和小偷三个人,每个人各自拥有相同颜色的颜料。在房间的正中间也有这些颜料。接下来,小明要和小红建立共享密钥了。

此时,小明对大家说:“我要用蓝色。”然后小明从自己的颜料里选择了黄色,这个黄色就是小明的私钥,小红和小偷都不知道。

小明将自己的私钥黄色与公钥蓝色混合后,得到了一种不能分解的颜色,我们就叫“小明-蓝色”吧(虽然大家都知道黄+蓝变绿,但是这里我们为了知道是谁的混合色,还是以名字加公钥颜色来称呼),然后小明将“小明-蓝色”公布了出来。

同样,小红听到了小明说用蓝色后,也选择了自己的私钥红色与公钥蓝色混合,得到了“小红-蓝色”并公布了出来。

此时,房间中小明、小红、小偷三人都知道了几个信息:

  • 1)他们都用了蓝色;
  • 2)小明公布了“小明-蓝色”(小红和小偷不知道是什么颜料与蓝色的混合);
  • 3)小红公布了“小红-蓝色”(小红和小偷不知道是什么颜料与蓝色的混合)。

接下来,见证奇迹的时刻到了:小明拿到“小红-蓝色”与自己的私钥“黄色”混合,得到“小红-蓝色-小明”的新颜料。同样的,小红拿到“小明-蓝色”与自己的私钥“红色”混合,得到“小明-蓝色-小红”。大家发现了吗?“小红-蓝色-小明”和“小明-蓝色-小红”是一模一样的颜色。而小偷不知道小明和小红的私钥颜色,无法混合出与他们相同的颜色。

至此,共享密钥建立起来了。在了解了共享密钥的建立过程后,我们将告别实体颜料,采用数字的方式来建立共享密钥。

注:大家可能想到了,小偷可以根据自己的颜料与公钥“蓝色”混合,尝试得出“小明-蓝色”和“小红-蓝色”。这样的方法称之为穷举法,也就是尝试所有的可能性,进行信息破解,所以加密算法在理论上都是可以通过穷举法破解的,只不过实际上,超级计算机都需要计算万亿年才能穷举出所有可能性。

5.2 乘法把戏

首先,我们假设乘法如同颜料混合一样,是不能分解的,看看如何用乘法与数字建立共享密钥。

小明公开了一个数字5,然后小明选择了一个私人数字4,然后利用乘法将两者混合起来,得到“小明-5”(20),接下来小红也选择了一个私人数字7得到“小红-5”(35),小明拿到35*4=140,小红拿到20*7=140。共享密钥建立完成。

大家也发现了,小偷知道20,35,5这三个数字后,用除法就能算出小明和小红的私钥。所以,接下来我们将了解实际使用中的如何使用乘法把戏来防止私钥被计算出来的。

6、对称加密之迪菲·赫尔曼密钥交换算法

我们都知道幂运算,但是要让计算机计算就比较难了。所以,我们会用幂运算作为建立共享密钥的乘法把戏。同时,我们还要了解钟算的原理,这里的钟可以理解成我们经常看到的时钟,我们常见的时钟最大是12,如果当前是10点,过了4个小时后,就变成了下午2点。也就是(10+4)mod12=2。了解了钟算和幂运算后,就开始进入正题吧。

还是小明、小红和小偷的房间,小明声明了钟为11,幂运算的底为2,接下来小明和小红分别选择了自己的私钥4和7。

1)第一步:小明混合自己的“小明-11,2”得到,小红混合自己的“小红-11,2”得到。

2)第二步:小明拿到“小红-11,2”(7)进行计算,小红拿到“小明-11,2”(5)进行计算。

大家注意到了吗:小明和小红建立了共享密钥3,而小偷无法根据已知的11、2、5、7这几个数字计算出密钥或小明小红的私钥。有了共享密钥后,小明和小红就可以安全进行加密传输了。

迪菲-赫尔曼密钥交换:

3

7、 对称加密之AES加密过程

AES 的全称是 Advanced Encryption Standard ,是最流行的对称加密算法,其加解密速度快。

AES支持128位,192位,256位三种长度的密钥,密钥越长安全性越高。AES加密时会把明文切分成许多小块的明文,然后对每块明文单独加密,将加密后的密文传送出去,接收方再将密文切块解密,得到明文。如下图所示。

AES加密原理:

4

上一步中小明和小红已经协商好了密钥3。接下来就可以通过对称加密进行通信了。

在小明、小红和小偷的房间中,小明想把密码“462315”告诉小红,于是:

1)第一步:将密码按照一位的长度进行切分(实际中通常按128位进行切分);就变成了“4”“6”“2”“3”“1”“5”;

2)第二步:对每块明文通过密钥3进行加密,结果就是“795648”,然后小明告诉小红和小偷:“我的密码是795648”;

3)第三步:小红拿到密文后,对密文进行切块,对每块通过密钥3进行解密,就得到了正确的密码“462315”,而小偷由于不知道密钥,就无法解密出正确的信息。

8、什么是非对称加密

8.1 概述

在对称加密中,加密和解密使用的是同一份密钥。所以,在非对称加密中,加密和解密使用的是不同的密钥。

非对称加密中的密钥分为公钥和私钥。公钥顾名思义就是公开的,任何人都可以通过公钥进行信息加密,但是只有用户私钥的人才能完成信息解密。非对称加密带来了一个好处,避免了对称式加密需要传输和保存同一份密钥的痛苦。

现在最流行的非对称加密算法就是RSA加密算法,具体是怎么做的呢,我们继续往下看。

8.2 RSA加密过程

百科是这么解释的:

RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。

5

▲ RSA算法的作者合影(照片拍摄于1978年)

前面我们讲了如何通过钟算和幂函数建立不可逆(计算机可以通过穷举法计算出私钥,实际场景中就算是超级计算机也要计算几万亿年之久)的共享密钥。由于小红是小明的女朋友,小明天天在小红面前给她讲RSA加密算法的原理,所以小红也知道怎么得出自己的公钥和私钥。

接下来我们一起跟着小红的脚步,看看RSA加密的公钥和私钥是怎么计算出来的:

  • 1)第一步:小红选择了两个很大的质数p和q,这里为了便于计算,选择2和11;
  • 2)第二步:计算p和q的乘积n=p*q=2*11=22;
  • 3)第三部:计算n的欧拉函数φ(n)=(p-1)*(q-1)=10;
  • 4)第四步:选择一个小于φ(n)且与φ(n)互质的整数e,{1,3,7,9},这里选择e=7;
  • 5)第五步:计算e对于φ(n)的模反元素(ed mode φ(n) = 1)d,d=3。

到这里小红就得到了他自己的公钥(n,e)和私钥(n,d)。其中n就是钟大小,e和d就是幂函数的幂。接下来就通过计算出来的公钥和私钥进行数据的加解密。

还是小明、小红和小偷三个人,小红对大家说,我的公钥是(22,7),小明知道了小红的公钥后,想讲自己的信息“14”告诉小红,于是就用小红公开的公钥进行加密。

具体步骤如下:

  • 1)第一步:小明根据要加密的信息14进行计算,得到加密后的信息20,然后将20告诉小红和小偷;
  • 2)第二步:小红有自己的私钥,将加密信息20进行解密,,得到了小明想传递给小红的信息。而小偷呢,知道22,7,20,但是不知道小红的密钥(22,3),无法解密出正确的信息。

RSA加密算法在数字签名中也发挥着巨大的作用:假设小偷可以假冒小红,说小红的公钥是(22,9),而小明不知道是小偷假扮的,按照小偷的公钥加密后,结果被小偷解密了。数字签名的作用就是防止信息被篡改,小红说她的公钥是(22,7)的同时,使用私钥给这段信息(通常使用MD5值计算签名)加上签名,小明得到公钥(22,7)和签名13,小明拿到签名后利用公钥计算出信息是否被篡改。

6

9、加密的实际作用

7

本文使用的很小的数来进行加密原理的讲解,为了是读者可以方便进行计算。

在实际使用中(n,e)都是特别大的数,其中n的长度都在768以上,1024长度被认为是基本安全的。

(1230186684530117755130494958384962720772853569595334792197322452151726400507263657518745202199786469389956474942774063845925192557326303453731548268507917026122142913461670429214311602221240479274737794080665351419597459856902143413=

33478071698956898786044169848212690817704794983713768568912431388982883793878002287614711652531743087737814467999489

×

36746043666799590428244633799627952632279158164343087642676032283815739666511279233373417143396810270092798736308917)

10、写在最后

8

或许看到这里,大家心里还有许多疑惑:

  • 1)为什么小明和小红建立共享密钥时,通过几次幂运算和钟算就能得到一样的共享密钥?
  • 2)为什么RSA加密算法要用两个质数?
  • 3)为什么通过公钥加密的信息可以通过私钥解开?

加密算法的背后,是一道道迷人的数学难题。而RSA加密算法之所以被广泛运用,是因为一个名为整数分解的古老数学问题,你可以轻易找到两个很大的质数相乘得到一个结果n,但是要将这个结果n分解回两个质数就变得极其困难。尽管这个所谓的“整数分解”问题被研究了数个世纪,还没人能找到一个足够高效的通用方法解决它,并对标准RSA钟大小造成危害。

数学史中充满了未解决的问题,尽管这些迷人的问题缺乏任何实际应用,却单靠其美学特质就吸引了数学家进行深入探究。

令人颇感惊讶的是,许多这类迷人但显然无用的问题后来都有了很大的实用价值,这一价值只有在问题被研究数个世纪后才得以破解。整数分解这一问题由来已久。对其最早的严肃研究似乎是在17世纪,由数学家费马(Fermat)和梅森(Mersenne)进行的。欧拉(Euler)和高斯(Gauss)两位数学“泰斗”也在接下来的世纪里对这一问题做出了贡献。但直到公钥加密于20世纪70年代被发明,分解大数字的困难才成为一个实际应用的关键。

11、本文小结

最后总结一下。

首先:我们通过一个诈骗短信的例子,引出了加密的原理就是信息+密钥,密钥就是对信息进行加解密的一串数字。

然后:通过颜料混合把戏形象的演示了如何建立共享密钥。在使用乘法建立共享密钥的过程中,学习了钟算和幂运算,接着我们了解了RSA加密算法的过程,通过两个质数生成公钥和私钥。

最后:我们根据公钥进行信息加密,再通过私钥完成信息解密。

12、参考资料

[1] 探讨组合加密算法在IM中的应用

[2] 一文读懂常用加解密算法与网络通讯安全

[3] 非对称加密技术的原理与应用实践

[4] 你知道,HTTPS用的是对称加密还是非对称加密?

[5] IM聊天系统安全手段之通信连接层加密技术

[6] IM聊天系统安全手段之传输内容端到端加密技术

[7] 信创必学,一文读懂什么是国密算法的

[8] 传输层安全协议SSL/TLS的Java平台实现简介和Demo演示

[9] 理论联系实际:一套典型的IM通信协议设计详解(含安全层设计)

[10] 微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解

[11] 来自阿里OpenIM:打造安全可靠即时通讯服务的技术实践分享

[12] 简述实时音视频聊天中端到端加密(E2EE)的工作原理

[13] 移动端安全通信的利器——端到端加密(E2EE)技术详解

[14] 通俗易懂:一篇掌握即时通讯的消息传输安全原理

[15] 一分钟理解 HTTPS 到底解决了什么问题

[16] 一篇读懂HTTPS:加密原理、安全逻辑、数字证书等

[17] 基于Netty的IM聊天加密技术学习:一文理清常见的加密概念、术语等

[18] 手把手教你为基于Netty的IM生成自签名SSL/TLS证书

[19] 即时通讯初学者必知必会的20个网络编程和通信安全知识点

[20] 零基础IM开发入门(五):什么是IM系统的端到端加密?

[21] 微信团队分享:来看看微信十年前的IM消息收发架构,你做到了吗

[22] 零基础IM开发入门(一):什么是IM系统?

[23] 一套亿级用户的IM架构技术干货(上篇):整体架构、服务拆分等

[24] 转转平台IM系统架构设计与实践(一):整体架构设计

[25] 一套分布式IM即时通讯系统的技术选型和架构设计

即时通讯技术学习:

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

- 开源IM框架源码:https://github.com/JackJiang2011/MobileIMSDK备用地址点此

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

posted @ 2026-04-09 12:29 Jack Jiang 阅读(19) | 评论 (0)编辑 收藏

本文由悟空聊架构分享,有修订和排版优化。

1、引言

本文将通俗易懂地为你类比解释UDP与TCP的核心差异,包括如何基于UDP实现TCP的可靠传输:通过模拟三次握手、添加序列号与确认机制解决顺序和丢包问题,利用滑动窗口控制流量,并引入拥塞控制算法来动态调整发送速率等。

cover-opti

2、系列文章

本文是该系列文章中的第 5 篇:

  1. 网络编程入门如此简单(一):假如你来设计网络,会怎么做?
  2. 网络编程入门如此简单(二):假如你来设计TCP协议,会怎么做?
  3. 网络编程入门如此简单(三):什么是IPv6?漫画式图文,一篇即懂!
  4. 网络编程入门如此简单(四):一文搞懂localhost和127.0.0.1
  5. 网络编程入门如此简单(五):UDP跟TCP相比,到底差了什么?》(* 本文

3、写在前面

1、背景

本题是我在面试中,技术总监问我的一道真题,当时答得不太好,所以把它揪出来总结了下。后来问了下总监,总监说这是阿里的面试题。。

其实面试官主要是想让我说出 UDP 和 TCP 的原理上的区别,怎么给 UDP 加些功能实现 TCP。

看好去很容易就能说出一两个 TCP 和 UDP 的区别,但如果能用女朋友都能听懂的方式该怎么说呢?

女朋友:我不想听课本上讲的!我听不懂呀~

下面我会以大白话的方式来解答上面的问题。

4、UDP协议的主要特点

2、UDP-的特点

UDP 让我想起了刚毕业参加工作那会,一名毕业菜鸟。

1)沟通简单:

领导安排的任务,直接干就完了。

UDP 也是,相信网络世界永远是美好的,我发送的包是很容易送到的,接收方也是很容易组装的。数据结构也很简单,不需要大量的数据结构、处理逻辑、包头字段。

2)轻信他人:

测试人员报的 bug 我也不会和她争论什么,永远相信测试人员是对的,测试人员说啥就是啥,我改就是。

UDP 也是,不会建立连接,有个端口号,谁都可以监听这个端口号往上面发数据。也可以从这个端口号传给任何人数据。反正我只管发就是。

3)不会讨价还价:

产品经理昨天说手机壳需要根据心情变色,测试人员说这个 bug 要把关联的两个 bug 一起修掉。那就按照他们说的做吧!

UDP 也是,不懂坚持和退让。也就是根据网络情况进行拥塞控制。无论网络丢包多严重,我还是照样发~

5、UDP协议的使用场景

3、UDP-使用场景

针对像我那时候毕业菜鸟的情况,领导给我安排了三种工作环境让我选。

1)内部系统,任务简单,模块单一,不需要考虑代码的关联影响,即使失败了也没有关系。

UDP 也是,需要资源少,网络情况比较好的内网,或者对于丢包不敏感的应用。

2)有一个强力的团队支持,都是中高级开发、测试人员,团队成员打过很多年交道,互相信任。有什么问题,吼一嗓子就可以了!

UDP 也是,不需要一对一沟通来建立连接,可以广播的应用。

3)一个新项目,需要有激情,对于刚毕业的菜鸟,都是有很强的自主能动性的,也不会耍滑头,躲在厕所玩手机,带薪拉shi ?即使项目不忙,我也抓紧时间干。项目忙,还是一样干!

UDP 也是,猛着发包就是,主要应用在需要处理速度快,时延低,可以容忍少数丢包的情况。即使网络情况不佳,发包就是~

针对上面的三大场景,UDP 常用在实时竞技游戏,IoT 物联网,移动通信领域。

6、TCP协议的主要特点  

4、TCP-的特点?

6.1 面向连接

TCP 和 UDP 是传输层里面比较重要的两个协议。大部分面试的时候都会问到两者的区别。而大部分都会两句,比如 TCP 是面向连接的,UDP 是面向无连接。

那什么是面向连接?

TCP 三次握手是我们常常念叨和背诵的。而在这三次握手成功后,就是建立连接成功。

那什么又叫面向呢?

我们也常听到面向对象编程、面向切面编程、面向服务编程。那到底什么是面向?

在我看来 面向 就是遵循一定的协议、规范、数据结构等来做一系列事情。

比如面向连接,就是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据来保证所谓的面向连接的特性。

知道了 TCP 的是用三次握手来建立连接,那我们是否可以让 UDP 也发三个包来模拟 TCP 建立连接?可以是可以,但是如果只是建立,而不是面向连接,其实意义不大。

那 TCP 面向连接做了哪些事情?

TCP 提供可靠交付,通过 TCP 连接传输的数据,可以无差错、不丢失、不重复、并且按序到达。而 UDP 继承了 IP 包的特性,不保证不丢失,不保证按顺序到达。

6.2 面向字节流

TCP 是面向字节流,所谓字节流,就是发的是一个流,没头没尾。TCP 自己维护流状态。

UDP 基于 IP 数据报,一个一个地发,一个一个地收。

6.3 拥塞控制

TCP 拥有拥塞控制,如果包丢弃了或者网络环境不好了,就会根据网络情况自行控制自己的行为,看下是发快点还是发慢点。

UDP 则没有这么智能了, 你让我发,我就发呗,反正是你让我发的,其他的一概不管~

6.4 有状态服务

TCP 是一个有状态的服务,有状态可以理解为:我记录了哪些发送了,哪些没有发送,哪些接收到了,哪些没接收到,应该接收哪个了,一点差错都不行。TCP 干的事情可真多!

而 UDP 则不是有状态的服务,我只管发,其他的就交给接收端吧,有点任性是吧?

7、如何让UDP追上TCP的能力?

建立连接上面已经讲到了,三次握手和四次握手,UDP 也可以模拟去做。

那下面还有几个问题:

  • 1)顺序问题;
  • 2)丢包问题;
  • 3)流量控制;
  • 4)拥塞控制。

TCP 的数据结构长这样:

5

其实如果你能把这些结构讲清楚,就已经理解了 TCP 的核心功能。下面我还是用大白话的方式来讲解上面的四个问题。

顺序问题和丢包问题可以利用确认与重发的机制。假如包收到了,可以做一个确认,发送一个 ACK 给发送端,告诉他我收到了。假如有的包提前到了,就缓存着。假如有包丢失了,就可以超时重试。超时重试不宜过短,时间必须大于往返时间 RTT,否则会引起不必要的重传。也不宜过长,如果超时时间过长,访问就变慢了。那怎么确定这个时间,可以通过采样 RTT 的时间,进行加权平均。还需要根据网络状况,动态变化。可以了解下自适应重传算法。

流量控制就是根据网络情况调整发包的速率。利用的是滑动窗口。在对于包的确认中,同时会携带一个窗口的大小,只要利用好这个窗口大小,就能很好地调整发包速率,发的报文段不要超过窗口的大小就 OK。

6

拥塞控制主要用来避免包丢失和超时重传,如果出现了这两种现象,就说明发的速率太快了。那最开始怎么知道发送速率呢?其实开始时只发送一个报文段数据,如果收到一个确认,则倍增报文段,依次类推。当发现超时重传时,就又回到只发送一个报文段的情况,这个就是慢启动,这种方式不合适。其实还有一种快速重传算法,简单来说就是拥塞窗口减半,后续线性增速。针对于算法怎么实现的,这里就不展开讲述了。

7

至此,我用大白话的方式讲解了 UDP 和 TCP 的区别,以及 UDP 缺什么功能,需要怎么去弥补才能实现 TCP 的功能。相信这样回答的思路可以让面试官觉得还是有点东西的。

8、参考资料

[1] TCP/IP详解 - 第11章·UDP:用户数据报协议

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

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

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

[5] 快速理解TCP协议一篇就够

[6] 快速理解TCP和UDP的差异

[7] 快速理解为什么说UDP有时比TCP更有优势

[8] 一泡尿的时间,快速搞懂TCP和UDP的区别

[9] 跟着动画来学TCP三次握手和四次挥手

[10] 假如你来设计网络,会怎么做?

[11] 假如你来设计TCP协议,会怎么做?

[12] 深入地理解UDP协议并用好它

[13] 如何让不可靠的UDP变的可靠?

[14] UDP比TCP高效?还真不一定!

[15] 可靠传输的TCP协议send成功就意味着数据一定发出去了?

[16] 为何基于TCP协议的移动端IM仍然需要心跳保活机制?

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

即时通讯技术学习:

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

- 开源IM框架源码:https://github.com/JackJiang2011/MobileIMSDK备用地址点此

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

posted @ 2026-03-17 15:35 Jack Jiang 阅读(33) | 评论 (0)编辑 收藏

     摘要: 本文由网易云音乐技术团队入云分享,有修订和排版优化。1、引言说起 IM,大家应该都或多或少了解过一些,一般被熟知是在一些聊天场景里应用的比较多;而一般情况下我们常接触的业务中大多是做一些接口的查询提交之类的操作,用正常的 Ajax 请求就足以满足需求,比较难接触到 IM 这种方案。但如果涉及到一些需要频繁更新数据的业务场景,使用常规接口查询难免会给服务端造成比较大的性能开销,并且数据更新的延迟也会...  阅读全文

posted @ 2026-03-02 21:56 Jack Jiang 阅读(46) | 评论 (0)编辑 收藏

1、基本介绍

logo

RainbowTalk 是一套基于 MobileIMSDK 开源通信框架的产品级纯血鸿蒙NEXT端IM系统。RainbowTalk与姊妹产品 RainbowChat技术同源 ,不同于市面上某些开源或售卖的demo级代码,RainbowChat已被成千上万真实的客户使用过,解决了大量的产品逻辑、代码逻辑、细节优化等问题。

RainbowTalk 由纯ArkTS编写、全新开发,没有套壳、也没走捷径,原生“纯血”(详见:《RainbowTalk详细介绍)。

RainbowTalk 无闭源代码(包括核心通信层),这与市面上知识产权来路不明、无核心技术、无售后的“三无”产品,或打着开源名义实则闪烁其词不开源核心的产品有本质区别。

RainbowTalk 是 RainbowChat 和 RainbowChat-Web 的姊妹产品。

2

☞ 详细介绍:http://www.52im.net/thread-4822-1-1.html
☞ 运行截图:http://www.52im.net/thread-4824-1-1.html (运行视频
☞ 下载体验:http://www.52im.net/thread-4825-1-1.html

2、关于MobileIMSDK开源框架

mb_logo_opti

MobileIMSDK 是一套全平台开源IM即时通讯聊天框架,超轻量级、高度提炼,一套API优雅支持UDP 、TCP 、WebSocket 三种协议,客户端支持iOS、Android、H5、小程序、Uniapp、标准Java、纯血鸿蒙等,服务端基于Netty编写,性能卓越、易于扩展。

工程同步开源地址:

3、功能情况

1)支持文本消息、语音留言消息、图片消息、大文件消息(支持断点上传)、短视频消息、个人名片、群名片、Emoji表情、消息撤回、消息转发、消息引用、“@”功能、“扫一扫”功能等;
2)支持一对一陌生人聊天模式;
3)支持一对一正式好友聊天模式;
4)支持多对多群聊聊天模式;
5)完善的群组信息管理:建群、退群、解散、转让、邀请、踢人、群公告等;
6)完整的注册、登陆(同时支持手机验证码登录和密码登录)、密码找回等功能闭环;
7)个人中心功能:改基本信息、改个性签名、改头像、改密码等;
8)支持个人相册查看;
9)完整的离线消息/指令拉取机制;
10)完整的本地消息/指令缓存机制,节省网络流量;
11)完整的富媒体文件(语音、大文件、图片、短视频)缓存机制,节省网络流量;
12)完整的好友关系管理:查找好友、发出请求、处理请求、删除好友、好友备注等;
13)其它未提及的功能和特性请自行下载体验

RainbowTalk线上版本目前仅作演示和研究之用,运行环境配置最小化(仅1核1G和1MB带宽),请客观评估。

4、技术亮点

1)与姊妹产品RainbowChat 技术同源(算法和功能逻辑历经时间考验和大量客户面辐射,可靠性一定优于短时间内堆砌功能的产品);
2)通信底层到上层功能,完全自主开发——版权清晰、技术资产可控;
3)超轻量级——纯ArkTS编写且无任何重依赖;
4)通讯核心层基于MobileIMSDK 工程,保证了业务代码与通信核心的高度分层(经验不足的IM产品是做不到这一点的);
5)支持完整的消息送达保证(QoS)机制,保证送达率,理论丢包率约为0.0001%;
6)基于 MobileIMSDK 工程的自有协议,未来的流量压缩对于APP端的节电控制和流量控制、服务端的网络吞吐等都有完全的控制能力;
7)完善的网络状况自动检测、断网重连等服务自动治愈能力;
8)核心通信算法和实现均为自主原创(历经10年,并非开源拼凑),保证了技术的持续改进、升级、扩展;
9)聊天协议兼容和互通:实现了与姊妹产品RainbowChatRainbowChat-Web的完全兼容和消息互通;

5、技术原则

为了更易学习、研究、2次开发,RainbowTalk始终遵从:

1)界面与通信解偶:UI界面与网络通信层和数据处理层代码解耦,UI界面的重构、维护、改版都非常容易和优雅;

3)核心内聚和收敛:得益于长期的提炼和经验积累,网络通信核心层高度封装,开发者无需理解复杂网络算法。

4)纯 ArkTS 实现:纯ArkTS编写,无重量级框架和库依赖(更无Native代码),可干净利落地对接各种既有系统;

5)跨平台运行能力:受益于鸿蒙系统的跨端特性,理论上本应用的客户端可运行于任何支持鸿蒙Next的平台上;

6)架构设计简洁:简单直接,易于学习,能少一个分层则绝不强行炫技;

7)简单地就是最好的:始终贯彻简单直接的互联网产品技术理念。

6、主要功能运行截图

(☞ 更多运行截图 、更多运行视频 、详细介绍 ☜)

all-in-one-拼合总图-v2.6(导出35size90pct)_3比4

本文内容引用自:http://www.52im.net/thread-4822-1-1.html) 

posted @ 2026-02-25 17:47 Jack Jiang 阅读(37) | 评论 (0)编辑 收藏

Jack Jiang的 Mail: jb2011@163.com, 联系QQ: 413980957, 微信: hellojackjiang