面試官:如何理解UDP 和 TCP? 區(qū)別? 應(yīng)用場(chǎng)景?
本文轉(zhuǎn)載自微信公眾號(hào)「JS每日一題」,作者灰灰。轉(zhuǎn)載本文請(qǐng)聯(lián)系JS每日一題公眾號(hào)。
一、UDP
UDP(User Datagram Protocol),用戶數(shù)據(jù)包協(xié)議,是一個(gè)簡(jiǎn)單的「面向數(shù)據(jù)報(bào)的通信協(xié)議」,即對(duì)應(yīng)用層交下來(lái)的報(bào)文,不合并,不拆分,只是在其上面加上首部后就交給了下面的網(wǎng)絡(luò)層
也就是說(shuō)無(wú)論應(yīng)用層交給UDP多長(zhǎng)的報(bào)文,它統(tǒng)統(tǒng)發(fā)送,一次發(fā)送一個(gè)報(bào)文
而對(duì)接收方,接到后直接去除首部,交給上面的應(yīng)用層就完成任務(wù)
UDP報(bào)頭包括4個(gè)字段,每個(gè)字段占用2個(gè)字節(jié)(即16個(gè)二進(jìn)制位),標(biāo)題短,開銷小
特點(diǎn)如下:
- UDP 不提供復(fù)雜的控制機(jī)制,利用 IP 提供面向無(wú)連接的通信服務(wù)
- 傳輸途中出現(xiàn)丟包,UDP 也不負(fù)責(zé)重發(fā)
- 當(dāng)包的到達(dá)順序出現(xiàn)亂序時(shí),UDP沒有糾正的功能。
- 并且它是將應(yīng)用程序發(fā)來(lái)的數(shù)據(jù)在收到的那一刻,立即按照原樣發(fā)送到網(wǎng)絡(luò)上的一種機(jī)制。即使是出現(xiàn)網(wǎng)絡(luò)擁堵的情況,UDP 也無(wú)法進(jìn)行流量控制等避免網(wǎng)絡(luò)擁塞行為
二、TCP
TCP(Transmission Control Protocol),傳輸控制協(xié)議,是一種可靠、「面向字節(jié)流的通信協(xié)議」,把上面應(yīng)用層交下來(lái)的數(shù)據(jù)看成無(wú)結(jié)構(gòu)的字節(jié)流來(lái)發(fā)送
可以想象成流水形式的,發(fā)送方TCP會(huì)將數(shù)據(jù)放入“蓄水池”(緩存區(qū)),等到可以發(fā)送的時(shí)候就發(fā)送,不能發(fā)送就等著,TCP會(huì)根據(jù)當(dāng)前網(wǎng)絡(luò)的擁塞狀態(tài)來(lái)確定每個(gè)報(bào)文段的大小
TCP報(bào)文首部有20個(gè)字節(jié),額外開銷大
特點(diǎn)如下:
- TCP充分地實(shí)現(xiàn)了數(shù)據(jù)傳輸時(shí)各種控制功能,可以進(jìn)行丟包時(shí)的重發(fā)控制,還可以對(duì)次序亂掉的分包進(jìn)行順序控制。而這些在 UDP 中都沒有。
- 此外,TCP 作為一種面向有連接的協(xié)議,只有在確認(rèn)通信對(duì)端存在時(shí)才會(huì)發(fā)送數(shù)據(jù),從而可以控制通信流量的浪費(fèi)。
- 根據(jù) TCP 的這些機(jī)制,在 IP 這種無(wú)連接的網(wǎng)絡(luò)上也能夠?qū)崿F(xiàn)高可靠性的通信( 主要通過校驗(yàn)和、序列號(hào)、確認(rèn)應(yīng)答、重發(fā)控制、連接管理以及窗口控制等機(jī)制實(shí)現(xiàn))
三、區(qū)別
UDP與TCP兩者的都位于傳輸層,如下圖所示:
兩者區(qū)別如下表所示:
TCP | UDP | |
---|---|---|
可靠性 | 可靠 | 不可靠 |
連接性 | 面向連接 | 無(wú)連接 |
報(bào)文 | 面向字節(jié)流 | 面向報(bào)文 |
效率 | 傳輸效率低 | 傳輸效率高 |
雙共性 | 全雙工 | 一對(duì)一、一對(duì)多、多對(duì)一、多對(duì)多 |
流量控制 | 滑動(dòng)窗口 | 無(wú) |
擁塞控制 | 慢開始、擁塞避免、快重傳、快恢復(fù) | 無(wú) |
傳輸效率 | 慢 | 快 |
- TCP 是面向連接的協(xié)議,建立連接3次握手、斷開連接四次揮手,UDP是面向無(wú)連接,數(shù)據(jù)傳輸前后不連接連接,發(fā)送端只負(fù)責(zé)將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò),接收端從消息隊(duì)列讀取
- TCP 提供可靠的服務(wù),傳輸過程采用流量控制、編號(hào)與確認(rèn)、計(jì)時(shí)器等手段確保數(shù)據(jù)無(wú)差錯(cuò),不丟失。UDP 則盡可能傳遞數(shù)據(jù),但不保證傳遞交付給對(duì)方
- TCP 面向字節(jié)流,將應(yīng)用層報(bào)文看成一串無(wú)結(jié)構(gòu)的字節(jié)流,分解為多個(gè)TCP報(bào)文段傳輸后,在目的站重新裝配。UDP協(xié)議面向報(bào)文,不拆分應(yīng)用層報(bào)文,只保留報(bào)文邊界,一次發(fā)送一個(gè)報(bào)文,接收方去除報(bào)文首部后,原封不動(dòng)將報(bào)文交給上層應(yīng)用
- TCP 只能點(diǎn)對(duì)點(diǎn)全雙工通信。UDP 支持一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多的交互通信
兩者應(yīng)用場(chǎng)景如下圖:
可以看到,TCP 應(yīng)用場(chǎng)景適用于對(duì)效率要求低,對(duì)準(zhǔn)確性要求高或者要求有鏈接的場(chǎng)景,而UDP 適用場(chǎng)景為對(duì)效率要求高,對(duì)準(zhǔn)確性要求低的場(chǎng)景
參考文獻(xiàn)
- https://zh.wikipedia.org
- https://www.shangmayuan.com/a/a1e3ceb218284cefb95de7fd.html
- https://segmentfault.com/a/1190000021815671
- https://vue3js.cn/interview