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