tcp是面向連接的協議,也就是說,在收發數據前,必須和對方建立可靠的連接。一個TCP連接必須要經過三次“對話”才能建立起來。使用TCP協議傳輸數據,TCP提供超時重發,丟棄重復數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端。當數據從A端傳到B端后,B端會發送一個確認包(ACK包)給A端,告知A端數據我已收到!
UDP協議就沒有這種確認機制,這就是為什么說TCP協議可靠,UDP協議不可靠,提供這種可靠服務,會加大網絡帶寬的開銷,因為“虛擬信道”是持續存在的,同時網絡中還會出現大量的ACK和FIN包。TCP協議提供了可靠的數據傳輸,但是其擁塞控制、數據校驗、重傳機制的網絡開銷很大,不適合實時通信,所以選擇開銷很小的UDP協議來傳輸數據。UDP協議是無連接的數據傳輸協議並且無重傳機制,會發生丟包、收到重復包、亂序等情況。
1.基於連接與無連接。
2.UDP不提供可靠性,不能保證數據能夠到達目的地。
3.對系統資源的要求(TCP較多,UDP少)。
4.UDP結構較簡單。
5.TCP面向字節流模式,TCP會保證服務端按順序接收到全部的字節流,UDP面向數據報模式,不保證順序性。
很明顯,當數據傳輸的性能必須讓位於數據傳輸的完整性、可控制性和可靠性時,選擇TCP協議。當強調傳輸性能而不是傳輸的完整性時,如音頻和多媒體應用,UDP是最好的選擇。在數據傳輸時間很短,以至於此前的連接過程成為整個流量主體的情況下,UDP也是一個好的選擇,如DNS交換。UDP較低的開銷使其有更好的機會去傳送管理數據。TCP豐富的功能有時會導致不可預料的性能低下。