from http://c.biancheng.net/cpp/html/3051.html
TCP 是面向連接的傳輸協(xié)議,建立連接時要經(jīng)過三次握手,斷開連接時要經(jīng)過四次握手,中間傳輸數(shù)據(jù)時也要回復(fù)ACK包確認(rèn),多種機(jī)制保證了數(shù)據(jù)能夠正確到達(dá),不會丟失或出錯。
UDP 是非連接的傳輸協(xié)議,沒有建立連接和斷開連接的過程,它只是簡單地把數(shù)據(jù)丟到網(wǎng)絡(luò)中,也不需要ACK包確認(rèn)。
UDP 傳輸數(shù)據(jù)就好像我們郵寄包裹,郵寄前需要填好寄件人和收件人地址,之后送到快遞公司即可,但包裹是否正確送達(dá)、是否損壞我們無法得知,也無法保證。UDP 協(xié)議也是如此,它只管把數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò),然后就不管了,如果數(shù)據(jù)丟失或損壞,發(fā)送端是無法知道的,當(dāng)然也不會重發(fā)。
既然如此,TCP應(yīng)該是更加優(yōu)質(zhì)的傳輸協(xié)議吧?
如果只考慮可靠性,TCP的確比UDP好。但UDP在結(jié)構(gòu)上比TCP更加簡潔,不會發(fā)送ACK的應(yīng)答消息,也不會給數(shù)據(jù)包分配Seq序號,所以UDP的傳輸效率有時會比TCP高出很多,編程中實(shí)現(xiàn)UDP也比TCP簡單。
UDP 的可靠性雖然比不上TCP,但也不會像想象中那么頻繁地發(fā)生數(shù)據(jù)損毀,在更加重視傳輸效率而非可靠性的情況下,UDP是一種很好的選擇。比如視頻通信或音頻通信,就非常適合采用UDP協(xié)議;通信時數(shù)據(jù)必須高效傳輸才不會產(chǎn)生“卡頓”現(xiàn)象,用戶體驗(yàn)才更加流暢,如果丟失幾個數(shù)據(jù)包,視頻畫面可能會出現(xiàn)“雪花”,音頻可能會夾帶一些雜音,這些都是無妨的。
與UDP相比,TCP的生命在于流控制,這保證了數(shù)據(jù)傳輸?shù)恼_性。
最后需要說明的是:TCP的速度無法超越UDP,但在收發(fā)某些類型的數(shù)據(jù)時有可能接近UDP。例如,每次交換的數(shù)據(jù)量越大,TCP 的傳輸速率就越接近于 UDP。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。