QQ 爲何以 UDP 協議爲主,以 TCP 協議爲輔?

QQ既有UDP也有TCP!
無論UDP仍是TCP,最終登錄成功以後,QQ都會有一個TCP鏈接來保持在線狀態。這個TCP鏈接的遠程端口通常是80,採用UDP方式登錄的時候,端口是8000。

UDP協議是無鏈接方式的協議,它的效率高,速度快,佔資源少,可是其傳輸機制爲不可靠傳送,必須依靠輔助的算法來完成傳輸控制。算法

QQ採用的通訊協議以UDP爲主,輔以TCP協議。服務器

因爲QQ的服務器設計容量是海量級的應用,一臺服務器要同時容納十幾萬的併發鏈接,網絡

所以服務器端只有採用UDP協議與客戶端進行通信才能保證這種超大規模的服務。

QQ客戶端之間的消息傳送也採用了UDP模式,由於國內的網絡環境很是複雜,並且不少用戶採用的方式是經過代理服務器共享一條線路上網的方式,併發

在這些複雜的狀況下,客戶端之間能彼此創建起來TCP鏈接的機率較小,嚴重影響傳送信息的效率。spa

而UDP包可以穿透大部分的代理服務器,所以QQ選擇了UDP做爲客戶之間的主要通訊協議。

採用UDP協議,經過服務器中轉方式。設計

所以,如今的IP偵探在你僅僅跟對方發送聊天消息的時候是沒法獲取到IP的。代理

你們都知道,UDP 協議是不可靠協議,它只管發送,無論對方是否收到的,但它的傳輸很高效。資源

可是,做爲聊天軟件,怎麼能夠採用這樣的不可靠方式來傳輸消息呢?效率

因而,騰訊採用了上層協議來保證可靠傳輸:若是客戶端使用UDP協議發出消息後,服務器收到該包,須要使用UDP協議發回一個應答包。服務器端

如此來保證消息能夠無遺漏傳輸。

之因此會發生在客戶端明明看到「消息發送失敗」但對方又收到了這個消息的狀況,就是由於客戶端發出的消息服務器已經收到並轉發成功,

但客戶端因爲網絡緣由沒有收到服務器的應答包引發的。

相關文章
相關標籤/搜索