今天看到这两张照片,忍不住笑了。网上有很多段子或段子。其实,最能引起笑点的,往往都来自现实生活,而不是那些为了笑而编造的笑话。图片来自宝途网微信真的会因为网络不好导致信息反转吗?真的会。为什么?马化腾说,微信就是一个邮箱,但是这个邮箱速度更快,让你感觉不到它是一个邮箱,而是给人一种即时通讯的错觉。微信邮箱是这样工作的:Alice登录微信服务器,验证身份,在线。这是一个基于TCP的长连接,经过安全加密。所谓长期连接,就是只要爱丽丝的手机没有没电或者关机,这个长期连接就一直在运行,可以进行双向通信。负责登录的服务器称为登录服务器。爱丽丝给鲍勃发了一条短信,“你在开玩笑吗?”点击进入。这段文字是通过上面的长链接发送的吗?不会。相反,它是通过短连接发送的。这个短连接是在Alice点击Bob的头像后建立的。这是一个由TCP+MMTLS(安全加密)+HTTP封装的短连接。然后通过HTTP格式的短连接发送消息。消息是直接发送给Bob的吗?不,它被发送到Bob的邮箱。Bob的邮箱是在Bob手机里,还是在微信存储服务器里?微信服务器。这样做有什么好处?如果鲍勃在飞机上并且手机关机,爱丽丝的消息仍然可以发送。如果直接发到Bob的手机上,而手机是关机状态,那么根本无法建立连接,消息自然也就发不出去了。当然,有很多好处。例如,Alice和Bob的手机位于NAT设备后面,他们之间的直接通信可能不会100%成功。如果Bob在线,登录服务器会立即通过TCP长连接通知Bob微信邮箱有一封信。至于信件存放在邮箱的什么地方,这是一个HTTP格式的链接。Bob微信会与链接对应的存储服务器建立短链接,将消息下载显示到本地窗口,然后关闭短链接。如果Bob不在线,微信服务器其实并不着急。反正消息留在存储服务器里,不会飞。等Bob下飞机上网,第一时间微信通知Bob。以上是微信的工作流程。接下来说说为什么微信会先发消息。微信每完成一条短信,点击“发送”,就会触发一次消息:短连接建立、消息发送、短连接断开这是标准的三部曲。当你再次发送一条短信时,又会触发另一个三部曲。两部三部曲相互独立。当网络畅通时,Alice的第一条消息很快发送到Bob的邮箱,并通过Bob的微信显示在窗口中。爱丽丝第二条消息发送晚了,自然也迟到了,这是非常可以理解的。但是当网络不好的时候,前三部曲的消息就没那么幸运了,丢了,然后Alice的手机一直在重传消息。爱丽丝发送了第二条消息。她很幸运,没有错过。结果比第一条消息早了几秒。由于微信讲究及时沟通,所以微信会在第一时间通知Bob的微信,但是通知的顺序是先第二条消息,再第一条消息。这导致微信消息的时间反转。最后,每条消息的内部文本没有颠倒,对吧?这是TCP的功劳,因为短连接仍然使用TCP作为传输协议,而TCP最擅长的就是保证每个字节按顺序到达。TCP是一种可靠的协议,可以修复因临时网络中断而丢失的字节。但是如果Alice给Bob的邮箱上传了一条消息,网络长时间中断,超过了最大TCP恢复时间,那么微信就会提示Alice消息发送失败!作者:车小胖谈网络编辑:陶家龙来源:转载自公众号车小胖谈网络(ID:chexiaopangnetwork)
