51学通信技术论坛

 找回密码
 立即注册
搜索
楼主: readhere
打印 上一主题 下一主题

微信的信令风暴解决途径   [复制链接]

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

跳转到指定楼层
楼主
发表于 2013-4-16 17:26:27 |显示全部楼层 |倒序浏览 一键分享 一键分享
本帖最后由 readhere 于 2013-4-23 10:18 编辑

  微信的信令风暴是微信收费的一个主要原因,而频密的心跳包是造成微信的信令风暴的直接因素。从技术上看,心跳包还是由于移动通信网络与互联网的寻址方式不同,不匹配。

   移动通信网络用电话号码,简称MSISDN,这是固定的;互联网通常采用动态的IP地址,每次业务过程都需要分配。微信等互联网应用为了摆脱移动通信网络,从而实现免费的目的,直接使用IP地址,而不是采用电话号码。互联网应用为了避免IP地址被释放,造成无法寻址,只好引入了心跳机制。   其实,移动终端在移动网络中的状态是明确的,可以被移动网络掌握的。互联网应用如果能与移动网络建立联系,通过电话号码寻址,心跳包就大可不必了。

具体操作方式是:
   终端发出的数据包对IP包头做一下修正,源地址改为MSISDN的低9位,而不是终端获得的IP地址。
   GGSN在发出数据包时,将源地址改为自己的地址池的IP地址,并建立MSISDN与IP地址的连接关系。
   GGSN在收到数据包后,根据MSISDN与IP地址的连接关系,将目的地址翻译为MSISDN的低9位,再寻址到终端。
   优点:
   无需为终端分配IP地址,简化建立过程,解决心跳包问题。
   缺点:
   需要翻译设备;有可能MSISDDN的低9位重复。

由于对核心网不是很了解,以上的想法是否只是空想,希望得到大家的指点。

  [4.23 修正]
    压缩MSISDN引起了一些争议,其实不用压缩MSISDN,也可以取消心跳机制,具体方法:
     1. 终端的APP激活后,把MSISDN发给微信服务器;
     2. 微信服务器遇到有消息要推送,直接向终端发送特殊格式的SMS,含推送消息的获取地址;
     3. APP收到特殊格式的SMS后,从后台向微信服务器取推送消息;
     4. APP显示推送消息。
   


Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

沙发
发表于 2013-4-17 14:35:23 |显示全部楼层
  现在“微信”事件是热点,众说纷纭,正是发出技术人声音的时候。在核心网的领域,的确还是要向大伙多请教。

1. 关于MSISDN,在SIM卡里有,手机应该可以读到。

2. 我已经考虑了一种方法,将MSISDN压缩到32比特,这样就可以借用IPV4的地址了。

3. 我最近才用微信,还不是很熟。微信中能设状态是什么(比如在线、隐身、离开)吗?我认为微信中的心跳包主要是告诉腾讯自己的IP地址,这样一旦微信服务器有最新的信息,可以推送下来。http://tech.sina.com.cn/i/csj/2013-04-16/09368244003.shtml提到了5分钟的周期。

使用道具 举报

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

板凳
发表于 2013-4-17 20:40:43 |显示全部楼层
  to wenliu:
   MSISDN寻址是移动网络原生的方式,如果微信等互联网应用能采用,无疑是多赢的结果,运营商不应该反对,难道他们希望自己的网络拥塞?

  to NMW:
    心跳是为了能及时push消息,取消心跳后,微信服务器无法push消息。新浪微博等也是这样设计的。
    据称目前心跳为5分钟一次,如果延长,终端进入idle后,反复激活可能开销更大。

使用道具 举报

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

地板
发表于 2013-4-18 09:03:51 |显示全部楼层
  谢谢爱总转的文章,目前基本明确旧版QQ的心跳周期为30s,新版QQ为180s,微信为300s,Google原生应用为1680s左右。

  心跳的目的我想也基本明确了,就是为了服务器可以及时Push信息。

  心跳的结果是服务器可以得到用户当前的IP地址,从而可以寻址到用户。当然,用户的IP地址并不需要维持不变,只需要有当前的IP地址。

  因此,前面的提法“互联网应用为了避免IP地址被释放,造成无法寻址,只好引入了心跳机制。”应该修改为   “互联网应用为了避免取不到用户的当前IP地址,造成无法寻址,只好引入了心跳机制。”

  关于MSISDN的寻址我再介绍一下,我的方案中并没有提供给腾讯,而是给GGSN。其实,微信的APP中已经采集了很多MSISDN了,运营商即使不想给,也控制不了。

  相反地,我倒是建议腾讯把MSISDN以及微信用户间建立连接,通过SMS来通知微信用户的状态改变,这样可以节省心跳包。

点评

wenliu  GGSN还是在运营商手中,运营商无法限制微信app去采集MSISDN,当然更不可能主动在GGSN方便去配合微信。如果要配合,不用GGSN,直接在HLR或者HSS将用户注册状态通知微信服务器就够了。  发表于 2013-4-18 13:41:51

使用道具 举报

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

5#
发表于 2013-4-19 08:40:26 |显示全部楼层
NMW 发表于 2013-4-18 15:49
这样就有点类似彩信的机制了,改push为pull方式,这样心跳消息都可以省了。另外,增加的sms消息可以为 ...

  没错,我想到SMS通知时,马上就联想到了彩信,只是我一直疑惑,为什么彩信这种方式没有发展起来?

使用道具 举报

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

6#
发表于 2013-4-23 10:13:50 |显示全部楼层
fordesign 发表于 2013-4-19 12:44
通过短信来激活PS的行为,短信也要寻呼和分配TCH,这也要占用CCCH吧?如果这个量太大,那么造成的冲击比维持 ...

  看得出对信令很了解,的确与主叫相比,被叫的信令消耗是要大一些的。不过,对于绝大多数微信用户而言,其实每天收到的推送信息量是非常有限的,比如我是不上10的。在这种情况下,发送频密的心跳包就显得极其浪费了。

使用道具 举报

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

7#
发表于 2013-4-23 10:19:07 |显示全部楼层
    压缩MSISDN引起了一些争议,其实不用压缩MSISDN,也可以取消心跳机制,具体方法:
     1. 终端的APP激活后,把MSISDN发给微信服务器;
     2. 微信服务器遇到有消息要推送,直接向终端发送特殊格式的SMS,含推送消息的获取地址;
     3. APP收到特殊格式的SMS后,从后台向微信服务器取推送消息;
     4. APP显示推送消息。
   

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

站长邮箱|Archiver|51学通信 ( 粤ICP备11025688 )

GMT+8, 2024-5-8 02:10 , Processed in 0.028110 second(s), 15 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部