兩者的區別在於TCP接收的是一堆數據,而每次取多少由主機決定;而UDP發的是數據報,客戶發送多少就接收多少。
擁有這些區別的原因是由於TCP和UDP的特性不同而決定的。TCP是面向連接的,也就是說,在連接持續的過程中,socket中收到的數據都是由同一台主機發出的,因此,知道保證數據是有序的到達就行了,至於每次讀取多少數據自己看着辦。 而UDP是無連接的協議,也就是說,只要知道接收端的IP和端口,且網絡是可達的,任何主機都可以向接收端發送數據。這時候,如果一次能讀取超過一個報文的數據,則會亂套。比如,主機A向發送了報文P1,主機B發送了報文P2,如果能夠讀取超過一個報文的數據,那么就會將P1和P2的數據合並在了一起,這樣的數據是沒有意義的。
兩個協議的其他區別
TCP(Transmission Control Protocol)傳輸控制協議
TCP是面向連接的、可靠的流協議。流就是指不間斷的數據結構。TCP為提供可靠性傳輸,實行“順序控制”或“重發控制”機制。此外還具備“流控制(流量控制)”、“擁塞控制”、提高網絡利用率等眾多功能。 此外,TCP作為一種面向有連接的協議,只有在確認通信對端存在才會發送數據,從而可以控制通信流量的浪費。
UDP (User Datagram Protocol) 用戶數據報協議
UDP是不具有可靠性的數據報協議。細微的處理它會交給上層的應用去完成。在UDP的情況下,雖然可以確保發送信息的大小,卻不能保證信息一定會到達。因此,應用有時會根據自己的需要進行重發處理。 UDP不提供復雜的控制機制,利用IP提供面向無連接的通信服務。由於UDP面向無連接,它可以隨時發送數據。再加上UDP本身的處理既簡單又高效,因此經常用於以下方面:
包總量較少的通信(DNS、SNMP等)
視頻、音頻等多媒體通信(即時通信)
限定於LAN等特定網絡中的應用通信
廣播通信(廣播、多播)
TCP和UDP區分使用
可能有人會認為,鑒於TCP是可靠的傳輸協議,那么它一定優於UDP。其實不然。TCP和UDP的優缺點無法簡單地、絕對地去做比較。那么,對這兩種協議應該如何加以區分使用呢?下面做一簡單說明。
TCP用於在傳輸層有必要實現可靠傳輸的情況。由於它是面向有連接並具備順序控制、重發控制等機制的,所以它可以為應用提供可靠傳輸。
而在一方面,UDP主要用於那些對高速傳輸和實時性有較高要求的通信或廣播通信。舉一個IP電話進行通話的例子。如果使用TCP,數據在傳送途中如果丟失會被重發,但這樣無法流暢地傳輸通話人的聲音, 會導致無法進行正常交流。而采用UDP,它不會進行重發處理。從而也就不會有聲音大幅度延遲到達的問題。即使有部分數據丟失,也只是會影響某一小部分的通話。此外, 在多播與廣播通信中也使用UDP而不是TCP。 因此,TCI和UDP應該根據應用的目的按需使用。
原文鏈接:http://www.aintnot.com/2015/01/01/TCP-and-UDP-difference/