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