版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、成績(jī):TCP/IP協(xié)議分析課程設(shè)計(jì)題 目: UDP協(xié)議分析 院(系): 軟件學(xué)院 專業(yè)班級(jí): 2010軟件工程(5455)一班 姓 名: 888888 學(xué) 號(hào): 121324435 任課教師: 87867866676767 2013年6月24日文檔可自由編輯打印目 錄1 協(xié)議概述11.1 協(xié)議的簡(jiǎn)介11.2 協(xié)議的作用11.3 協(xié)議的發(fā)展歷程23.1 UDP報(bào)文封裝53.2 UDP報(bào)文的抓取步驟53.3 UDP報(bào)文格式的分析73.3.1 報(bào)文格式73.3.2 UDP信息包73.3.3 UDP的偽首部94 協(xié)議應(yīng)用114.1 UDP協(xié)議應(yīng)用114.2 UDP協(xié)議的幾個(gè)特性114.3 UDP技術(shù)優(yōu)
2、缺點(diǎn)125 協(xié)議實(shí)現(xiàn)145.1 編寫UDP Server程序145.1.1 編寫步驟145.1.2 程序內(nèi)容145.2 UDP Client程序155.2.1編寫UDP Client程序的步驟155.2.2 udpclient.c程序內(nèi)容:166結(jié)術(shù)語(yǔ)18參考文獻(xiàn)191 協(xié)議概述1.1 協(xié)議的簡(jiǎn)介UDP是User Datagram Protocol的簡(jiǎn)稱,中文名是用戶數(shù)據(jù)報(bào)協(xié)議,是OSI參考模型中一種無(wú)連接的傳輸層協(xié)議,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)。在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理UDP數(shù)據(jù)包。在OSI模型中,在第四層傳輸層,處于IP協(xié)議的上一層。UDP有不提供數(shù)據(jù)包分組、組裝和不能
3、對(duì)數(shù)據(jù)包進(jìn)行排序的缺點(diǎn),也就是說(shuō),當(dāng)報(bào)文發(fā)送之后,是無(wú)法得知其是否安全完整到達(dá)的。與所熟知的TCP(傳輸控制協(xié)議)協(xié)議一樣,UDP協(xié)議直接位于IP(網(wǎng)際協(xié)議)協(xié)議的頂層。根據(jù)OSI(開(kāi)放系統(tǒng)互連)參考模型,UDP和TCP都屬于傳輸層協(xié)議。 圖1-1 UDP1.2 協(xié)議的作用為了在給定的主機(jī)上能識(shí)別多個(gè)目的地址,同時(shí)允許多個(gè)應(yīng)用程序在同一臺(tái)主機(jī)上工作并能獨(dú)立地進(jìn)行數(shù)據(jù)報(bào)的發(fā)送和接收,設(shè)計(jì)用戶數(shù)據(jù)報(bào)協(xié)議UDP。UDP提供了應(yīng)用程序之間傳輸數(shù)據(jù)的基本機(jī)制。它能夠基于端口號(hào)區(qū)分在一臺(tái)機(jī)器上運(yùn)行的多個(gè)程序。在傳遞每個(gè)UDP報(bào)文時(shí),該報(bào)文除了攜帶用戶數(shù)據(jù)外,還攜帶目的端口號(hào)和源端口號(hào),這使得目的機(jī)器上的U
4、DP軟件能夠?qū)?bào)文交給正確的接收進(jìn)程,而接受進(jìn)程也能正確地返回應(yīng)答報(bào)文。UDP協(xié)議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)包的形式。一個(gè)典型的數(shù)據(jù)包就是一個(gè)二進(jìn)制數(shù)據(jù)的傳輸單位。每一個(gè)數(shù)據(jù)包的前8個(gè)字節(jié)用來(lái)包含報(bào)頭信息,剩余字節(jié)則用來(lái)包含具體的傳輸數(shù)據(jù)。UDP用來(lái)支持那些需要在計(jì)算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。包括網(wǎng)絡(luò)視頻會(huì)議系統(tǒng)在內(nèi)的眾多的客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用UDP協(xié)議。它主要用于不要求分組順序到達(dá)的傳輸中,分組傳輸順序的檢查與排序由應(yīng)用層完成,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)。UDP 協(xié)議基本上是IP協(xié)議與上層協(xié)議的接口。UDP協(xié)議適用端口分別運(yùn)行在同一臺(tái)設(shè)備上的多個(gè)應(yīng)用程序。
5、UDP只提供數(shù)據(jù)的不可靠交付,它一旦把應(yīng)用程序發(fā)給網(wǎng)絡(luò)層的數(shù)據(jù)發(fā)送出去,就不保留數(shù)據(jù)備份(所以UDP有時(shí)候也被認(rèn)為是不可靠的數(shù)據(jù)報(bào)協(xié)議)。UDP在IP數(shù)據(jù)報(bào)的頭部?jī)H僅加入了復(fù)用和數(shù)據(jù)校驗(yàn)(字段)。UDP使用底層的互聯(lián)網(wǎng)協(xié)議來(lái)傳送報(bào)文,同IP一樣提供不可靠的無(wú)連接數(shù)據(jù)報(bào)傳輸服務(wù)。它不提供報(bào)文到達(dá)確認(rèn)、排序、及流量控制等功能。因此,UDP報(bào)文可能會(huì)出現(xiàn)丟失、延遲或亂序到達(dá)的現(xiàn)象。而且,報(bào)文到達(dá)的速率可能會(huì)大于接收進(jìn)程能夠處理的速率。使用UDP的應(yīng)用程序可根據(jù)自己的需求設(shè)計(jì)相應(yīng)的可靠性機(jī)制。例如,作為文件傳輸協(xié)議之一的簡(jiǎn)單文件傳輸協(xié)議就在應(yīng)用層做這方面的工作。1.3 協(xié)議的發(fā)展歷程 UDP協(xié)議從問(wèn)世
6、至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天,UDP仍然不失為一項(xiàng)非常實(shí)用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。在選擇使用協(xié)議的時(shí)候,選擇UDP必須要謹(jǐn)慎。在網(wǎng)絡(luò)質(zhì)量令人不十分滿意的環(huán)境下,UDP協(xié)議數(shù)據(jù)包丟失會(huì)比較嚴(yán)重。但是由于UDP的特性:它不屬于連接型協(xié)議,因而具有資源消耗小,處理速度快的優(yōu)點(diǎn),所以通常音頻、視頻和普通數(shù)據(jù)在傳送時(shí)使用UDP較多,因?yàn)樗鼈兗词古紶杹G失一兩個(gè)數(shù)據(jù)包,也不會(huì)對(duì)接收結(jié)果產(chǎn)生太大影響。比如我們聊天用的ICQ和QQ就是使用的UDP協(xié)議。2 協(xié)議工作原理及流程 由于大多數(shù)網(wǎng)絡(luò)應(yīng)用程序都在同一臺(tái)機(jī)器上運(yùn)行,計(jì)算機(jī)上必須能夠確保目的地機(jī)器上的軟件程
7、序能從源地址機(jī)器處獲得數(shù)據(jù)包,以及源計(jì)算機(jī)能收到正確的回復(fù)。這是通過(guò)使用UDP的“端口號(hào)”完成的。例如,如果一個(gè)工作站希望在工作站上使用域名服務(wù)系統(tǒng),它就會(huì)給數(shù)據(jù)包一個(gè)目的地址,并在 UDP 頭插入目標(biāo)端口號(hào)53。源端口號(hào)標(biāo)識(shí)了請(qǐng)求域名服務(wù)的本地機(jī)的應(yīng)用程序,同時(shí)需要將所有由目的站生成的響應(yīng)包都指定到源主機(jī)的這個(gè)端口上。 與TCP不同,UDP并不提供對(duì)IP協(xié)議的可靠機(jī)制、流控制以及錯(cuò)誤恢復(fù)功能等。由于UDP比較簡(jiǎn)單,UDP頭包含很少的字節(jié),比TCP負(fù)載消耗少。UDP只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去,但是并不能保證它們能到達(dá)目的地。由于UDP在
8、傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,且沒(méi)有超時(shí)重發(fā)等機(jī)制,故而傳輸速度很快。 協(xié)議各層的軟件都要對(duì)相鄰層的多個(gè)對(duì)象進(jìn)行多路復(fù)用和多路分解操作。UDP軟件接收多個(gè)應(yīng)用程序送來(lái)的數(shù)據(jù)報(bào),把它們送給IP層進(jìn)行傳輸,同時(shí)它接收從IP層送來(lái)的UDP數(shù)據(jù)報(bào),并把它們送給適當(dāng)?shù)膽?yīng)用程序。UDP軟件與應(yīng)用程序之間所有的多路復(fù)用和多路分解都要通過(guò)端口機(jī)制來(lái)實(shí)現(xiàn)。實(shí)際上,每個(gè)應(yīng)用程序在發(fā)送數(shù)據(jù)報(bào)之前必須與操作系統(tǒng)進(jìn)行協(xié)商,以獲得協(xié)議端口和相應(yīng)的端口號(hào)。當(dāng)指定了端口之后,凡是利用這個(gè)端口發(fā)送數(shù)據(jù)報(bào)的應(yīng)用程序都要把端口號(hào)放入U(xiǎn)DP報(bào)文的源端口字段中。在處理輸入時(shí),UDP從IP層軟件接收了傳入的數(shù)據(jù)報(bào),根據(jù)
9、UDP的目的端口號(hào)進(jìn)行多路分解操作,如下圖。理解UDP端的最簡(jiǎn)單的方式是把它看成是一個(gè)隊(duì)列。在大多數(shù)實(shí)現(xiàn)中,當(dāng)應(yīng)用程序與操作系統(tǒng)協(xié)商,試圖使用某個(gè)給定端口時(shí),操作系統(tǒng)就創(chuàng)建一個(gè)內(nèi)部隊(duì)列來(lái)容納收到的報(bào)文。通常應(yīng)用程序可以指定和修改這個(gè)隊(duì)列的長(zhǎng)度。當(dāng)UDP收到數(shù)據(jù)報(bào)時(shí),先檢查當(dāng)前使用的端口是否就是該數(shù)據(jù)報(bào)的目的端口。如果不能匹配,則發(fā)送一個(gè)ICMP端口不可達(dá)報(bào)文并丟棄這個(gè)數(shù)據(jù)報(bào)。如果匹配,它就把這個(gè)數(shù)據(jù)報(bào)送到相應(yīng)的隊(duì)列中,等待應(yīng)用程序的訪問(wèn)。當(dāng)然,如果端口已滿也會(huì)出錯(cuò),UDP也要丟棄傳入的這個(gè)數(shù)據(jù)報(bào)。圖2-1 UDP端口的多路分解3 協(xié)議格式分析3.1 UDP報(bào)文封裝 在交給IP層之前,UDP給用
10、戶要發(fā)送的數(shù)據(jù)加上一個(gè)首部。IP層又給從UDP接收到的數(shù)據(jù)報(bào)加上一個(gè)首部。最后,網(wǎng)絡(luò)接口層把數(shù)據(jù)報(bào)封裝到一個(gè)幀里,最后轉(zhuǎn)化為比特流在網(wǎng)絡(luò)中投遞。封裝UDP報(bào)文的IP數(shù)據(jù)報(bào)首部協(xié)議字段應(yīng)設(shè)置為17,如圖3-1所示。幀的結(jié)構(gòu)根據(jù)底層的網(wǎng)絡(luò)技術(shù)來(lái)確定。通常網(wǎng)絡(luò)幀結(jié)構(gòu)包括一個(gè)附加的首部。在接收端,最底層的網(wǎng)絡(luò)軟件接收到一個(gè)分組后把它提交給上一層模塊。每一層都在向上送交數(shù)據(jù)之前剝?nèi)ケ緦拥氖撞?,因此?dāng)最高層的協(xié)議軟件把數(shù)據(jù)送到相應(yīng)的接收進(jìn)程的時(shí)候,所有附加的首部都被剝?nèi)チ?。也就是說(shuō),最外層的首部對(duì)應(yīng)的是最底層的協(xié)議,而最內(nèi)層的首部對(duì)應(yīng)的是最高層的協(xié)議。研究首部的生成與剝除時(shí),可從協(xié)議的分層原則得到啟發(fā)。當(dāng)
11、把分層原則具體的應(yīng)用于UDP協(xié)議時(shí),可以清楚地知道目的機(jī)上的由IP層送交UDP層的數(shù)據(jù)報(bào)就等同于發(fā)送機(jī)上的UDP層交給IP層的數(shù)據(jù)報(bào)。同樣,接收方的UDP層上交給用戶進(jìn)程的數(shù)掘也就是發(fā)送方的用戶進(jìn)程送到UDP層的數(shù)據(jù)。在多層協(xié)議之間,職責(zé)的劃分是清楚而明確的,IP層只負(fù)責(zé)在互聯(lián)網(wǎng)上的一對(duì)主機(jī)之間進(jìn)行數(shù)據(jù)傳輸,而UDP層只負(fù)責(zé)區(qū)分一臺(tái)主機(jī)上的多個(gè)源端口或目的端口。圖3-1 UDP報(bào)文的封裝3.2 UDP報(bào)文的抓取步驟抓取百度主頁(yè)的UDP報(bào)文。1、 主機(jī)打開(kāi)EtherPeek NX工具,點(diǎn)擊過(guò)濾條件(udp),新建抓包窗口,開(kāi)始捕獲;2、 主機(jī)打開(kāi)瀏覽器,進(jìn)入百度搜索欄首頁(yè);圖3-2 百度搜索欄主
12、頁(yè)3、 EtherPeek NX工具窗口停止捕獲,進(jìn)行分析捕獲到的UDP報(bào)文。圖3-3 UDP請(qǐng)求報(bào)文圖3-4 UDP應(yīng)答報(bào)文 本次實(shí)驗(yàn)驗(yàn)證了UDP協(xié)議的工作過(guò)程,從理論上講,IP數(shù)據(jù)報(bào)的最大程度是65535字節(jié),除去20字節(jié)的IP首部和 8字節(jié)的UDP首部,UDP數(shù)據(jù)報(bào)中用戶數(shù)據(jù)的最大長(zhǎng)度應(yīng)為65507字節(jié),但大多數(shù)實(shí)現(xiàn)所提供的長(zhǎng)度比這個(gè)最大值小。例如,在SunOS 4.1.3下使用回送接口的最大IP數(shù)據(jù)報(bào)長(zhǎng)度是32767字節(jié),所能接收的最大UDP報(bào)文長(zhǎng)度為32747字節(jié)。但在Solaris2.2下使用回送接口,最大可收發(fā)的IP數(shù)據(jù)報(bào)長(zhǎng)度是65535字節(jié),相應(yīng)的最大UDP報(bào)文長(zhǎng)度為65515
13、。顯然,這種限制與具體操作系統(tǒng)的協(xié)議模塊市縣有關(guān)。3.3 UDP報(bào)文格式的分析3.3.1 報(bào)文格式 UDP報(bào)文又稱為用戶數(shù)據(jù)報(bào),它分為首部和數(shù)據(jù)區(qū)兩部分。其中“源端口”和“目的端口”包含了16比特的UDP端口號(hào),用于在各個(gè)等待接收?qǐng)?bào)文的應(yīng)用之間對(duì)數(shù)據(jù)報(bào)進(jìn)行多路分解操作。其中“源端口”字段可選,若選用,則指定了應(yīng)答報(bào)文應(yīng)該發(fā)往的目的端口;若不選用,值為0。 “報(bào)文長(zhǎng)度”字段指明以字節(jié)為單位的UDP首部和UDP數(shù)據(jù)的長(zhǎng)度,最小值為8,即UDP首部的長(zhǎng)度。UDP報(bào)文首部的“校驗(yàn)和”字段是可選的。如果該字段值為0,說(shuō)明未進(jìn)行校驗(yàn)。設(shè)計(jì)者把這個(gè)字段作為可選項(xiàng)的目的,是為了盡量減少在可靠性很好的局域網(wǎng)上使
14、用UDP的程序開(kāi)銷。但I(xiàn)P對(duì)數(shù)據(jù)報(bào)中的數(shù)據(jù)部分并不計(jì)算校驗(yàn)和,所以UDP的校驗(yàn)和字段提供了唯一保證UDP報(bào)文無(wú)差錯(cuò)的途徑。3.3.2 UDP信息包 UDP信息包由UDP標(biāo)題和數(shù)據(jù)組成。UDP的標(biāo)題結(jié)構(gòu)如圖3-5所示,它由5個(gè)域組成:源端端口(SourcePort)、目的地端口(DestinationPort)、用戶數(shù)據(jù)包的長(zhǎng)度(Length)和檢查和(Checksum)。其中,前4個(gè)域組成UDP標(biāo)題(UDPheader),每個(gè)域由4個(gè)字節(jié)組成;檢查和域占據(jù)2個(gè)字節(jié),它用來(lái)檢測(cè)傳輸過(guò)程中是否出現(xiàn)了錯(cuò)誤;用戶數(shù)據(jù)包的長(zhǎng)度包括所有5個(gè)域的字節(jié)數(shù)。 圖3-5 UDP的標(biāo)題結(jié)構(gòu) 以下是對(duì)使用檢查和檢測(cè)錯(cuò)
15、誤的舉例說(shuō)明。假設(shè)從源端A要發(fā)送下列3個(gè)16位的二進(jìn)制數(shù):word1,word2和word3到終端B,檢查和計(jì)算如下。圖3-6 UDP的檢查計(jì)算從發(fā)送端發(fā)出的4個(gè)16位二進(jìn)制數(shù)之和為1111111111111111,如果接收端收到的這4個(gè)16位二進(jìn)制數(shù)之和也是全“1”,就認(rèn)為傳輸過(guò)程中沒(méi)有出差錯(cuò)。許多鏈路層協(xié)議都提供錯(cuò)誤檢查,包括流行的以太網(wǎng)協(xié)議。由于鏈路層以下的協(xié)議在源端和終端之間的某些通道可能不提供錯(cuò)誤檢測(cè),UDP雖然提供有錯(cuò)誤檢測(cè),但檢測(cè)到錯(cuò)誤時(shí),UDP不做錯(cuò)誤校正,只是簡(jiǎn)單地把損壞的消息段扔掉,或者給應(yīng)用程序提供警告信息,所以UDP也要提供檢查和。 3.3.3 UDP的偽首部 UDP校
16、驗(yàn)和覆蓋的內(nèi)容超出了UDP數(shù)據(jù)報(bào)本身的范圍。為了計(jì)算校驗(yàn)和,UDP把偽首部引入數(shù)據(jù)報(bào)中,在偽首部中有一個(gè)值為0的填充八位組用于保證整個(gè)數(shù)據(jù)報(bào)的長(zhǎng)度為16比特的整數(shù)倍,這樣才好計(jì)算校驗(yàn)和。填充八位組和偽首部并不隨著UDP數(shù)據(jù)報(bào)一起傳輸,也不計(jì)算在數(shù)據(jù)報(bào)長(zhǎng)度之內(nèi)。為了計(jì)算校驗(yàn)和,要先把校驗(yàn)和字段置為0,然后對(duì)整個(gè)對(duì)象,包括偽首部、UDP的首部和用戶數(shù)據(jù)報(bào),計(jì)算一個(gè)16比特的二進(jìn)制反碼和。使用偽首部的目的是檢驗(yàn)UDP數(shù)據(jù)報(bào)已到達(dá)正確的目的地。正確的目的地包括了特定的主機(jī)和機(jī)器上特定的協(xié)議端口。UDP報(bào)文的首部?jī)H僅指定了使用的協(xié)議端口號(hào)。因此為了確保數(shù)據(jù)報(bào)能夠正確到達(dá)目的地,發(fā)送UDP數(shù)據(jù)報(bào)的機(jī)器在計(jì)
17、算校驗(yàn)和時(shí)把目的機(jī)的IP地址和應(yīng)有的數(shù)據(jù)都包括在內(nèi)。在最終的接收端,UDP協(xié)議軟件對(duì)校驗(yàn)和進(jìn)行檢驗(yàn)時(shí)要用到攜帶UDP報(bào)文的IP數(shù)據(jù)報(bào)首部中的lP地址。如果校驗(yàn)和正確,說(shuō)明UDP數(shù)據(jù)報(bào)到達(dá)了正確主機(jī)的正確端口。在UDP校驗(yàn)和的計(jì)算過(guò)程中用到的偽首部長(zhǎng)度為12個(gè)八位組,其結(jié)構(gòu)如下圖所示。 圖3-7 UDP的偽首部偽首部的源IP地址字段和目的IP地址字段記錄了發(fā)送UDP報(bào)文時(shí)使用的源IP地址和目的IP地址。協(xié)議字段指明了所使用的協(xié)議類型代碼(UDP是17),而長(zhǎng)度字段是UDP數(shù)據(jù)報(bào)的長(zhǎng)度。接收方進(jìn)行正確性驗(yàn)證的時(shí)候,必須要把這些字段的信息從IP報(bào)文的首部中抽取出來(lái),以偽首部的格式進(jìn)行裝配,然后再重新
18、計(jì)算校驗(yàn)和。 4 協(xié)議應(yīng)用4.1 UDP協(xié)議應(yīng)用UDP是一種不可靠的網(wǎng)絡(luò)協(xié)議,但是在有些情況下UDP協(xié)議可能會(huì)變得非常有用。因?yàn)閁DP具有TCP所望塵莫及的速度優(yōu)勢(shì)。雖然TCP協(xié)議中植入了各種安全保障功能,但是在實(shí)際執(zhí)行的過(guò)程中會(huì)占用大量的系統(tǒng)開(kāi)銷,無(wú)疑使速度受到嚴(yán)重的影響。反觀UDP由于排除了信息可靠傳遞機(jī)制,將安全和排序等功能移交給上層應(yīng)用來(lái)完成,極大降低了執(zhí)行時(shí)間,使速度得到了保證。關(guān)于UDP協(xié)議的最早規(guī)范是RFC768,1980年發(fā)布。盡管時(shí)間已經(jīng)很長(zhǎng),但是UDP協(xié)議仍然繼續(xù)在主流應(yīng)用中發(fā)揮著作用。包括視頻電話會(huì)議系統(tǒng)在內(nèi)的許多應(yīng)用都證明了UDP協(xié)議的存在價(jià)值。因?yàn)橄鄬?duì)于可靠性來(lái)說(shuō),這
19、些應(yīng)用更加注重實(shí)際性能,所以為了獲得更好的使用效果(例如,更高的畫面幀刷新速率)往往可以犧牲一定的可靠性(例如,會(huì)面質(zhì)量)。根據(jù)不同的環(huán)境和特點(diǎn),兩種傳輸協(xié)議都將在今后的網(wǎng)絡(luò)世界中發(fā)揮更加重要的作用。4.2 UDP協(xié)議的幾個(gè)特性 (1)UDP是一個(gè)無(wú)連接協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當(dāng)它想傳送時(shí)就簡(jiǎn)單地去抓取來(lái)自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度、計(jì)算機(jī)的能力和傳輸帶寬的限制;在接收端,UDP把每個(gè)消息段放在隊(duì)列中,應(yīng)用程序每次從隊(duì)列中讀一個(gè)消息段。 (2)由于傳輸數(shù)據(jù)不建立連接,因此也就不需要維護(hù)連接狀態(tài),包括收
20、發(fā)狀態(tài)等,因此一臺(tái)服務(wù)機(jī)可同時(shí)向多個(gè)客戶機(jī)傳輸相同的消息。 (3)UDP信息包的標(biāo)題很短,只有8個(gè)字節(jié),相對(duì)于TCP的20個(gè)字節(jié)信息包的額外開(kāi)銷很小。 (4)吞吐量不受擁擠控制算法的調(diào)節(jié),只受應(yīng)用軟件生成數(shù)據(jù)的速率、傳輸帶寬、源端和終端主機(jī)性能的限制。 (5)UDP使用盡最大努力交付,即不保證可靠交付,因此主機(jī)不需要維持復(fù)雜的鏈接狀態(tài)表。 (6)UDP是面向報(bào)文的。發(fā)送方的UDP對(duì)應(yīng)用程序交下來(lái)的報(bào)文,在添加首部后就向下交付給IP層。既不拆分,也不合并,而是保留這些報(bào)文的邊界,因此,應(yīng)用程序需要選擇合適的報(bào)文大小。 雖然UDP是一個(gè)不可靠的協(xié)議,但它是分發(fā)信息的一個(gè)理想?yún)f(xié)議。例如,在屏幕上報(bào)告
21、股票市場(chǎng)、在屏幕上顯示航空信息等等。UDP也用在路由信息協(xié)議RIP(Routing Information Protocol)中修改路由表。在這些應(yīng)用場(chǎng)合下,如果有一個(gè)消息丟失,在幾秒之后另一個(gè)新的消息就會(huì)替換它。UDP廣泛用在多媒體應(yīng)用中,例如,Progressive Networks公司開(kāi)發(fā)的RealAudio軟件,它是在因特網(wǎng)上把預(yù)先錄制的或者現(xiàn)場(chǎng)音樂(lè)實(shí)時(shí)傳送給客戶機(jī)的一種軟件,該軟件使用的RealAudio audio-on-demand protocol協(xié)議就是運(yùn)行在UDP之上的協(xié)議,大多數(shù)因特網(wǎng)電話軟件產(chǎn)品也都運(yùn)行在UDP之上。我們經(jīng)常使用“ping”命令來(lái)測(cè)試兩臺(tái)主機(jī)之間TCP/
22、IP通信是否正常,其實(shí)“ping”命令的原理就是向?qū)Ψ街鳈C(jī)發(fā)送UDP數(shù)據(jù)包,然后對(duì)方主機(jī)確認(rèn)收到數(shù)據(jù)包,如果數(shù)據(jù)包是否到達(dá)的消息及時(shí)反饋回來(lái),那么網(wǎng)絡(luò)就是通的。4.3 UDP技術(shù)優(yōu)缺點(diǎn) 互聯(lián)網(wǎng)通信協(xié)議分為TCP和UDP兩種. UDP和TCP協(xié)議的主要區(qū)別是兩者在如何實(shí)現(xiàn)信息的可靠傳遞方面不同。TCP協(xié)議中包含了專門的傳遞保證機(jī)制,當(dāng)數(shù)據(jù)接收方收到發(fā)送方傳來(lái)的信息時(shí),會(huì)自動(dòng)向發(fā)送方發(fā)出確認(rèn)消息;發(fā)送方只有在接收到該確認(rèn)消息之后才繼續(xù)傳送其它信息,否則將一直等待直到收到確認(rèn)信息為止。 與TCP不同,UDP協(xié)議并不提供數(shù)據(jù)傳送的保證機(jī)制。如果在從發(fā)送方到接收方的傳遞過(guò)程中出現(xiàn)數(shù)據(jù)報(bào)的丟失,協(xié)議本身并
23、不能做出任何檢測(cè)或提示。因此,通常人們把UDP協(xié)議稱為不可靠的傳輸協(xié)議。 相對(duì)于TCP協(xié)議,UDP協(xié)議的另外一個(gè)不同之處在于如何接收突法性的多個(gè)數(shù)據(jù)報(bào)。不同于TCP,UDP并不能確保數(shù)據(jù)的發(fā)送和接收順序。例如,一個(gè)位于客戶端的應(yīng)用程序向服務(wù)器發(fā)出了以下4個(gè)數(shù)據(jù)報(bào) D1 D22 D333 D4444 但是UDP有可能按照以下順序?qū)⑺邮盏臄?shù)據(jù)提交到服務(wù)端的應(yīng)用: D333 D1 D4444 D22 事實(shí)上,UDP協(xié)議的這種亂序性基本上很少出現(xiàn),通常只會(huì)在網(wǎng)絡(luò)非常擁擠的情況下才有可能發(fā)生。TCP是面向連接的,有比較高的可靠性,一些要求比較高的服務(wù)一般使用這個(gè)協(xié)議,如、SMTP、HTTP、POP3等
24、,而UDP是面向無(wú)連接的,使用這個(gè)協(xié)議的常見(jiàn)服務(wù)有DNS、SNMP、QQ等。 5 協(xié)議實(shí)現(xiàn)5.1 編寫UDP Server程序5.1.1 編寫步驟(1)使用socket()來(lái)建立一個(gè)UDP socket,第二個(gè)參數(shù)為SOCK_DGRAM。(2)初始化sockaddr_in結(jié)構(gòu)的變量,并賦值。sockaddr_in結(jié)構(gòu)定義:struct sockaddr_in uint8_t sin_len ;sa_family_t sin_family;in_port_t sin_port ;structin_addrsin_addr;char sin_zero8;這里使用“8888”作為服務(wù)程序的端口,使用
25、“INADDR_ANY”作為綁定的IP地址即任何主機(jī)上的地址。(3)使用bind()把上面的socket和定義的IP地址和端口綁定。這里檢查bind()是否執(zhí)行成功,如果有錯(cuò)誤就退出。這樣可以防止服務(wù)程序重復(fù)運(yùn)行的問(wèn)題。(4)進(jìn)入無(wú)限循環(huán)程序,使用recvfrom()進(jìn)入等待狀態(tài),直到接收到客戶程序發(fā)送的數(shù)據(jù),就處理收到的數(shù)據(jù),并向客戶程序發(fā)送反饋。這里是直接把收到的數(shù)據(jù)發(fā)回給客戶程序。5.1.2 程序內(nèi)容#define MAXLINE 80#define SERV_PORT 8888void do_echo(int sockfd,struct sockaddr *pcliaddr,sockl
26、en_t clilen)int n;socklen_t len;char mesgMAXLINE;for(;)len = clilen;/* waiting for receive data */n = recvfrom(sockfd,mesg,MAXLINE,0,pcliaddr,&len);/* sent data back to client */sendto(sockfd,mesg,n,0,pcliaddr,len);int main(void)int sockfd;struct sockaddr_in servaddr,cliaddr;sockfd = socket(AF_I
27、NET,SOCK_DGRAM,0); /* create a socket */* init servaddr */bzero(&servaddr,sizeof(servaddr);servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(SERV_PORT);/* bind address and port to socket */if(bind(sockfd,(struct sockaddr *)&servaddr,sizeof(s
28、ervaddr) = -1)perror("bind error");exit(1);do_echo(sockfd,(struct sockaddr *)&cliaddr,sizeof(cliaddr);return 0;5.2 UDP Client程序5.2.1編寫UDP Client程序的步驟(1)初始化sockaddr_in結(jié)構(gòu)的變量,并賦值。這里使用“8888”作為連接的服務(wù)程序的端口,從命令行參數(shù)讀取IP地址,并且判斷IP地址是否符合要求。(2)使用socket()來(lái)建立一個(gè)UDP socket,第二個(gè)參數(shù)為SOCK_DGRAM。(3)使用connect(
29、)來(lái)建立與服務(wù)程序的連接。與TCP協(xié)議不同,UDP的connect()并沒(méi)有與服務(wù)程序三次握手。上面說(shuō)了UDP是非連接的,實(shí)際上也可以是連接的。使用連接的UDP,kernel可以直接返回錯(cuò)誤信息給用戶程序,從而避免由于沒(méi)有接收到數(shù)據(jù)而導(dǎo)致調(diào)用recvfrom()一直等待下去,看上去好像客戶程序沒(méi)有反應(yīng)一樣。(4)向服務(wù)程序發(fā)送數(shù)據(jù),因?yàn)槭褂眠B接的UDP,所以使用write()來(lái)替代sendto()。這里的數(shù)據(jù)直接從標(biāo)準(zhǔn)輸入讀取用戶輸入。(5)接收服務(wù)程序發(fā)回的數(shù)據(jù),同樣使用read()來(lái)替代recvfrom()。(6)處理接收到的數(shù)據(jù),這里是直接輸出到標(biāo)準(zhǔn)輸出上。5.2.2 udpclient
30、.c程序內(nèi)容:#define MAXLINE 80 #define SERV_PORT 8888 void do_cli(FILE *fp, int sockfd, struct sockaddr *pservaddr,socklen_t servlen) int n; char sendlineMAXLINE, recvlineMAXLINE + 1; /* connect to server */ if(connect(sockfd, (struct sockaddr *)pservaddr, servlen)= -1) perror("connect error");
31、 exit(1); while(fgets(sendline, MAXLINE, fp)!= NULL) /* read a line and send to server */write(sockfd, sendline, strlen(sendline); /* receive data from server */ n = read(sockfd, recvline, MAXLINE); if(n = -1) perror("read error"); exit(1); recvlinen = 0; /* terminate string */ fputs(recvline, stdout); int main(int argc, char *argv) int sockfd; struct sockaddr
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度鈑金展柜研發(fā)與市場(chǎng)推廣合作合同2篇
- 二零二五年度高品質(zhì)實(shí)木地板全球購(gòu)銷合同范本3篇
- 二零二五年掘進(jìn)機(jī)操作人員安全教育與培訓(xùn)合同3篇
- 二零二五版房地產(chǎn)股權(quán)托管及資產(chǎn)增值管理合同3篇
- 二零二五年度高級(jí)別墅房產(chǎn)出售合同3篇
- 2025年高性能材料采購(gòu)與合作研發(fā)合同3篇
- 二零二五版健身俱樂(lè)部健身教練就業(yè)保障與福利合同3篇
- 2024新勞動(dòng)法對(duì)人力資源績(jī)效評(píng)估與反饋合同3篇
- 專業(yè)化生產(chǎn)流程服務(wù)協(xié)議2024版版B版
- 2024版公共廁所管理承包合同3篇
- 2022-2024北京初三二模英語(yǔ)匯編:話題作文
- 《阻燃材料與技術(shù)》-顏龍 習(xí)題解答
- 人教版八年級(jí)英語(yǔ)上冊(cè)Unit1-10完形填空閱讀理解專項(xiàng)訓(xùn)練
- 2024年湖北省武漢市中考英語(yǔ)真題(含解析)
- GB/T 44561-2024石油天然氣工業(yè)常規(guī)陸上接收站液化天然氣裝卸臂的設(shè)計(jì)與測(cè)試
- 《城市綠地設(shè)計(jì)規(guī)范》2016-20210810154931
- 網(wǎng)球場(chǎng)經(jīng)營(yíng)方案
- 2024年公司保密工作制度(四篇)
- 重慶市康德卷2025屆高一數(shù)學(xué)第一學(xué)期期末聯(lián)考試題含解析
- 建筑結(jié)構(gòu)課程設(shè)計(jì)成果
- 雙梁橋式起重機(jī)小車改造方案
評(píng)論
0/150
提交評(píng)論