貴州網(wǎng)站建設(shè)公司網(wǎng)絡(luò)營(yíng)銷專業(yè)的就業(yè)方向
UDP的詳細(xì)解析
文章目錄
- UDP的詳細(xì)解析
- UDP 概述
- UDP的首部格式
- 檢驗(yàn)和的計(jì)算
- 抓包測(cè)試
- 參考
TCP/IP運(yùn)輸層的兩個(gè)主要協(xié)議都是互聯(lián)網(wǎng)的正式標(biāo)準(zhǔn),即:
- 用戶數(shù)據(jù)報(bào)協(xié)議UDP (User Datagram Protocol)
- 傳輸控制協(xié)議TCP (Transmission Control Protocol)
按照OSI的術(shù)語,兩個(gè)對(duì)等運(yùn)輸實(shí)體在通信時(shí)傳送的數(shù)據(jù)單位叫做運(yùn)輸協(xié)議數(shù)據(jù)單元 TPDU.但在TCP/IP體系中,根據(jù)所使用的協(xié)議是TCP或UDP,分別稱之為TCP報(bào)文段或UDP用戶數(shù)據(jù)報(bào)。
UDP在傳送數(shù)據(jù)之前不需要先建立連接。遠(yuǎn)地主機(jī)的運(yùn)輸層在收到UDP報(bào)文后,不需要給出任何確認(rèn)。雖然UDP不提供可靠交付,但在某些情況下UDP卻是一種最有效的工作方式。
下表為一些應(yīng)用和應(yīng)用層協(xié)議主要使用的運(yùn)輸層協(xié)議。
應(yīng)用 | 應(yīng)用層協(xié)議 | 運(yùn)輸層協(xié)議 |
---|---|---|
名字轉(zhuǎn)換 | DNS(域名系統(tǒng)) | UDP |
文件傳送 | TDTP(簡(jiǎn)單文件傳送協(xié)議) | UDP |
路由選擇協(xié)議 | RIP(路由選擇協(xié)議) | UDP |
IP地址配置 | DHCP(動(dòng)態(tài)主機(jī)配置協(xié)議) | UDP |
網(wǎng)絡(luò)管理 | SNMP(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議) | UDP |
遠(yuǎn)程文件服務(wù) | NFS(網(wǎng)絡(luò)文件系統(tǒng)) | UDP |
IP電話 | 專用協(xié)議 | UDP |
流式多媒體通信 | 專用協(xié)議 | UDP |
多播 | IGMP(網(wǎng)際組管理協(xié)議) | UDP |
電子郵件 | SMTP(簡(jiǎn)單郵件傳送協(xié)議) | TCP |
遠(yuǎn)程終端接入 | TELNET(遠(yuǎn)程終端協(xié)議) | TCP |
萬維網(wǎng) | HTTP(超文本傳送協(xié)議) | TCP |
文件傳送 | FTP(文件傳送協(xié)議) | TCP |
UDP 概述
用戶數(shù)據(jù)報(bào)協(xié)議UDP只在IP的數(shù)據(jù)服務(wù)之上加了很少一點(diǎn)功能,這就是復(fù)用和分用的功能以及差錯(cuò)檢測(cè)的功能。UDP的主要特點(diǎn)是:
-
UDP是無連接的,即數(shù)據(jù)發(fā)送之前不需要建立連接
-
UDP使用盡最大努力交付,即不保證可靠交付,因此主機(jī)不需要維持復(fù)雜的連接狀態(tài)表。
-
UDP是面向報(bào)文的。UDP對(duì)應(yīng)用層交下來的報(bào)文,既不合并,也不拆分,而是保留這些報(bào)文的邊界。這就是說應(yīng)用層交給UDP多長(zhǎng)的報(bào)文,UDP就照樣發(fā)送,UDP一次交付一個(gè)完整的報(bào)文。若報(bào)文太長(zhǎng),UDP把它交給IP層后,IP層在傳送時(shí)可能要進(jìn)行分片。
-
UDP沒有擁塞控制 網(wǎng)絡(luò)出現(xiàn)擁塞不會(huì)使源主機(jī)的發(fā)送速率降低。這對(duì)某些實(shí)時(shí)應(yīng)用使很重要的。
-
UDP 支持一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多的交互通信
-
UDP 的首部開銷小,只有8個(gè)字節(jié),比TCP的20個(gè)字節(jié)的首部要短。
UDP的首部格式
用戶數(shù)據(jù)報(bào)UDP有兩個(gè)字段:數(shù)據(jù)字段和首部i段。首部字段只有8個(gè)字節(jié),由四個(gè)字段組成,每個(gè)字段的長(zhǎng)度都是兩個(gè)字節(jié)。
- 源端口 源端口號(hào)。在需要對(duì)方回信時(shí)選用。不需要時(shí)可用全0
- 目的端口 目的端口號(hào)。這在終點(diǎn)交付報(bào)文時(shí)必須使用
- 長(zhǎng)度 UDP 用戶數(shù)據(jù)報(bào)的長(zhǎng)度,其最小值時(shí)8(僅有首部)
- 檢驗(yàn)和 檢測(cè)UDP用戶數(shù)據(jù)報(bào)在傳輸中是否有錯(cuò)。有錯(cuò)就丟棄。
當(dāng)接收方UDP發(fā)現(xiàn)收到的報(bào)文中的目的端口號(hào)不正確(即不存在對(duì)應(yīng)于該端口號(hào)的應(yīng)用進(jìn)程),就丟棄該報(bào)文,并由網(wǎng)際控制報(bào)文協(xié)議ICMP發(fā)送“端口不可達(dá)”差錯(cuò)報(bào)文給發(fā)送方。
檢驗(yàn)和的計(jì)算
UDP用戶數(shù)據(jù)報(bào)首部中檢驗(yàn)和的計(jì)算方法有些特殊。在計(jì)算檢驗(yàn)和時(shí)要在UDP用戶數(shù)據(jù)報(bào)之前加12個(gè)字節(jié)的偽首部。偽首部既不向下傳送也不向上遞交,而僅僅是為了計(jì)算檢驗(yàn)和。通過上面那幅圖我們可以看到偽首部中的字段信息:
- 32位源IP地址
- 32位目的IP地址
- 8位保留字節(jié)(置0)
- 8位傳輸層協(xié)議號(hào)(TCP是6,UDP是17)
- 16位報(bào)文長(zhǎng)度(首部+數(shù)據(jù))
檢驗(yàn)和是如何工作的,我們可以通過觀察下圖:
我們對(duì)應(yīng)著上面這副圖看,其實(shí)計(jì)算這個(gè)檢驗(yàn)和的過程其實(shí)就是,將加上偽首部后的數(shù)據(jù)按照每16位相加求和。將求和后的結(jié)果取反與UDP自帶的檢驗(yàn)和相與,若得到的結(jié)果是全1的則說明數(shù)據(jù)傳輸無誤。(剛好這里的檢驗(yàn)和在UDP是以2字節(jié)存儲(chǔ)的,剛好是12位)。
若在求16位求和結(jié)果時(shí)發(fā)生進(jìn)位,那么需要進(jìn)行回卷。計(jì)算的過程可以參考這篇 回卷計(jì)算。
讀到這里不知道大家會(huì)不會(huì)有問題,就是為什么UDP在計(jì)算檢驗(yàn)和的時(shí)候需要加上偽首部。
對(duì)于這個(gè)問題最簡(jiǎn)單的回答就是:出于歷史原因。如下圖David P. Reed的解釋:
前面這個(gè)不好翻譯,在StackOverflow中找到了一個(gè)相關(guān)的解答:
抓包測(cè)試
UDP有著很廣泛的應(yīng)用場(chǎng)景。它的特點(diǎn)就像上面看到的很簡(jiǎn)單,沒有流量控制以及差錯(cuò)重傳等特點(diǎn),作為傳輸層的協(xié)議常常被拿來和tcp協(xié)議比較。所以廣泛應(yīng)用于qq聊天,視頻,網(wǎng)絡(luò)電視,迅雷等場(chǎng)景。缺點(diǎn)就是容易丟包。
我拿qq聊天來抓個(gè)UDP數(shù)據(jù)包試試。
首先通過終端查看本機(jī)的ip地址和物理地址:
我們首先打開抓包工具然后,用qq給自己的Android手機(jī)發(fā)送聊天,可以發(fā)現(xiàn)抓包工具成功捕獲信息,如下圖。
我們查看一下第二條記錄中的詳細(xì)信息
現(xiàn)在我們?cè)偃タ纯此衠q是否有占用52652這個(gè)端口。用netstat -ano
列出所有占用的端口號(hào),同時(shí)用任務(wù)管理器查看qq的PID。查看的結(jié)果如下圖,發(fā)現(xiàn)52652這個(gè)端口確實(shí)被qq所占用。
參考
-
UDP 檢驗(yàn)和原理
-
為什么校驗(yàn)時(shí)要加上IP信息的偽首部
-
UDP/TCP 中使用偽標(biāo)頭的意義是什么
-
《計(jì)算機(jī)網(wǎng)絡(luò) 第7版》