成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

網(wǎng)絡(luò)協(xié)議 7 - UDP

moven_j / 875人閱讀

摘要:網(wǎng)絡(luò)協(xié)議五步登天路,我們一路邁過了物理層鏈路層,今天終于到了傳輸層。沒有花花腸子大量的數(shù)據(jù)結(jié)構(gòu)處理邏輯包頭字段,秉承性善論,相信網(wǎng)絡(luò)通路很容易到達(dá),不容易被丟棄輕信他人。我們之前認(rèn)識的就是基于協(xié)議的。

????網(wǎng)絡(luò)協(xié)議五步登天路,我們一路邁過了物理層、鏈路層,今天終于到了傳輸層。從這一層開始,很多知識應(yīng)該都是服務(wù)端開發(fā)必備的知識了,今天我們就一起來梳理下。

????其實(shí),講到 UDP,就少不了 TCP。這倆貨簡直就是個(gè)“連體兄弟”,只要出現(xiàn)一個(gè),另一個(gè)肯定就在不遠(yuǎn)處等著你。

????博主相信,絕大多數(shù)的服務(wù)端開發(fā)都碰到過“TCP 與 UDP 的區(qū)別”這樣的面試題,而在實(shí)際業(yè)務(wù)開發(fā)中,也會(huì)對比 TCP 與 UDP,選擇合適的協(xié)議進(jìn)行開發(fā)。

????所以,咱們還是老生常談,先來看看這倆兄弟的區(qū)別。

TCP 與 UDP 的區(qū)別

????相信很多人都知道,TCP 是面向連接的,UDP 是面向無連接的。

????那么,什么是面向連接,什么是面向無連接呢?

????在互通之前,面向連接的協(xié)議會(huì)先建立連接,再進(jìn)行通信。就像 TCP 會(huì)進(jìn)行三次握手,而 UDP 不會(huì)。

????那為什么會(huì)建立連接呢?TCP 進(jìn)行三次握手,UDP 就不能發(fā)三個(gè)數(shù)據(jù)包玩玩,有什么區(qū)別呢?

????其實(shí)這里所謂的建立連接,就是通過建立一定的數(shù)據(jù)結(jié)構(gòu)來維護(hù)客戶端和服務(wù)端交互的狀態(tài),用這樣的數(shù)據(jù)結(jié)構(gòu)來保證所謂的面向連接的特性。

????上面這段話中,有一個(gè)很重要的詞-狀態(tài)。也就是說,TCP 實(shí)質(zhì)上是一個(gè)有狀態(tài)的服務(wù)。這個(gè)狀態(tài),可以說是它和 UDP 的本質(zhì)區(qū)別。

????通俗點(diǎn)講,有狀態(tài)的 TCP 就是有腦子的,它會(huì)記住數(shù)據(jù)是否已經(jīng)精確發(fā)送了,發(fā)到哪里了,應(yīng)該接收哪個(gè)數(shù)據(jù),不能容忍一點(diǎn)錯(cuò)誤。

????與之對應(yīng)的,UDP 就是沒腦子的,天真無邪,發(fā)出去的數(shù)據(jù)就發(fā)出去,不會(huì)考慮網(wǎng)絡(luò)世界的“惡意”。

TCP 既然有腦子,那肯定能做到很多 UDP 做不到的事情,例如:

提供可靠交付。通過 TCP 連接傳輸?shù)臄?shù)據(jù),無差錯(cuò)、不丟失、不重復(fù),且按序到達(dá)。而 UDP 則是不保證不丟失,不保證按序到達(dá)。

面向字節(jié)流。TCP 發(fā)送的時(shí)候是一個(gè)流,沒有頭尾。而 UDP 是基于數(shù)據(jù)報(bào),一個(gè)個(gè)發(fā),一個(gè)個(gè)收

可進(jìn)行擁塞控制。TCP 意識到包丟棄或者網(wǎng)絡(luò)環(huán)境不好的時(shí)候,會(huì)調(diào)整自己的行為,決定要發(fā)快點(diǎn),還是發(fā)慢點(diǎn)。而 UDP 則是應(yīng)用讓我發(fā),我就發(fā),管它洪水滔天。。

UDP 包頭

????發(fā)送的 UDP 包到達(dá)目標(biāo)機(jī)器后,發(fā)現(xiàn) MAC 地址匹配,于是取下來,然后再交給 IP 層處理,發(fā)現(xiàn) IP 匹配,接下來呢?數(shù)據(jù)包給誰呢?

????發(fā)送的時(shí)候,接收機(jī)器怎么知道數(shù)據(jù)包是 UDP 的包呢?所以在 IP 頭里面有個(gè) 8 位協(xié)議,這里會(huì)存放,數(shù)據(jù)包究竟是 TCP 還是 UDP。

????處理完傳輸層的事情,內(nèi)核的事情基本上就干完了,里面的數(shù)據(jù)應(yīng)該交給應(yīng)用程序自己去處理??墒牵慌_機(jī)器上跑著那么多的應(yīng)用程序,應(yīng)該給誰呢?

????無論應(yīng)用程序?qū)懙氖鞘褂?TCP 傳呼機(jī),還是 UDP 傳數(shù)據(jù),都要監(jiān)聽一個(gè)端口。正式這個(gè)端口,用來區(qū)分應(yīng)用程序。

????這樣,UDP 頭里面的內(nèi)容就都出來了,如下圖:

????當(dāng)我們看到 UDP 包頭的時(shí)候,發(fā)現(xiàn)的確有端口號,有源端口號和目標(biāo)端口號。但是它除了端口號,就再?zèng)]有其他的,和 TCP 頭比起來,簡單的一塌糊涂。

UDP 三大特點(diǎn)

上面提過,UDP 像個(gè)小孩子一樣,比較簡單,有以下特點(diǎn):

溝通簡單。沒有花花腸子(大量的數(shù)據(jù)結(jié)構(gòu)、處理邏輯、包頭字段),秉承“性善論”,相信網(wǎng)絡(luò)通路很容易到達(dá),不容易被丟棄;

輕信他人。不會(huì)建立連接,只認(rèn)端口號,誰都可以給他傳數(shù)據(jù),他也可以傳給任何人數(shù)據(jù),甚至可以同時(shí)傳給多人數(shù)據(jù);

愣頭青,做事不懂權(quán)變。不會(huì)根據(jù)網(wǎng)絡(luò)的請求進(jìn)行擁塞控制,不管網(wǎng)絡(luò)再差,它該怎么發(fā)還怎么發(fā)。

UDP 使用場景

????正所謂“禍兮福所倚”,雖然 UDP 有著很多問題,但也可以在特定場景中發(fā)揮更好的作用。

????第一,需要資源少,在網(wǎng)絡(luò)情況比較好的內(nèi)網(wǎng),或者對于丟包不敏感的應(yīng)用。這很好理解,就像你是領(lǐng)導(dǎo),你會(huì)讓你們組剛畢業(yè)的小伙伴去做一些沒有那么難,或者是失敗了也能忍受的實(shí)驗(yàn)性項(xiàng)目。

我們之前認(rèn)識的 DHCP 就是基于 UDP 協(xié)議的。一般的獲取 IP 地址都是內(nèi)網(wǎng)請求,而且一次獲取不到 IP 也沒關(guān)系,過一會(huì)還可以請求獲取。

????第二,不需要建立連接,一對一溝通,而且需要廣播的應(yīng)用。 UDP 的不面向連接的功能,可以承載廣播或多播的協(xié)議。DHCP 就是一種廣播的形式。

對于多播,我們之前提到的 IP 地址中的 D 類地址,也就是組播地址。使用這個(gè)地址,可以將包組播給一批機(jī)器。當(dāng)一臺機(jī)器上的某個(gè)進(jìn)程想監(jiān)聽某個(gè)組播地址時(shí),需要發(fā)送 IGMP 包,所在網(wǎng)絡(luò)的路由器收到這個(gè)包,知道有個(gè)機(jī)器有個(gè)進(jìn)程在監(jiān)聽這個(gè)組播地址。當(dāng)路由器收到這個(gè)組播地址的數(shù)據(jù)包時(shí),就會(huì)將包轉(zhuǎn)發(fā)給這臺機(jī)器,這樣就實(shí)現(xiàn)了跨路由器的組播。

????第三,需要處理速度快、延時(shí)低、可以容忍少數(shù)丟包,但是要求即便網(wǎng)絡(luò)阻塞,也毫不退縮,一往無前的時(shí)候。

????UDP 簡單、處理速度快,不像 TCP 那樣操那么多的心。并且,TCP 在網(wǎng)絡(luò)不好出現(xiàn)丟包的時(shí)候,它的擁塞策略會(huì)主動(dòng)的降低發(fā)送速度,這就相當(dāng)于本來環(huán)境就差,還自斷臂膀,用戶本來就卡,這下更卡了。

????當(dāng)前很多應(yīng)用都是要求低時(shí)延的,他們可不想用 TCP 如此復(fù)雜的機(jī)制,而是想根據(jù)自己的場景,實(shí)現(xiàn)自己的可靠和連接保證。例如,如果應(yīng)用覺得,有的包丟了就丟了,沒必要重傳了,而有的比較重要的包丟了,則應(yīng)用自己重傳,不依賴 TCP。

????由于 UDP 十分簡單,基本啥都沒做,也就給了應(yīng)用“城會(huì)玩”的機(jī)會(huì)。就像在和平年代,每個(gè)人應(yīng)該有獨(dú)立的思考和行為,應(yīng)該可靠且禮讓。但是如果在戰(zhàn)爭年代,往往不太需要過于獨(dú)立的思考,而需要士兵簡單服從命令即可。

基于 UDP 的“城會(huì)玩”的五個(gè)例子
城會(huì)玩 一:網(wǎng)頁或 APP 的訪問

????網(wǎng)頁和手機(jī) APP 都是基于 HTTP 協(xié)議的,而HTTP 協(xié)議是基于 TCP 的,建立連接都需要多次交互,對于時(shí)延比較大的移動(dòng)互聯(lián)網(wǎng)來講,建立一次連接需要的時(shí)間會(huì)比較長,而且移動(dòng)互聯(lián)網(wǎng)還是在移動(dòng)中,TCP 可能還會(huì)斷了重連,這也是很耗時(shí)的。

????除此之外,目前的 HTTP 協(xié)議,往往采取多個(gè)數(shù)據(jù)通道共享一個(gè)連接的情況這樣本來為了加快傳輸速度,但是 TCP 的嚴(yán)格順序策略使得哪怕共享通道,前一個(gè)不來,后一個(gè)和前一個(gè)即便沒關(guān)系,也要等著,時(shí)延也會(huì)加大。

????而 QUIC(Quik UDP Internet Connections,快速 UDP 互聯(lián)網(wǎng)連接)是 Google 提出的一種基于 UDP 改進(jìn)的通信協(xié)議,其目的是降低網(wǎng)絡(luò)通信的延遲,提供更好的用戶互動(dòng)體驗(yàn)。

????QUIC 在應(yīng)用層會(huì)自己實(shí)現(xiàn)快速連接建立、減少重傳時(shí)延,自適應(yīng)擁塞控制,是應(yīng)用層“城會(huì)玩”的代表。

“城會(huì)玩” 二:流媒體的協(xié)議

????直播協(xié)議多使用 RTMP,這個(gè)協(xié)議就是基于 UDP 的。TCP 的嚴(yán)格順序傳輸要保證前一個(gè)收到了,下一個(gè)才能確認(rèn)。對于直播來講,這顯然是不合適的,因?yàn)槔系囊曨l幀丟了就丟了,就算再傳過來用戶也不在意,他們要看新的了,如果一直沒來,用戶就會(huì)一直顯示卡頓,新的也看不了。所以,對于直播,實(shí)時(shí)性比較重要,寧可丟包,也不要卡頓的。

????另外,對于丟包,其實(shí)對于食品播放來講,有的包可以丟,有的包不能丟,因?yàn)橐曨l的連續(xù)幀里面,有的包重要,有的包不重要,如果必須要丟包,隔幾個(gè)幀丟一個(gè),其實(shí)看視頻的人不會(huì)感知,但是如果連續(xù)丟幀,用戶就會(huì)有感知了。因此,在網(wǎng)絡(luò)不好的情況下,應(yīng)用希望選擇性的丟幀。

????還有就是,當(dāng)網(wǎng)絡(luò)不好的時(shí)候,TCP 會(huì)主動(dòng)降低發(fā)送速度。這對本來就卡的看視頻來講是要命的,本來應(yīng)該馬上重傳,而不是主動(dòng)讓步。因此,很多直播應(yīng)用,都基于 UDP 實(shí)現(xiàn)了自己的視頻傳輸協(xié)議。

“城會(huì)玩” 三:實(shí)時(shí)游戲

????游戲有一個(gè)特點(diǎn),就是實(shí)時(shí)性比較高??煲幻肽愀傻魟e人,慢一秒就被別人爆頭,所以很多職業(yè)玩家會(huì)買非常專業(yè)的鼠標(biāo)和鍵盤,爭分奪秒。

????因而,實(shí)時(shí)游戲中客戶端和服務(wù)端要建立長連接,來保證實(shí)時(shí)傳輸,但是游戲玩家很多,服務(wù)器卻不多,由于維護(hù) TCP 連接需要在內(nèi)核維護(hù)一些數(shù)據(jù)結(jié)構(gòu),因而一臺機(jī)器能夠支撐的 TCP 連接數(shù)量是有限的。而 UDP 由于是沒有連接的,在異步 IO 機(jī)制引入之前,常常是應(yīng)對海量客戶端連接的策略。

????另外還是 TCP 的強(qiáng)順序問題,對戰(zhàn)的游戲,對網(wǎng)絡(luò)的要求很簡單,玩家通過客戶端發(fā)送給服務(wù)器鼠標(biāo)和鍵盤行走的位置,服務(wù)器會(huì)處理每個(gè)用戶發(fā)送過來的所有廠家,處理完再返回給客戶端,客戶端解析響應(yīng),渲染最新的場景展示給玩家。

????如果出現(xiàn)一個(gè)數(shù)據(jù)包丟失,所有事情都需要停下來等待這個(gè)數(shù)據(jù)包重發(fā)??蛻舳藭?huì)出現(xiàn)等待接收數(shù)據(jù),然而玩家并不關(guān)心過期的數(shù)據(jù),相信大家玩CF 的時(shí)候,如果激戰(zhàn)中卡 1 秒,是不是就有拍鍵盤的沖動(dòng)?

????游戲?qū)?shí)時(shí)要求較為嚴(yán)格的情況下,采用自定義的 UDP 協(xié)議,自定義重傳策略,能夠把丟包產(chǎn)生的延遲降到最低,盡量減少網(wǎng)絡(luò)問題對游戲性能造成的影響。

“城會(huì)玩” 四:IoT物聯(lián)網(wǎng)

????一方面,物聯(lián)網(wǎng)領(lǐng)域終端資源少,很可能只是內(nèi)存非常小的嵌入式系統(tǒng),而維護(hù) TCP 協(xié)議代價(jià)太大。另一方面,物聯(lián)網(wǎng)對實(shí)時(shí)性要求也很高。Google 旗下的 Nest 建立 Thread Group,推出了物聯(lián)網(wǎng)通信協(xié)議 Thread,就是基于 UDP 協(xié)議的。

“城會(huì)玩” 五:移動(dòng)通信領(lǐng)域

????在 4G 網(wǎng)絡(luò)里,移動(dòng)流量上網(wǎng)的數(shù)據(jù)協(xié)議 GTP-U 也是基于 UDP 的。因?yàn)橐苿?dòng)網(wǎng)絡(luò)協(xié)議比較復(fù)雜,而 GTP 協(xié)議本身就包含復(fù)雜的手機(jī)上線下線的通信協(xié)議。

總結(jié)

如果把 TCP 比作成熟的社會(huì)人,那么 UDP 就是頭腦簡單的小朋友。TCP 復(fù)雜,UDP 簡單;TCP 維護(hù)連接,UDP 誰都相信;TCP 會(huì)知進(jìn)退,UDP 愣頭青一個(gè),勇往直前;

UDP 雖然簡單,但是它可以用在環(huán)境簡單、需要多播、應(yīng)用層自己控制傳輸?shù)牡胤?。例?DHCP、QUIC 等。

參考:

百度百科-UDP 詞條;

劉超-趣談網(wǎng)絡(luò)協(xié)議系列課;

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29677.html

相關(guān)文章

  • 快速了解UDP協(xié)議

    摘要:是什么是的縮寫,是一種用戶數(shù)據(jù)報(bào)協(xié)議,又稱為用戶數(shù)據(jù)報(bào)文協(xié)議。協(xié)議所需資源多,首部需個(gè)字節(jié)不算可選項(xiàng),首部字段只需個(gè)字節(jié)。協(xié)議沒有數(shù)據(jù)邊界,有。因此容易發(fā)生粘包的現(xiàn)象。采用協(xié)議,通過服務(wù)器中轉(zhuǎn)方式。UDP是什么?UDP是User Datagram Protocol的縮寫,是一種用戶數(shù)據(jù)報(bào)協(xié)議,又稱為用戶數(shù)據(jù)報(bào)文協(xié)議。區(qū)別于TCP是面向連接的協(xié)議,UDP是一個(gè)簡單的面向數(shù)據(jù)報(bào)的傳輸層協(xié)議,UD...

    Tecode 評論0 收藏0
  • 使用指南 基礎(chǔ)網(wǎng)絡(luò) UNet

    摘要:防火墻默認(rèn)規(guī)則除已開通端口外,其他端口默認(rèn)關(guān)閉。注意外網(wǎng)防火墻僅對來自外網(wǎng)的彈性的訪問生效。協(xié)議目前防火墻協(xié)議支持及協(xié)議。動(dòng)作防火墻生效時(shí),對數(shù)據(jù)包的處理行為,包含接受拒絕兩種動(dòng)作。注意防火墻至少需要保留一條規(guī)則,因?yàn)槿x時(shí)刪除按鈕不可用。 使用指南推薦防火墻為了給用戶提供使用上的便捷,控制臺上提供了兩個(gè)默認(rèn)的推薦防火墻,分別是Web服務(wù)器推薦與非Web服務(wù)器推薦,兩者之間除Web服務(wù)器推薦...

    ernest.wang 評論0 收藏157
  • TCP/IP協(xié)議

    摘要:協(xié)議族的構(gòu)成數(shù)據(jù)鏈路層網(wǎng)絡(luò)層傳輸層應(yīng)用層和是網(wǎng)絡(luò)層的協(xié)議,但是它所工作的內(nèi)容是鏈路層的。。。發(fā)送的時(shí)候,協(xié)議為每個(gè)包編號,簡稱,以便接收的一方按照順序還原。并沒有提供任何機(jī)制,表示原始文件的大小,這由應(yīng)用層的協(xié)議來規(guī)定。 TCP/IP協(xié)議族的構(gòu)成 * 數(shù)據(jù)鏈路層:ARP,RARP * 網(wǎng)絡(luò)層: IP,ICMP,IGMP * 傳輸層:TCP ,UDP,UGP * 應(yīng)用層:Telnet,F...

    CrazyCodes 評論0 收藏0

發(fā)表評論

0條評論

moven_j

|高級講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<