TCP是美國國防部設(shè)計的兩種傳輸協(xié)議之一,另一種是UDP。UDP是一種不可靠的網(wǎng)絡(luò)服務(wù),負(fù)載比
較小,而TCP則是一種可靠的通信服務(wù),負(fù)載相對而言比較大。TCP采用套接字(socket)或者端口
(port)來建立通信。TCP給端口到端口通信提供了錯誤和流量控制機制,同時TCP還負(fù)責(zé)建立連接
、處理終止和中斷的端對端通信控制。 通常情況下我們認(rèn)為TCP相比UDP具有更大的通信負(fù)載,
UDP不具備TCP的控制特性,TCP用了大約20個字節(jié)來發(fā)送一個65Kbps的數(shù)據(jù)塊,這個報頭占整個數(shù)
據(jù)塊的比重也不過3%??偟脕砜矗@個負(fù)載是合理的,何況還令通信具有了可靠性性。
tcp udp
是否連接 面向連接 面向非連接
傳輸可靠性 可靠的 不可靠的
應(yīng)用場合 傳輸大量數(shù)據(jù) 傳輸少量數(shù)據(jù)
速度 慢 快
所以UDP的速度快的優(yōu)點是很關(guān)鍵的因素,而且,UDP是“推”的協(xié)議,有多少個接收客戶,客戶端
是否鏈接均無所謂,只顧把數(shù)據(jù)發(fā)送/廣播出去就行;這對鏈接不可靠,需要一對多等情形很有用。
TCP關(guān)鍵是可靠,是基于可靠鏈接基礎(chǔ)上的協(xié)議,因而可能較慢,網(wǎng)絡(luò)數(shù)據(jù)量較大。
當(dāng)然UDP并不一定永遠(yuǎn)都比TCP快。我們之所以認(rèn)為UDP快,僅僅是從報頭中傳輸?shù)男畔⒈戎馗髞砜紤]
的。但是如果網(wǎng)絡(luò)情況,可能UDP就不一定比TCP快了。UDP只負(fù)責(zé)發(fā)送,因而不會管網(wǎng)絡(luò)的情況,一旦
網(wǎng)絡(luò)阻塞,繼續(xù)發(fā)UDP包只會加重整個網(wǎng)絡(luò)的負(fù)擔(dān)。而此時TCP的控制及復(fù)雜的傳輸算法就起到很好的
作用了。通過自適應(yīng)窗口等方式減少實際發(fā)往網(wǎng)絡(luò)的數(shù)據(jù)。就像堵車的時候一樣,UDP只會越來越堵,
而TCP還可以緩慢的行走。還有像聊天這種及時性高,如果采用TCP短連接,頻繁的連接斷開也會增加
網(wǎng)絡(luò)負(fù)擔(dān)。
綜上所述:如果是每次連接時間較短,或者即時性要求高,發(fā)送內(nèi)容較少,則采用UDP;而對數(shù)據(jù)完整
性、可靠性要求較高,傳輸性能要求較低時采用TCP。
而我們知道像QQ這種大型的聊天軟件卻主要使用的是UDP連接,而以TCP為輔。即使是傳文件,也是以UDP
為主,個人認(rèn)為這主要還是從服務(wù)器的角度來考慮的。
首先是每一個客戶實際上都是和服務(wù)器交互,再由服務(wù)器轉(zhuǎn)發(fā)給正在通信的用戶。
如果每一個QQ從一上線到下線的這段時間全部采用TCP長連接,這對服務(wù)器的負(fù)擔(dān)很大。而如果采用TCP
短連接,頻繁的連接斷開也會造成網(wǎng)絡(luò)負(fù)擔(dān)。而采用UDP則可以避開上述這些麻煩,減少服務(wù)器的負(fù)擔(dān)。