一幅圖片引起的離婚大戰

碼小辮專一更多編程視頻和電子書
每天在用錢
今天看到這兩幅圖片,不由哈哈大笑。互聯網上不少段子或者笑話,其實最能引發笑果的每每來自於真實生活,而不是那些爲了笑果而編造的段子。
微信真的會由於網絡很差而形成信息的先後顛倒嗎?
真的會。
爲何呢?
馬化騰說微信就是一個郵箱,只是這個郵箱比較快,讓你感覺不到這是一個郵箱,而讓你有一種即時通訊的錯覺。
微信這個郵箱是這麼來工做的:
Alice登陸微信服務器,認證身份,上線狀態。這是一個基於TCP的長鏈接,安全加密。所謂長鏈接,就是Alice只要不是手機沒電或者關機狀態,這個長鏈接一直都是運行且雙向能夠通訊的。這個負責登陸的服務器,簡稱登陸服務器。
Alice給Bob發了一段文字,「Are you kidding me?」敲回車。這段文字是經過上文的長鏈接發送的嗎?
不是的。而是經過一個短鏈接發送的,這個短鏈接是Alice點開Bob頭像才創建的,這是一個 TCP + MMTLS(安全加密)+ http封裝的短鏈接。
而後這個消息就被短鏈接以http格式發出去了。這個消息是直接發給Bob的嗎?
不是的,而是發給Bob的郵箱。
Bob的郵箱是在Bob的手機裏、仍是微信存儲服務器裏?
微信服務器。
這樣作有什麼好處呢?
假如Bob在飛機上,手機關機,Alice消息依然能夠將消息發出。
若是直接發給Bob手機,手機都關機了,那就壓根沒法創建鏈接,天然連消息都發不出。
固然好處還有許多,好比Alice與Bob的手機都位於NAT設備的後方,他們之間的直接通訊不必定100%成功。
若是Bob是在線狀態,登陸服務器會第一時間經過TCP長鏈接,通知Bob微信郵箱裏有信,至於這封信存在郵箱的什麼地方,這是一個http格式的連接。Bob微信會與連接所對應的存儲服務器創建短連接,將消息下載並顯示到本地窗口,而後關閉短鏈接。
若是Bob是離線狀態,微信服務器其實也不急的,反正消息呆在存儲服務器,不會飛的。等Bob下飛機上線了第一時間通知Bob微信就行了。
以上就是微信的工做流程。接下來說爲什麼微信會發生消息後發先至的狀況?
微信每次敲完一段文字,點擊「發送「,這個消息就觸發了一次:
這個是標準的三步曲。當你再次發一段文字時,又觸發了一次三步曲。兩次的三步曲是相互獨立的。
在網絡暢通時,Alice第一個消息很快就發到Bob的郵箱,並被Bob微信呈如今窗口裏。
Alice第二個消息發出的晚,天然到達得晚,這是很是好理解的。
可是當網絡很差時,第一個三步曲的消息報文不是那麼幸運,丟了,而後Alice的手機一直在重傳這個消息。
Alice又發送第二個消息,運氣特別好,沒有丟,結果比第一個消息早到了幾秒。
既然微信講究及時通訊,微信會第一時間通知Bob的微信,只是這個消息通知順序,先是第二個消息,而後纔是第一個消息。這樣就形成了微信消息時序的顛倒。
最後,每一段消息內部文字並無顛倒,對嗎?
這就是TCP的功勞,由於短鏈接依然使用的是TCP作爲傳輸協議,TCP最擅長作的就是保證每個字節按照前後順序到達。TCP是一個可靠協議,能夠修復因爲網絡暫時的中斷而形成的字節丟失。可是若是Alice向Bob郵箱上傳信的時候,網絡發生了長時間的中斷,超出了TCP最大修復時間,這時微信會提示Alice,消息發送失敗!
最最後,祝你們520快樂!編程
-END-安全
關注視頻號,參與留言送書活動
服務器
↓↓↓↓微信

一個認真分享的小編網絡
前沿技術 /名企內推 /乾貨分享ide
歡迎關注本站公眾號,獲取更多信息