`

飞信分析之三:断线的真相

阅读更多

转载自:

http://hi.baidu.com/nathan2007/blog/item/ee7daecbc44f4ffd53664f59.html

 

作者:nathan

飞信老是断线,这点互联网上很多用户都有提及。我待的地方就老断,一说是跟网络有关系,一说是飞信本身有问题。近一两天跟踪看了看,发现断得可真是恐怖,一天断20-30次的都有。可有一次在家通过ADSL上呢,好象又还好。难道是时间的关系?


但白天碰到的多次断线我感觉是服务器的问题,理由是通过Sniffer,我明确地看到了服务器端发过来的TCP RST的包,也就是说服务器对这个TCP连接做了CLOSE的操作。

让我们看看sniffer记录了什么,来看一次断线的记录(这是OmniPeek的PacketVisualizer Data):
.....
9451 12:46:48.661 > IP L=   40 TCP .A.... S=      4522    L=    0        10994=A W=64367        TCP Invalid Checksum
9452 12:46:51.181 << IP L= 119 TCP .AP...         4522=A L=   79 S=     10994            W=65402
9453 12:46:51.182 >> IP L= 115 TCP .AP... S=      4522    L=   75        11073=A W=64288        TCP Invalid Checksum
9454 12:46:51.343 < IP L=   40 TCP .A....         4597=A L=    0 S=     11073            W=65327
9455 12:53:38.501 > IP L=   98 TCP .AP... S=      4597    L=   58        11073=A W=64288        TCP Invalid Checksum
9456 12:53:38.532 < IP L=   40 TCP ...R..                 L=    0 S=     11073            W=    0

从记录中我们看到,12:53:38,客户机发了9455号包到服务器,而服务器回了一个RST包(9456号包),从TCP的序列号看,通信过程都是正常的,否则RST包的Sequence就不会是11073了。9455的包的内容是:
R fetion.com.cn SIP-C/2.0
F: 565248767
I: 1
Q: 4 R

这是一个向SIP Proxy Server注册的SIP请求。我猜测是客户端有几分钟没收到服务器的任何消息(通常服务器在不停地给客户端发presence消息),客户端就向服务器发起一个注册请求,这时服务器应该将所有用户列表向飞信的客户端返回,然而,服务器却回了一个字:滚!;) 然后,飞信就痛苦地开始了重新登录过程,然后你的好友就看到你又缓缓地从他屏幕的右下角慢慢地爬了上来,冤啊。


一个半天可以记录到10多次这样的断线,每次均是以如此方式结束:客户端发一个请求到服务器,服务器回以RST。是网络问题吗?我想应该不是,TCP的交互过程是正常的,MSN也是同时用TCP连着的,它也不断。我认为是飞信服务器的用户状态机处理有问题,莫名其妙地把活动的用户给干掉了。:)

飞信自己应该知道这种情况的啊,Fetion本身的日志文件中是这么记录的:
....
<Summary>通信层异常</Summary>
<Detail>System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接。
....


可怜的飞信。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics