1. 程式人生 > >QQ 為什麽以 UDP 協議為主,以 TCP 協議為輔?

QQ 為什麽以 UDP 協議為主,以 TCP 協議為輔?

共享 可靠 而且 海量 資源 就是 傳輸 發送 選擇

QQ既有UDP也有TCP!
不管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協議發回一個應答包。

如此來保證消息可以無遺漏傳輸。

之所以會發生在客戶端明明看到“消息發送失敗”但對方又收到了這個消息的情況,就是因為客戶端發出的消息服務器已經收到並轉發成功,

但客戶端由於網絡原因沒有收到服務器的應答包引起的。

QQ 為什麽以 UDP 協議為主,以 TCP 協議為輔?