抓包分析UDP,TCP與UDP的區別需要有理可據,別再死記硬背了

目錄

  • 抓包過程
  • UDP 特點UDP 抓包看首部UDP主要特點
  • UDP 應用代表
  • `TCP` vs `UDP`
  • 從頭部分析 TCP 與 UDP 的區別
  • TCP 解決了五個問題


抓包過程

使用了 Wireshark 進行抓包,用兩個最常用的 curl 和 ping 命令來演示抓包情況,開啟抓包。

<code> 
 

curl

https://zengzhiqin.kuaizhan.com ping https://zengzhiqin.kuaizhan.com /<code>

Wireshark根據 ping 命令得到的地址進行條件過濾,得到上面兩個命令所得到的包,主要有 TCP(https基於tcp協議)協議和 ICMP(ping命令是基於 ICMP 協議)協議的包,如下圖所示:

抓包分析UDP,TCP與UDP的區別需要有理可據,別再死記硬背了

抓包分析


UDP 特點

UDP 抓包看首部

抓包分析UDP,TCP與UDP的區別需要有理可據,別再死記硬背了

UPD 首部


正在我想著要不抓一個 ARP(廣播包,使用 UDP) 包的時候,我先直接在wireshark裡面過濾了一下 UDP 類型的包,還真的有,然後我谷歌了下這包是用來幹嘛,如下:

抓包分析UDP,TCP與UDP的區別需要有理可據,別再死記硬背了

UDP協議抓包分析


抓包分析UDP,TCP與UDP的區別需要有理可據,別再死記硬背了

此包作用


順便吐槽一下百度翻譯,反正這個翻譯我是看不懂。

UDP主要特點

  • UDP 是無連接的,即發送數據之前不需要建立連接
  • UDP 盡最大努力交付,不保證可靠交付,不支持擁塞控制
  • UDP 面向報文,沒有擁塞控制,很適合多媒體通信的要求(例如老師電腦廣播學生電腦講課)
  • UDP 支持一對一,一對多,多對一和多對多的交互通信
  • UDP 首部開銷小,只有8個字節

UDP 應用代表

  1. 網頁或者手機APP的訪問

對於目前主流的移動互聯網來說,TCP 建立比較耗時,還會有連接斷了的問題,QUIC(Qucik UDP Internet Connections, 快速UDP互聯網連接)是Google提出的基於 UDP 改進的通信協議,在應用層上,會自己實現快速連接建立,減少重傳延時,自適應擁塞控制,很牛皮。

  1. 流媒體協議

話說大冪冪今天做客李佳琦直播間了,她太美了!

直播協議很多使用 RTMP,是基於TCP的。但是對於直播來說,視頻播放有的包能丟有的不能,因為視頻的連續幀裡面有的重要有的不重要,格幾個幀丟一個觀眾不會感知,但是連續丟就會卡頓了,因此在網絡不好的時候應用希望選擇性的丟幀。

TCP對直播有個致命的缺點就是網絡不好的時候,TCP協議探測到了會主動降低發送速度,原本就卡那就更要命了,應用層應該是馬上重傳而不是主動讓步。因此,很多直播應用都基於 UDP 實現了自己的視頻傳輸協議。

  1. 實時遊戲

遊戲實時性要求高,拿王者榮耀來說,遇到了猴子慢一秒都是回泉水的問題,因此實時遊戲中客戶端和服務端要建立長連接來保證實時傳輸,可是玩家那麼多都建立長連接騰訊哪怕自家有騰訊雲也扛不住啊,TCP 長連接是需要再內核維護數據結構的,一臺機器能支撐的 TCP 連接數目有限,UDP 是沒有連接的,在異步IO機制引入之前常常是應對海量客戶端連接的有效策略。

還有個原因,是 TCP 保證強順序,一個保丟失了要等重發,客戶端等不了,而且客戶端並不關心過期數據。

  1. LOT 物聯網
  2. 移動通信領域

最後兩個領域我也講不來,是 UDP ,然後實時性要求高,哈哈哈破功了。

TCP vs UDP

抓包分析UDP,TCP與UDP的區別需要有理可據,別再死記硬背了

TCP頭部


抓包分析UDP,TCP與UDP的區別需要有理可據,別再死記硬背了

UDP頭部


TCP 總是秉著嚴謹可靠的做學問的態度,UDP 總是一副盡最大努力交付的商人心態。UDP 工作時,發送方的 UDP 對應用程序交下來的報文,既不合並,也不拆分,而是設立了一個報文長度字段用來保留這些報文的邊界,在添加首部後就直接向下交付網絡層,看上面的 UDP 頭部信息也能感受到他有多麼的粗糙和敷衍了。

從頭部分析 TCP 與 UDP 的區別:

  1. 跟TCP頭部比起來,UDP頭部簡單的有點過分,即UDP結構更加簡單
  2. TCP具有序列號和確認號和緊急指針,TCP 保證數據順序和可靠傳輸,UDP 不保證,對於可靠傳輸,判斷丟包,誤碼靠的是TCP的段編號以及確認號。TCP為了保證報文傳輸的可靠,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的字節發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據(假設丟失了)將會被重傳。
  3. TCP 設立了SYN,ACK,FIN 等標誌來握手建立連接,即TCP 面向連接,UDP 不面向連接,是無狀態的,這點是主要區別,有連接能溝通上其他的事情就好辦了,喝酒還是喝茶都好說話,畢竟有連接了其他的“可靠傳輸”“流量控制”"擁塞控制"等事情都是基於連接來錦上添花的事情`
  4. TCP 具有窗口,即 TCP 可以進行流量控制和擁塞控制,具體控制方法往下看,UDP 就不行,他就是把應用層給的報文加個頭往網絡層一丟完事,生死有命富貴在天。
  5. TCP 是面向字節流傳輸的,UDP 是基於數據報傳輸的。這點其實不難理解,一個個報文獨立地傳輸只適合 UDP 這種全然不顧後果的魯莽傳輸,TCP 還要進行流量控制擁塞控制啥的,肯定不能傳報文,太大了,而是要可控傳輸,字節流發多少都好控制。
  6. UDP 傳輸速度快,TCP 傳輸速度慢,人家TCP要幹那麼多事情,握手交流窗口啥的,肯定更加耗時了。

如果要硬記這些特點,還是很難的,又不是黃蓉可以過目不忘,腦子裡只需要繪製這兩個的頭部內容就好了,區別可以自己推導出來,前提是知道那些是幹啥的。

TCP 解決了五個問題

  • 順序問題
  • 丟包問題
  • 連接維護
  • 流量控制
  • 擁塞控制

順序問題和連接維護可以看我公眾號另外一篇《抓包分析TCP首部》,下篇我們來看看 TCP 丟包問題,以及怎麼通過滑動窗口來進行流量控制和擁塞控制吧。

有收穫的老鐵點個贊鼓勵一下吧,感謝觀看~

下期預告: TCP 流量控制和擁塞控制的實現(這期插了個小隊講UDP)


分享到:


相關文章: