兩者都是通信協(xié)議, TCP、UDP 是傳輸層協(xié)議,但他們的通信機制與應(yīng)用場景不同,下面來闡述兩者的區(qū)別以及它們的應(yīng)用場景。
TCP 與 UDPTCP(Transmission Control Protocol),又叫傳輸控制協(xié)議,UDP(User Datagram Protocol),又叫用戶數(shù)據(jù)報協(xié)議,它們都是傳輸層的協(xié)議,但兩者的機制不同,它們的區(qū)別如下:
TCP
從如上表格看到,TCP 是面向連接的,并且是一種可靠的協(xié)議,在基于 TCP 進行通信時,通信雙方需要先建立一個 TCP 連接,建立連接需要經(jīng)過三次握手,握手成功才可以進行通信,關(guān)于 TCP 三次握手、四次揮手的過程請看該文章。
另外 TCP 協(xié)議是一種可靠的傳輸協(xié)議,那么它是如何保證可靠性的呢?
可靠性
在講解 TCP 如何保證可靠性前,首先得理解什么是可靠。在通信的角度來看,可靠即要確保通信雙方的通信信息不會丟失,若丟失了保證能夠?qū)ζ溥M行恢復(fù),并且收到的信息內(nèi)容與原發(fā)送內(nèi)容一樣。
在 TCP 中,傳輸報文都是通過建立的虛擬連接來進行傳輸,發(fā)送端傳輸?shù)拿恳粋€ TCP 報文,都會對其進行編號(編號是由于網(wǎng)絡(luò)傳輸?shù)脑颍l(fā)送的報文可能會亂序到達,因此需要根據(jù)編號對報文進行重排),并且開啟一個計時器;當接收端收到報文后,并且通過校驗和對收到的報文數(shù)據(jù)進行校驗,若校驗成功則會返回一個確認報文,告知發(fā)送端我已經(jīng)成功收到該報文了;若發(fā)送端在計時器結(jié)束前仍未收到確認報文,則認為接收端接收失敗,則會重傳該報文;服務(wù)端若收到重復(fù)報文(根據(jù)編號發(fā)現(xiàn)已經(jīng)是收到了),則會將該報文丟棄。
因此,從上面的機制可以知道,TCP 是通過重傳、確認和校驗和的方式來確??煽?。
Tcp的優(yōu)點:可靠,穩(wěn)定
TCP的可靠性體現(xiàn)在傳輸數(shù)據(jù)之前,三次握手建立連接(四次揮手釋放連接),并且在數(shù)據(jù)傳遞時,有確認、窗口、重傳、擁塞控制機制,數(shù)據(jù)傳完之后,斷開連接用來節(jié)省系統(tǒng)資源。
TCP的缺點慢,效率低,占用系統(tǒng)資源高,易被攻擊
傳數(shù)據(jù)之前建立連接,這樣會消耗時間,而且在消息傳遞時,確認機制、重傳機制和擁塞控制機制都會消耗大量的時間,而且要在每臺設(shè)備上維護所有的傳輸連接。而每個連接都會占用系統(tǒng)的CPU、內(nèi)存等硬件軟件資源。并且TCP的取而機制、三次握手,這些也導(dǎo)致TCP容易被人利用,實現(xiàn)DOS,DDOS攻擊。
UDP的優(yōu)點快,比TCP稍安全
UDP沒有TCP的握手、確認、窗口、重傳、擁塞控制等機制,udp是一個無狀態(tài)的傳輸協(xié)議,所以他在傳輸數(shù)據(jù)時非???。M沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。UDP也是無法避免攻擊的,比如:UDP flood攻擊。。。
UDP的缺點不可靠,不穩(wěn)定
因為UDP沒有TCP的那些可靠機制,在網(wǎng)絡(luò)質(zhì)量不好時很容易丟包。
基于以上優(yōu)點,那么:
UDP 是一種面向無連接,且不可靠的協(xié)議,在通信過程中,它并不像 TCP 那樣需要先建立一個連接,只要(目的地址,端口號,源地址,端口號)確定了,就可以直接發(fā)送信息報文,并且不需要確保服務(wù)端一定能收到或收到完整的數(shù)據(jù)。它僅僅提供了校驗和機制來保障一個報文是否完整,若校驗失敗,則直接丟棄報文,不做任何處理。