UDP協(xié)議及分析_第1頁
UDP協(xié)議及分析_第2頁
UDP協(xié)議及分析_第3頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、UDP協(xié)議及分析一、UDP協(xié)議UDP是UserDatagramProtocol的簡(jiǎn)稱,中文名是用戶數(shù)據(jù)報(bào)協(xié)議,是OSI(OpenSystemInterconnection,開放式系統(tǒng)互聯(lián))參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù),IETFRFC768是UDP勺正式規(guī)范。UD咔IP報(bào)文的協(xié)議UDF議的全稱是用戶數(shù)據(jù)報(bào)協(xié)議,在網(wǎng)絡(luò)中它與TCPB議一樣用于處理數(shù)據(jù)包,是一種無連接的協(xié)議。在OSI模型中,在第四層一一傳輸層,處于IP協(xié)議的上一層。UDPt不提供數(shù)據(jù)包分組、組裝和不能對(duì)數(shù)據(jù)包進(jìn)行排序的缺點(diǎn),也就是說,當(dāng)報(bào)文發(fā)送之后,是無法得知其是否安全完整到達(dá)的。UDPi來

2、支持那些需要在計(jì)算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。包括網(wǎng)絡(luò)視頻會(huì)議系統(tǒng)在內(nèi)的眾多的客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用UDF議。UDPB議從問世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天UDP05然不失為一項(xiàng)非常實(shí)用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。與所熟知的TCP(傳輸控制協(xié)議)協(xié)議一樣,UDPB議直接位于IP(網(wǎng)際協(xié)議)協(xié)議的頂層。根據(jù)OSI(開放系統(tǒng)互連)參考模型,UDPffiTCPt8屬于傳輸層協(xié)議。UD呦議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)包的形式。一個(gè)典型的數(shù)據(jù)包就是一個(gè)二進(jìn)制數(shù)據(jù)的傳輸單位。每一個(gè)數(shù)據(jù)包的前8個(gè)字節(jié)用來包含報(bào)頭信息,剩余字節(jié)則用來包含具體

3、的傳輸數(shù)據(jù)。二、UDP協(xié)議的主要特點(diǎn)(1) UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接。(2) UDP使用盡最大努力交付,即不保證可靠交付,同時(shí)也不使用擁塞控制。(3) UDP是面向報(bào)文的。UDP沒有擁塞控制,很適合多媒體通信的要求。(4) UDP支持一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多的交互通信。(5) UDP的首部開銷小,只有8個(gè)字節(jié)。三、UDP協(xié)議的使用在選擇使用協(xié)議的時(shí)候,選擇UDP®須要謹(jǐn)慎。在網(wǎng)絡(luò)質(zhì)量令人十分不滿意的環(huán)境下,UD呦議數(shù)據(jù)包丟失會(huì)比較嚴(yán)重。但是由于UDP勺特性:它不屬于連接型協(xié)議,因而具有資源消耗小,處理速度快的優(yōu)點(diǎn),所以通常音頻、視頻和普通數(shù)據(jù)在傳送時(shí)使用U

4、DPR多,因?yàn)樗鼈兗词古紶杹G失一兩個(gè)數(shù)據(jù)包,也不會(huì)對(duì)接收結(jié)果產(chǎn)生太大影響。比如我們聊天用的ICQ和QCm是使用的UDPfe議四、UDP協(xié)議的報(bào)頭面向報(bào)文的UDP發(fā)送方UDP對(duì)應(yīng)用程序交下來的報(bào)文,在添加首部后就向下交付IP層。UDP對(duì)應(yīng)用層交下來的報(bào)文,既不合并,也不拆分,而是保留這些報(bào)文的邊界。應(yīng)用層交給UDP多長的報(bào)文,UDP就照樣發(fā)送,即一次發(fā)送一個(gè)報(bào)文。接收方UDP對(duì)IP層交上來的UDP用戶數(shù)據(jù)報(bào),在去除首部后就原封不動(dòng)地交付上層的應(yīng)用進(jìn)程,一次交付一個(gè)完整的報(bào)文。應(yīng)用程序必須選擇合適大小的報(bào)文。(1) UDP報(bào)文的組成UDP報(bào)頭由4個(gè)域組成,其中每個(gè)域各占用2個(gè)字節(jié),具體如下:UDP

5、®端口號(hào)、目標(biāo)端口號(hào)、數(shù)據(jù)報(bào)長度、校驗(yàn)值16fcUDP16瓦UDP栓短制Mlgt加有)UDF議使用端口號(hào)為不同的應(yīng)用保留其各白的數(shù)據(jù)傳輸通道。UDPTCPW議正是采用這一機(jī)制實(shí)現(xiàn)對(duì)同一時(shí)刻內(nèi)多項(xiàng)應(yīng)用同時(shí)發(fā)送和接收數(shù)據(jù)的支持。數(shù)據(jù)發(fā)送一方(可以是客戶端或服務(wù)器端)將UD啜據(jù)包通過源端口發(fā)送出去,而數(shù)據(jù)接收一方則通過目標(biāo)端口接收數(shù)據(jù)。有的網(wǎng)絡(luò)應(yīng)用只能使用預(yù)先為其預(yù)留或注冊(cè)的靜態(tài)端口;而另外一些網(wǎng)絡(luò)應(yīng)用則可以使用未被注冊(cè)的動(dòng)態(tài)端口。因?yàn)閁DP艮頭使用兩個(gè)字節(jié)存放端口號(hào),所以端口號(hào)的有效范圍是從0到65535。一般來說,大于49151的端口號(hào)都代表動(dòng)態(tài)端口。數(shù)據(jù)報(bào)的長度是指包括報(bào)頭和數(shù)據(jù)部分

6、在內(nèi)的總字節(jié)數(shù)。因?yàn)閳?bào)頭的長度是固定的,所以該域主要被用來計(jì)算可變長度的數(shù)據(jù)部分(又稱為數(shù)據(jù)負(fù)載)。數(shù)據(jù)報(bào)的最大長度根據(jù)操作環(huán)境的不同而各異。從理論上說,包含報(bào)頭在內(nèi)的數(shù)據(jù)報(bào)的最大長度為65535字節(jié)。不過,一些實(shí)際應(yīng)用往往會(huì)限制數(shù)據(jù)報(bào)的大小,有時(shí)會(huì)降低到8192字節(jié)。UDF議使用報(bào)頭中的校驗(yàn)值來保證數(shù)據(jù)的安全。校驗(yàn)值首先在數(shù)據(jù)發(fā)送方通過特殊的算法計(jì)算得出,在傳遞到接收方之后,還需要再重新計(jì)算。如果某個(gè)數(shù)據(jù)報(bào)在傳輸過程中被第三方篡改或者由于線路噪音等原因受到損壞,發(fā)送和接收方的校驗(yàn)計(jì)算值將不會(huì)相符,由此UDPW議可以檢測(cè)是否出錯(cuò)。這與TC呦議是不同的,后者要求必須具有校驗(yàn)值。許多鏈路層協(xié)議都提

7、供錯(cuò)誤檢查,包括流行的以太網(wǎng)協(xié)議,也許你想知道為什么UDPfe要提供檢查和校驗(yàn)。其原因是鏈路層以下的協(xié)議在源端和終端之間的某些通道可能不提供錯(cuò)誤檢測(cè)。雖然UDPI供有錯(cuò)誤檢測(cè),但檢測(cè)到錯(cuò)誤時(shí),UDE做錯(cuò)誤校正,只是簡(jiǎn)單地把損壞的消息段扔掉,或者給應(yīng)用程序提供警告信息。UDPHelper是實(shí)現(xiàn)對(duì)指定UD制口廣播報(bào)文的中繼轉(zhuǎn)發(fā),即將指定UD制口的廣播報(bào)文轉(zhuǎn)換為單播報(bào)文發(fā)送給指定的服務(wù)器,起到中繼的作用.據(jù)UDP的首部格式字節(jié)44112源IP地址目的IP地址017UDP長度源端口目的端口長度檢驗(yàn)和UDP用戶數(shù)據(jù)報(bào)首部數(shù)據(jù)發(fā)送在前IP數(shù)據(jù)報(bào)用戶數(shù)據(jù)報(bào)UDP有兩個(gè)字段:數(shù)據(jù)字段和首部字段。首部字段有8個(gè)

8、字節(jié),由4個(gè)字段組成,每個(gè)字段都是兩個(gè)字節(jié)。44112源IP地址目的IP地址017UDP長度字節(jié)122222口為言曲I源端口目的端口長度檢驗(yàn)和首部數(shù)據(jù)發(fā)送在前了首部數(shù)u據(jù)ip數(shù)據(jù)報(bào)五、UDP報(bào)文段的校驗(yàn)UD磴部校驗(yàn)和的計(jì)算ip/icmp/igmp/tcp/udP?協(xié)議的校驗(yàn)和算法都是相同的,算法如下:在發(fā)送數(shù)據(jù)時(shí),為了計(jì)算IP數(shù)據(jù)包的校驗(yàn)和。應(yīng)該按如下步驟:(1) 把IP數(shù)據(jù)包的校驗(yàn)和字段置為0;把首部看成以16位為單位的數(shù)字組成,依次進(jìn)行二進(jìn)制反碼求和;(2) 把得到的結(jié)果存入校驗(yàn)和字段中。在接收數(shù)據(jù)時(shí),計(jì)算數(shù)據(jù)包的校驗(yàn)和相對(duì)簡(jiǎn)單,按如下步驟:把首部看成以16位為單位的數(shù)字組成,依次進(jìn)行二進(jìn)

9、制反碼求和,包括校驗(yàn)和字段;(1) 檢查計(jì)算出的校驗(yàn)和的結(jié)果是否等于零(反碼應(yīng)為16個(gè)1);(2) 如果等于零,說明被整除,校驗(yàn)是和正確。否則,校驗(yàn)和就是錯(cuò)誤的,協(xié)議棧要拋棄這個(gè)數(shù)據(jù)包。所謂的二進(jìn)制反碼求和,即為先進(jìn)行二進(jìn)制求和,然后對(duì)和取反。計(jì)算對(duì)IP首部檢驗(yàn)和的算法如下:(1) 把IP數(shù)據(jù)包的校驗(yàn)和字段置為0;(2) 把首部看成以16位為單位的數(shù)字組成,依次進(jìn)行二進(jìn)制求和(注意:求和時(shí)應(yīng)將最高位的進(jìn)位保存,所以加法應(yīng)采用32位加法);(3) 將上述加法過程中產(chǎn)生的進(jìn)位(最高位的進(jìn)位)加到低16位(采用32位加法時(shí),即為將高16位與低16位相加,之后還要把該次加法最高位產(chǎn)生的進(jìn)位加到低16位

10、)12字節(jié)偽首部153.1Q.810417L3.14.11001100100010011153.1900001000011010008.10410101011G000001117130000111000001011f14J18字節(jié)UDP首部1087OOOOOOOQ00010001f。和C70000000000001111i157字節(jié)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)OOOOOlOOQOUUll-1080000000000001101-130000000000001111f150000000000000000i0餐驗(yàn)和)(4) 將上述的和取反,即得到校驗(yàn)和。0101010001000101f數(shù)據(jù)0101001

11、101010100f數(shù)據(jù)0100100101001110f數(shù)蠢010001110000000。f數(shù)據(jù)和。(填充)按二進(jìn)制反碼運(yùn)算求和W0101101U01101i求和得出的結(jié)吳將得出的結(jié)果求反瑪0110100100010010i檢驗(yàn)和計(jì)算UDP檢驗(yàn)和的例子六、附:計(jì)算UDP檢驗(yàn)和的代碼/下面代碼片段展現(xiàn)的是在GNU/Linux中具體的計(jì)算方式#include<stdint.h>#include<unistd.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netdb.h>#i

12、nclude<netinet/in.h>#include<netinet/ip.h>#include<netinet/ether.h>#include<netinet/udp.h>#include<netinet/tcp.h>structpseudo_headuint32_tsaddr;uint32_tdaddr;charzero;charproto;unsignedshortlen;intcal_cksum(char*p)structiphdr*ip=(structiphdr*)(p+sizeof(structether_heade

13、r);cal_ip_cksum(ip);structtcphdr*tcp;structudphdr*udp;char*f=(char*)ip+20;switch(ip->protocol)caseIPPROTO_TCP:tcp=(structtcphdr*)f;tcp->check=0;tcp->check=cal_udptcp_cksum(unsignedshort*)f,ip);break;caseIPPROTO_UDP:udp=(structudphdr*)f;udp->check=0;udp->check=cal_udptcp_cksum(unsigned

14、short*)f,ip);break;caseIPPROTO_IP:break;default:return1;return0;inlinestaticvoidcal_ip_cksum(structiphdr*ip)ip->check=0;ip->check=in_cksum(unsignedshort*)ip,20,0);<inlinestaticunsignedshortcal_udptcp_cksum(unsignedshort*p,structiphdr*ip)intlen=ntohs(ip->tot_len)-20;structpseudo_headph;ph.len=htons(len);ph.saddr=ip->saddr;ph.daddr=ip->daddr;to=ip->protocol;ph.zero=0;intsum=cal_sum(unsignedshort*)&ph,sizeof(ph);returnin_cksum(p,len,sum);unsignedshortin_cksum(unsignedshort*p,intlen,intsum)intn=len;while(n>1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論