關於TCP和UDP的區別,是一個老生常談的問題了。在面試的時候很容易被問到,那么兩者到底有什么區別呢?首先看我從網上找的一個圖。
很清晰的能夠看出,UDP是無連接的,這是什么意思呢?這就是在傳送數據的時候,UDP是不需要進行連接的,遠方的主機在收到UDP的請求時,不需要經過任何的確認,雖然它不提高可靠的交付,但是在某種情況下,UDP的價值是最大的,比如視頻連接,直播,語音等等功能。
而TCP呢,是一個面向連接的服務,也就是說只有先建立連接,才能傳送數據,同樣在結束時還要釋放連接,同樣TCO不提供廣播或者多播服務。那么為什么TCP傳輸時可靠的呢?
1.應用數據被分割成TCP認味最適合發送的數據塊。
2.TCP給每個包進行了編號,接收方把數據包進行排序,然后講將有序數據傳送給應用層。
3.校檢和:TCP將保持他首部和數據的校檢和,這是一個端到端的校檢和,目的是為了檢測數據在傳輸過程中的變化,如果校檢和出現了差錯,TCP將丟棄這個報文段,並不確認收到此報文段。
4.TCP的接收端會丟棄重復的數據。
5.流量控制:TCP連接的每一方都有一個固定的大小緩沖空間,TCP的接收端只允許發送端發送接收端緩沖區能接納的數據,當接收方來不及處理發送方的數據時,就能提示發送方降低發送速率,防止包的丟失。TCP使用的流量控制協議時可變大小的華東窗口協議。
6.擁塞控制:當網絡擁塞時,減少數據的發送
7.ARQ協議:每發完一個分組就停止繼續發送,等待對方的確認,在收到確定后在發下一個分組。
8.超時重傳:當TCP發出一個段后,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能即使確認,就將重發這個報文段。
TCP在傳輸數據之前要還會有三次握手時來建立連接,而且在數據傳輸時,還會有確認,窗口,重傳,擁塞這些控制機制,在數據傳完之后,還會斷開連接來節約資源。這也就增加了很大的資源消耗,所以TCP一般用於遠程登陸,發送郵件,文件傳輸等場景。