1. 程式人生 > >為什麼QQ用的是UDP協議而不是TCP協議?

為什麼QQ用的是UDP協議而不是TCP協議?

  1. QQ既有UDP也有TCP!
  2. 不管UDP還是TCP,最終登陸成功之後,QQ都會有一個TCP連線來保持線上狀態。這個TCP連線的遠端埠一般是80,採用UDP方式登陸的時候,埠是8000。
  3. UDP協議是無連線方式的協議,它的效率高,速度快,佔資源少,但是其傳輸機制為不可靠傳送,必須依靠輔助的演算法來完成傳輸控制。QQ採用的通訊協議以UDP為主,輔以TCP協議。由於QQ的伺服器設計容量是海量級的應用,一臺伺服器要同時容納十幾萬的併發連線,因此伺服器端只有採用UDP協議與客戶端進行通訊才能保證這種超大規模的服務。
  4. QQ客戶端之間的訊息傳送也採用了UDP模式,因為國內的網路環境非常複雜,而且很多使用者採用的方式是通過代理伺服器共享一條線路上網的方式,在這些複雜的情況下,客戶端之間能彼此建立起來TCP連線的概率較小,嚴重影響傳送資訊的效率。而UDP包能夠穿透大部分的代理伺服器,因此QQ選擇了UDP作為客戶之間的主要通訊協議。
  5. 採用UDP協議,通過伺服器中轉方式。因此,現在的IP偵探在你僅僅跟對方傳送聊天訊息的時候是無法獲取到IP的。大家都知道,UDP 協議是不可靠協議,它只管傳送,不管對方是否收到的,但它的傳輸很高效。但是,作為聊天軟體,怎麼可以採用這樣的不可靠方式來傳輸訊息呢?於是,騰訊採用了上層協議來保證可靠傳輸:如果客戶端使用UDP協議發出訊息後,伺服器收到該包,需要使用UDP協議發回一個應答包。如此來保證訊息可以無遺漏傳輸。之所以會發生在客戶端明明看到“訊息傳送失敗”但對方又收到了這個訊息的情況,就是因為客戶端發出的訊息伺服器已經收到並轉發成功,但客戶端由於網路原因沒有收到伺服器的應答包引起的。