UDP是一位頑皮的“朋友”,他說話時從來不問聽他說話的人是否聽到,UDP不管對方當(dāng)前在做什么事,是在吃飯還是喝水,是在唱歌還是跳舞,總之他想跟別人說話時就直接說,而且說的速度也不控制,一直到把想說的話說完為止,即使對方?jīng)]有聽到他的話也不在乎。
聽起來UDP真的很頑皮呢,看起來是個任性十足的朋友,個性極強(qiáng),UDP很瘦,身體由五個部分組成,不像TCP那樣有很多幫助控制說話穩(wěn)定性、可靠性以及速度的字段,一共十幾個之多。UDP的身體只有五部分,如下圖:

- source Port 發(fā)出聲音的人
- Destination Port 聽聲音的人
- Length 說話的長短
- Checksum 把聲音轉(zhuǎn)換成二進(jìn)制進(jìn)行和運(yùn)算,再取反,接收方收到數(shù)據(jù)以后,會按照和運(yùn)算的方法重新計算一遍,是否等于報文的checksum,不相等的話,說明數(shù)據(jù)有丟失。
- Data octets 一個字節(jié)的數(shù)據(jù),Octets是8位
UDP有哪些不同于TCP的技能
作用不同:
TCP主要想保證可靠性并且傳輸數(shù)據(jù)
UDP要輕裝上陣,只保證核心數(shù)據(jù)傳輸功能,不做其他工作安全程度
TCP 在保證數(shù)據(jù)不丟失的基礎(chǔ)上,傳輸數(shù)據(jù)
UDP 只進(jìn)行最簡單的和校驗(yàn),沒有其他保證數(shù)據(jù)安全的措施連接
TCP 傳輸數(shù)據(jù)必須以建立連接為前提
UDP 沒有建立連接的概念傳輸速度
TCP 有滑動窗口協(xié)商機(jī)制,用來控制傳輸速度
UDP 協(xié)議簡單,封包小,沒有連接-握手、揮手,只專注數(shù)據(jù)發(fā)送流控技術(shù)
TCP 會根據(jù)緩沖區(qū)和接收方的要求控制同一時間發(fā)送數(shù)據(jù)的大小
UDP 沒有相關(guān)設(shè)置場景差異
每個協(xié)議都有自己適合的場景,TCP每次請求都有ACK確認(rèn),面向連接,但是這樣就會造成傳輸時間有一定的延遲,所以特別適合數(shù)據(jù)傳輸過程不能丟失,而且數(shù)據(jù)量不是特別大的情況,,如發(fā)郵件、發(fā)短信。而UDP呢,因?yàn)閭鬏敯?,沒有流速控制,所以特別適合傳輸數(shù)據(jù)量大,可以允許少量丟包的場景,如音頻、視頻、直播、ping等。
但是近些年有一種趨勢,隨著技術(shù)手段和需求不斷的更替,TCP和UDP使用的場景變的不那么清晰了,使用TCP傳輸文件是通用的解決方法,但是TCP傳輸時間延遲比較長。如果我們想要以更快的速度傳輸文件,少量的數(shù)據(jù)丟失也可以通過技術(shù)手段找回來,那么UDP就是最好的替代方案。再比如HTTP1.0,HTTP2.0都使用TCP來保證數(shù)據(jù)可靠性,但是HTTP3.0在目前沒有更多更好的優(yōu)化方案情況下,采用UDP來提高數(shù)據(jù)發(fā)送速率,增加亮點(diǎn)。
理論上來說能夠使用TCP作為傳輸協(xié)議的,UDP都能替代,近些年對于小而輕的工具越來越多的受到大家的追捧,也是技術(shù)的趨勢,從前整套的解決方案不再是主流追逐的方向。人們喜歡用不同的工具自由解決實(shí)際問題,如linux中有很多小而美的工具。
以下列出,一些協(xié)議適用的場景:
TCP場景:
- 遠(yuǎn)程控制(SSH)
- File Transfer Protocol(FTP)
- 郵件(SMTP、IMAP)等
- 點(diǎn)對點(diǎn)文件傳輸(微信)等
UDP場景:
- 網(wǎng)絡(luò)游戲
- 音視頻傳輸
- DNS
- Ping
- 直播
模糊地帶:
- HTTP(目前TCP為主)
- 文件傳輸