通過QQ給異地的B發了條消息,直到B收到了消息,中間經歷了怎樣的過程?
北京的A通過QQ給深圳的B發了一條消息,B在QQ上接收到了消息,從A點擊發送開始,到B看到消息結束,中間過程是如何實現的?中間可能涉及消息類型的轉換,QQ,ISP等角色起到了什么作用;物理元件或設備的功能體現,網卡,路由器,網線,電線發揮了什么作用;信號的轉換等等。不是單純的想知道七層結構下是如何實現的,而是整個過程是如何實現的,其中可能包含網絡,通信,物理相關的知識,向專業的老師請教,希望了解的老師能不吝解惑。
如果把QQ所有的服務器高度概括為一臺服務器,問題則簡化為:
主機A(小明)要發消息給QQ服務器,主機A(小明)知道QQ服務器的IP地址嗎?
這個沒有問題,QQ軟件里提前配置了QQ服務器列表。
假設主機A(小明)到達了QQ服務器,此時QQ服務器怎么辦?
主機B(小美)如果在線,直接把消息發給小美。但是QQ服務器不對消息保存備份,不符合審查規范。
主機B(小美)如果不在線,先存儲起來,等小美上線再把消息發給小美。
所以,QQ消息無論對方(接收方小美)在不在線,都是可以發出的,因為這純粹是主機A(發送方小明)與QQ服務器之間的通信。
既然要存儲用戶的QQ消息,自然對用戶ID有唯一性(Unique)的要求,這個全局唯一的ID就是QQ號碼,QQ號碼是唯一識別用戶的ID。
可以將QQ服務器看成一個郵件服務器,每個登錄用戶都有一個郵件賬號(QQ號),QQ服務器收到用戶的消息,根據接收人的QQ號碼,將消息保存在數據庫里。一旦要從數據庫里提取消息,只要使用接收人的QQ號碼作為查詢條件,即可將消息讀出。
當然,QQ服務器不可能真的就一臺,而是分布在多地的多臺服務器列表。這個在QQ軟件里會預配置。主機A(小明)與優先使用哪臺服務器,這個可以嘗試Ping服務器列表,看看誰的延遲最小,優先選擇最佳服務器。
北京的主機A(小明)與深圳的主機B(小美)登錄的QQ服務器可能不是一臺,而是多臺。假設收到小明消息的是服務器A,而小美則登錄在服務器B上。怎么能讓服務器A知曉小美是掛在服務器B上,從而服務器A將消息轉發給服務器B,服務器B再轉發給小美?
這就需要一臺中心服務器C,每當用戶登錄服務器時,登錄服務器會將用戶QQ號與服務器的IP地址發到中心服務器C上,這樣服務器C就會有QQ號,登陸服務器對應表。
服務器A只要查詢一下服務器C,即可獲得服務器B的IP地址,即可建立安全加密連接,即可將發給小美的消息轉發給服務器B,再轉發給小美。
畢竟QQ屬于即時通信,將延遲降低到最小值是一個重要的指標。所以為了最大限度降低延遲,上文中的各個服務器之間的安全加密連接,用戶消息到來之前早已建立,用不著再花額外的時間建立。甚至用戶QQ號與服務器的映射表數據庫都可以周期性從C同步到各個QQ服務器。
上文的通信,都是使用IP報文作為運輸工具,采用IP路由尋找目的地,這些都是通用的。唯一需要注意的是,用戶與QQ服務器之間的通信,需要NAT。為了使得QQ服務器能將消息及時推送給用戶,NAT表需要存在,不能因為沒有流量刷新而老化刪除,這樣QQ客戶端就無法及時收到消息推送。
為了避免NAT表被刪除,QQ客戶端會周期性發送心跳,從而刷新NAT表,QQ服務器收到心跳包,幾乎不需要處理(更新一下用戶依然在線的狀態),就把心跳包扔了。
至于QQ打電話、QQ傳輸文件,原理是相似的,僅有細微的差別,通信在兩個客戶端之間端到端完成(建立連接),中間需要QQ服務器作為中介介入。而QQ消息,兩個客戶端之間壓根沒有建立連接,它們只維持和QQ服務器的連接。
作者|車小胖談網絡|公眾號
也是做個記錄,本質上區別不大。學生黨、老師和工作傳資料,推薦使用“我的電腦”。
發送到“我的電腦”在電腦會保存一個文件夾中。發送給自己是和消息一樣手機和電腦同步可以展示,但是清除記錄的時候文件圖片信息也會隨之被清理。
1、給自己發送大量圖片,使用手機QQ發給“我的電腦”(下圖1是手機的截圖):
手機端截圖找到“我的電腦”
2、下圖是在電腦端找到"我的Android手機",雙擊打開,你會看到批量發送的圖片消息集合在一個消息中,如下面2圖:
電腦端"我的Android手機"
電腦端打開"我的Android”對話窗口效
3、電腦端雙擊打開"我的Android對話窗口,如上圖效果,可以看到批量發送的圖片都結合在一個消息中,可以點擊右下角的“打開文件夾”,如下圖所示,是單擊后打開的文件夾位置,一眼看到剛才發送的圖片文件:
電腦QQ列表也可以找到自己,雙擊進入查看發送的文件和圖片,都會以對話消息的方式,一條一條存在,如果只有一兩張圖片,或者只言片語做記錄,發送給自己也沒毛病。
#我的生活日記#
能化的時代,聊天工具是不可缺的,QQ是80后一代的青春回憶,不知道還有沒有小伙伴們在用,最近一直在研究這個聊天記錄的恢復,嘿嘿,方法來了,基本的方法,跟小編來看一下吧。
QQ的聊天記錄本地保存于數據庫文件中,當更換電腦時如果想要遷移聊天記錄,可以將這些文件備份并在新電腦上還原即可。
打開QQ客戶端->【打開消息管理器】->找到您需要保存記錄的好友或分組右鍵選擇【導出消息記錄】即可。
然后系統彈出文件保存框,選擇好存放位置后,如果保存為bak格式的話,就是加密模式無法查看,支持再次導入的;如果是保存為網頁格式(mht)或者是文本文件(txt),那么就可以導出直接查看,文本文件只能查看文字,網頁格式可以查看文字和圖片。
示例圖
注:聊天記錄以bak格式導出是可以再次導入的,但是有可能因為其他原因(比如操作問題或者本地軟件數據錯誤)導致導出的聊天記錄無法再次導入,所以請最好先備份msg2.0.db文件。
以上就是QQ聊天記錄的備份與導出的方法,喜歡文章,關注小編,后期會有更多的科技資訊。