分析QQ微信使用的是UDP還是TCP協議

首先需要明白TCP UDP各自的概念以及區別

  1. tcp: 傳輸控制協議,全拼:Transmission Control Protocol 它是一個面向連接,可靠的傳輸協議
  2. udp: 用戶數據報協議,全拼:User Datagram Protocol 它不是面向連接,不是可靠的傳輸協議, udp協議傳輸速度快
  3. tcp和udp都是傳輸層的兩個傳輸協議
  4. tcp的特點:
    4.1 面向連接,間接驗證對方ip的有效性
    4.2 可靠的傳輸
    4.2.1 應答機制:發送數據包完成以後,對方收到數據底層會回覆
    4.2.2 超時重傳:發送數據以後對方沒有進行回覆,會隔一段時間再次給對方發送數據,如果對方一直沒有回覆,那麼會認爲對方已經掉線了
    4.2.3 錯誤校驗:如果收到的數據和之前發送數據包的序號不一致,會自動根據需要進行排序,如果收到重複的數據包,會把重複的數據包刪除
    4.2.4 流量控制:使用tcp能保證接收數據的時候電腦不會卡死
    5. tcp和udp的不同點對比
    5.1 tcp 面向連接, udp不面向連接
    5.2 tcp 能保證數據有效和有序的傳輸,udp保證不了
    5.3 tcp 有超時重傳,udp沒有
    5.4 tcp 有錯誤校驗,如果出現數據包順序不一致會自動排序,還有如果收到數據包重複會自動刪除重複的數據包,udp沒有
    5.5 tcp 有流量控制 udp沒有
    5.6 tcp 需要建立連接然後需要資源開銷要大, udp不需要建立連接資源開銷小
    — 擴展
    5.7 tcp 適合發送大量的數據,tcp每次發送的數據包理論上沒有上限控制,udp每次發送的數據包不能超過64k
    5.8 tcp 應用場景: 文件上傳和下載、瀏覽器上網,絕大多數應用程序都是用tcp協議,udp應用場景: 發送廣播消息(飛秋上線),音視頻傳輸(qq和微信),包括共屏軟件
    5.9 tcp 發送數據的時候需要建立連接,udp不需要建立連接,udp發送速度比tcp發送速度要快

對於 QQ微信發送消息過程中既有TCP參與還有UDP 同時出現P2P

不管UDP還是TCP,最終登陸成功之後,QQ都會有一個TCP連接來保持在線狀態。這個TCP連接的遠程端口一般是80,採用UDP方式登陸的時候,端口是8000。

UDP協議是無連接方式的協議,它的效率高,速度快,佔資源少,但是其傳輸機制爲不可靠傳送,必須依靠輔助的算法來完成傳輸控制。QQ採用的通信協議以UDP爲主,輔以TCP協議。由於QQ的服務器設計容量是海量級的應用,一臺服務器要同時容納十幾萬的併發連接,因此服務器端只有採用UDP協議與客戶端進行通訊才能保證這種超大規模的服務。

QQ客戶端之間的消息傳送也採用了UDP模式,因爲國內的網絡環境非常複雜,而且很多用戶採用的方式是通過代理服務器共享一條線路上網的方式,在這些複雜的情況下,客戶端之間能彼此建立起來TCP連接的概率較小,嚴重影響傳送信息的效率。而UDP包能夠穿透大部分的代理服務器,因此QQ選擇了UDP作爲客戶之間的主要通信協議。

採用UDP協議,通過服務器中轉方式。因此,現在的IP偵探在你僅僅跟對方發送聊天消息的時候是無法獲取到IP的。大家都知道,UDP 協議是不可靠協議,它只管發送,不管對方是否收到的,但它的傳輸很高效。但是,作爲聊天軟件,怎麼可以採用這樣的不可靠方式來傳輸消息呢?於是,騰訊採用了上層協議來保證可靠傳輸:如果客戶端使用UDP協議發出消息後,服務器收到該包,需要使用UDP協議發回一個應答包。如此來保證消息可以無遺漏傳輸。之所以會發生在客戶端明明看到“消息發送失敗”但對方又收到了這個消息的情況,就是因爲客戶端發出的消息服務器已經收到並轉發成功,但客戶端由於網絡原因沒有收到服務器的應答包引起的。

登陸採用TCP協議和HTTP協議,你和好友之間發送消息,主要採用UDP協議,內網傳文件採用了P2P技術。
總來的說:

1.登陸過程,客戶端client 採用TCP協議向服務器server發送信息,HTTP協議下載信息。登陸之後,會有一TCP連接來保持在線狀態。
2.和好友發消息,客戶端client採用UDP協議,但是需要通過服務器轉發。騰訊爲了確保傳輸消息的可靠,採用上層協議來保證可靠傳輸。如果消息發送失敗,客戶端會提示消息發送失敗,並可重新發送。
3.如果是在內網裏面的兩個客戶端傳文件,QQ採用的是P2P技術,不需要服務器中轉。

同時你可以自己驗證

首先通過任務管理器找到QQ的進程號,然後在命令提示符中輸入:netstat -ano 就可以顯示所有進程所使用的端口號。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章