生活随笔
收集整理的這篇文章主要介紹了
为什么聊天软件一般采用UDP协议
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
TCP是美國國防部設計的兩種傳輸協議之一,另一種是UDP。UDP是一種不可靠的網絡服務,負載比
較小,而TCP則是一種可靠的通信服務,負載相對而言比較大。TCP采用套接字(socket)或者端口
(port)來建立通信。TCP給端口到端口通信提供了錯誤和流量控制機制,同時TCP還負責建立連接
、處理終止和中斷的端對端通信控制。 通常情況下我們認為TCP相比UDP具有更大的通信負載,UDP不具備TCP的控制特性,TCP用了大約20個字節來發送一個65Kbps的數據塊,
這個報頭占整個數據塊的比重也不過3%。總得來看,這個負載是合理的,何況還令通信具有了可靠性性。 | ? | ?tcp | ?udp | | ?是否連接 | ?面向連接 | ?面向非連接 | | ?傳輸可靠性 | ?可靠的 | ?不可靠的 | | ?應用場合 | ?傳輸大量數據 | ?傳輸少量數據 | | ?速度 | ?慢 | ?快 | ? 所以UDP的速度快的優點是很關鍵的因素,而且,UDP是“推”的協議,有多少個接收客戶,客戶端
是否鏈接均無所謂,只顧把數據發送/廣播出去就行;這對鏈接不可靠,需要一對多等情形很有用。
TCP關鍵是可靠,是基于可靠鏈接基礎上的協議,因而可能較慢,網絡數據量較大。當然UDP并不一定永遠都比TCP快。我們之所以認為UDP快,僅僅是從報頭中傳輸的信息比重更大來考慮
的。但是如果網絡情況,可能UDP就不一定比TCP快了。UDP只負責發送,因而不會管網絡的情況,一旦
網絡阻塞,繼續發UDP包只會加重整個網絡的負擔。而此時TCP的控制及復雜的傳輸算法就起到很好的
作用了。通過自適應窗口等方式減少實際發往網絡的數據。就像堵車的時候一樣,UDP只會越來越堵,
而TCP還可以緩慢的行走。還有像聊天這種及時性高,如果采用TCP短連接,頻繁的連接斷開也會增加
網絡負擔。綜上所述:如果是每次連接時間較短,或者即時性要求高,發送內容較少,則采用UDP;而對數據完整
性、可靠性要求較高,傳輸性能要求較低時采用TCP。而我們知道像QQ這種大型的聊天軟件卻主要使用的是UDP連接,而以TCP為輔。即使是傳文件,也是以UDP
為主,個人認為這主要還是從服務器的角度來考慮的。
首先是每一個客戶實際上都是和服務器交互,再由服務器轉發給正在通信的用戶。
如果每一個QQ從一上線到下線的這段時間全部采用TCP長連接,這對服務器的負擔很大。而如果采用TCP
短連接,頻繁的連接斷開也會造成網絡負擔。而采用UDP則可以避開上述這些麻煩,減少服務器的負擔。 ? ? 基于上述不同,UDP和TCP編程步驟也有些不同,如下:
TCP編程的服務器端一般步驟是:UDP編程的服務器端一般步驟是: | 1、創建一個socket,用函數socket(); 2、設置socket屬性,用函數setsockopt(); * 可選? 3、綁定IP地址、端口等信息到socket上,用函數bind(); 4、開啟監聽,用函數listen(); 5、接收客戶端上來的連接,用函數accept(); 6、收發數據,用函數send()和recv(),或者read()和write(); 7、關閉網絡連接; 8、關閉監聽; | 1、創建一個socket,用函數socket(); 2、設置socket屬性,用函數setsockopt();* 可選 3、綁定IP地址、端口等信息到socket上,用函數bind(); 4、循環接收數據,用函數recvfrom();? 5、關閉網絡連接; | | TCP編程的客戶端一般步驟是: | UDP編程的客戶端一般步驟是: | | 1、創建一個socket,用函數socket(); 2、設置socket屬性,用函數setsockopt();* 可選 3、綁定IP地址、端口等信息到socket上,用函數bind();* 可選 4、設置要連接的對方的IP地址和端口等屬性; 5、連接服務器,用函數connect();? 6、收發數據,用函數send()和recv(),或者read()和write(); 7、關閉網絡連接; | 1、創建一個socket,用函數socket(); 2、設置socket屬性,用函數setsockopt();* 可選 3、綁定IP地址、端口等信息到socket上,用函數bind();* 可選 4、設置對方的IP地址和端口等屬性;? 5、發送數據,用函數sendto(); 6、關閉網絡連接; |
|
?
總結
以上是生活随笔為你收集整理的为什么聊天软件一般采用UDP协议的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。