《TCPIP協(xié)議分析》課程設(shè)計(jì)_第1頁
《TCPIP協(xié)議分析》課程設(shè)計(jì)_第2頁
《TCPIP協(xié)議分析》課程設(shè)計(jì)_第3頁
《TCPIP協(xié)議分析》課程設(shè)計(jì)_第4頁
《TCPIP協(xié)議分析》課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

成績:《TCP/IP協(xié)議分析》課程設(shè)計(jì)題目:UD的、議分析院(系):軟件學(xué)院專業(yè)班級(jí):2010軟件工程(5455)一班姓名:888888學(xué)號(hào):121324435任課教師:878678666767672013年6月24日目錄1協(xié)議概述 錯(cuò)誤!未指定書簽協(xié)議的簡介 錯(cuò)誤!未指定書簽協(xié)議的作用 錯(cuò)誤!未指定書簽協(xié)議的發(fā)展歷程 錯(cuò)誤!未指定書簽UDP報(bào)文封裝 錯(cuò)誤!未指定書簽UDP報(bào)文的抓取步驟 錯(cuò)誤!未指定書簽UDP報(bào)文格式的分析 錯(cuò)誤!未指定書簽報(bào)文格式 錯(cuò)誤!未指定書簽UDP信息包 錯(cuò)誤!未指定書簽UDP的偽首部 錯(cuò)誤!未指定書簽4協(xié)議應(yīng)用 錯(cuò)誤!未指定書簽UDP協(xié)議應(yīng)用 錯(cuò)誤!未指定書簽UDP協(xié)議的幾個(gè)特性 錯(cuò)誤!未指定書簽UDP技術(shù)優(yōu)缺點(diǎn) 錯(cuò)誤!未指定書簽5協(xié)議實(shí)現(xiàn) 錯(cuò)誤!未指定書簽編寫UDPServer程序 錯(cuò)誤!未指定書簽編寫步驟 錯(cuò)誤!未指定書簽程序內(nèi)容 錯(cuò)誤!未指定書簽UDPClient程序 錯(cuò)誤!未指定書簽編寫UDPClient程序的步驟..錯(cuò)誤!未指定書簽udpclient.c程序內(nèi)容: 錯(cuò)誤!未指定書簽6結(jié)術(shù)語 錯(cuò)誤!未指定書簽參考文獻(xiàn) 錯(cuò)誤!未指定書簽1協(xié)議概述協(xié)議的簡介UDP是UserDatagramProtocol的簡稱,中文名是用戶數(shù)據(jù)報(bào)協(xié)議,是OSI參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理UDP數(shù)據(jù)包。在OSI模型中,在第四層一一傳輸層,處于IP協(xié)議的上一層。UDP有不提供數(shù)據(jù)包分組、組裝和不能對(duì)數(shù)據(jù)包進(jìn)行排序的缺點(diǎn),也就是說,當(dāng)報(bào)文發(fā)送之后,是無法得知其是否安全完整到達(dá)的。與所熟知的TCP(傳輸控制協(xié)議)協(xié)議一樣,UDP協(xié)議直接位于IP(網(wǎng)際協(xié)議)協(xié)議的頂層。根據(jù)OSI(開放系統(tǒng)互連)參考模型,UDP和TCP都屬于傳輸層協(xié)議。圖1-1UDP圖1-1UDP協(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é)議 UDPoUDP提供了應(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ī)器上的 UDP軟件能夠?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é)用來包含報(bào)頭信息,剩余字節(jié)則用來包含具體的傳輸數(shù)據(jù)。UDP用來支持那些需要在計(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ù)的簡單不可靠信息傳送服務(wù)。UDP協(xié)議基本上是IP協(xié)議與上層協(xié)議的接口。UDP協(xié)議適用端口分別運(yùn)行在同一臺(tái)設(shè)備上的多個(gè)應(yīng)用程序。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)的頭部僅僅加入了復(fù)用和數(shù)據(jù)校驗(yàn)(字段)。UDP使用底層的互聯(lián)網(wǎng)協(xié)議來傳送報(bào)文,同IP一樣提供不可靠的無連接數(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é)議之一的簡單文件傳輸協(xié)議就在應(yīng)用層做這方面的工作。協(xié)議的發(fā)展歷程UDP協(xié)議從問世至今已經(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ī)器上的軟件程序能從源地址機(jī)器處獲得數(shù)據(jù)包,以及源計(jì)算機(jī)能收到正確的回復(fù)。這是通過使用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比較簡單,UDP頭包含很少的字節(jié),比TCP負(fù)載消耗少。UDP只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,且沒有超時(shí)重發(fā)等機(jī)制,故而傳輸速度很快。協(xié)議各層的軟件都要對(duì)相鄰層的多個(gè)對(duì)象進(jìn)行多路復(fù)用和多路分解操作。UDP軟件接收多個(gè)應(yīng)用程序送來的數(shù)據(jù)報(bào),把它們送給IP層進(jìn)行傳輸,同時(shí)它接收從IP層送來的UDP數(shù)據(jù)報(bào),并把它們送給適當(dāng)?shù)膽?yīng)用程序。UDP軟件與應(yīng)用程序之間所有的多路復(fù)用和多路分解都要通過端口機(jī)制來實(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ù)UDP的目的端口號(hào)進(jìn)行多路分解操作,如下圖。理解UDP端的最簡單的方式是把它看成是一個(gè)隊(duì)列。在大多數(shù)實(shí)現(xiàn)中,當(dāng)應(yīng)用程序與操作系統(tǒng)協(xié)商,試圖使用某個(gè)給定端口時(shí),操作系統(tǒng)就創(chuàng)建一個(gè)內(nèi)部隊(duì)列來容納收到的報(bào)文。通常應(yīng)用程序可以指定和修改這個(gè)隊(duì)列的長度。當(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)用程序的訪問。當(dāng)然,如果端口已滿也會(huì)出錯(cuò), UDP也要丟棄傳入的這個(gè)數(shù)據(jù)報(bào)。

圖2-1UDP端口的多路分解3協(xié)議格式分析UDP報(bào)文封裝在交給IP層之前,UDP給用戶要發(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ù)來確定。通常網(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)チ?。也就是說,最外層的首部對(duì)應(yīng)的是最底層的協(xié)議,而最內(nèi)層的首部對(duì)應(yīng)的是最高層的協(xié)議。研究首部的生成與剝除時(shí),可從協(xié)議的分層原則得到啟發(fā)。當(dāng)把分層原則具體的應(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è)源端口或目的端口。UDP苜部幀苜部UDPUDP苜部幀苜部IP數(shù)據(jù)區(qū)幀的數(shù)據(jù)區(qū)圖3-1UDP報(bào)文的封裝UDP報(bào)文的抓取步驟抓取百度主頁的UDP報(bào)文。1、主機(jī)打開EtherPeekNX工具,點(diǎn)擊過濾條件(udp),新建抓包窗口,開始捕獲;2、主機(jī)打開瀏覽器,進(jìn)入百度搜索欄首頁;

新聞網(wǎng)頁貼吧知道宣天圖吐視頻地圖百科文座更恒》百度一下圖3-2新聞網(wǎng)頁貼吧知道宣天圖吐視頻地圖百科文座更恒》百度一下124Amp0JtUL£D191l.isa.7?lS4uretV?rtD<itln<tki}fflFortUMS3dosjiinLvnrthi:UDPChai=IkamiT"ENS-D^riMij.inHuaSw?E.AmPrfrt4i?l111rlltpMJit"”■,TlwTfl-LItwfh?Vt&CD-l.HumUbT1124Amp0JtUL£D191l.isa.7?lS4uretV?rtD<itln<tki}fflFortUMS3dosjiinLvnrthi:UDPChai=IkamiT"ENS-D^riMij.inHuaSw?E.AmPrfrt4i?l111rlltpMJit"”■,TlwTfl-LItwfh?Vt&CD-l.HumUbT1 ■uhS^urci*IFAddr?*iX0弋坤Mdr??v&04中/[手屋Ft+Eb1&7口44Hle7$巾&M石?力043M◎立(4力電0?!隽T3*D亡與A*中予3?1ib。工◎事 立一 it1…… {:?:,003%:7k口。31后電。IBEAZTEDD4$1g0。*0工口總DO£F30D-0E>0。-33744J口*63€9-€DfiTgjilf5£4750aE3..5,*.... . .xb.hA^g idu.e8MICgMMgMM CM.........圖3-3UDP請(qǐng)求報(bào)文&fMAamtQIf■-■L@TimT?3w由&fMAamtQIf■-■L@TimT?3w由Pr6CM41由ItaMtarQMdii-wmS4ur?!IPAddr?x3.2IIPMdT4?R-"JT"UDF-10■?>"Da.LiurBatwrc*PoiFt, titf4DMiatA.iUT.iAiiVuvt: U74smt注 UiimpOMebfriM 仃心OHIdiWi.E.1flfE*34n7FC9gtlCD04BlnQJlU3CC03gS000100"Ft?用E*34n7FC9gtlCD04BlnQJlU3CC03gS000100"Ft?用M時(shí)口tct09aaaomoihmeoai第igMMgM?C2QOIKJ:■?日TFC73網(wǎng)003B:3&D4FA郵S300731fr*ndA06ieAIM;->B京B事I"tflildrC亡。14圖3-4UDP應(yīng)答報(bào)文本次實(shí)驗(yàn)驗(yàn)證了UDP協(xié)議的工作過程,從理論上講,IP數(shù)據(jù)報(bào)的最大程度是65535字節(jié),除去20字節(jié)的IP首部和8字節(jié)的UDP首部,UDP數(shù)據(jù)報(bào)中用戶數(shù)據(jù)的最大長度應(yīng)為65507字節(jié),但大多數(shù)實(shí)現(xiàn)所提供的長度比這個(gè)最大值小。例如,在SunOS4.1.3下使用回送接口的最大IP數(shù)據(jù)報(bào)長度是32767字節(jié),所能接收的最大UDP報(bào)文長度為32747字節(jié)。但在Solaris2.2下使用回送接口,最大可收發(fā)的IP數(shù)據(jù)報(bào)長度是65535字節(jié),相應(yīng)的最大UDP報(bào)文長度為65515。顯然,這種限制與具體操作系統(tǒng)的協(xié)議模塊市縣有關(guān)。UDP報(bào)文格式的分析報(bào)文格式UDP報(bào)文又稱為用戶數(shù)據(jù)報(bào),它分為首部和數(shù)據(jù)區(qū)兩部分。其中“源端口”和“目的端口”包含海比特的UDP端口號(hào),用于在各個(gè)等待接收?qǐng)?bào)文的應(yīng)用之間對(duì)數(shù)據(jù)報(bào)進(jìn)行多路分解操作。其中“源端口”字段可選,若選用,則指定了應(yīng)答報(bào)文應(yīng)該發(fā)往的目的端口;若不選用,值為 0o“報(bào)文長度”字段指明以字節(jié)為單位的UDP首部和UDP數(shù)據(jù)的長度,最小值為8,即UDP首部的長度。UDP報(bào)文首部的“校驗(yàn)和”字段是可選的。如果該字段值為0,說明未進(jìn)行校驗(yàn)。設(shè)計(jì)者把這個(gè)字段作為可選項(xiàng)的目的,是為了盡量減少在可靠性很好的局域網(wǎng)上使用UDP的程序開銷。但I(xiàn)P對(duì)數(shù)據(jù)報(bào)中的數(shù)據(jù)部分并不計(jì)算校驗(yàn)和,所以UDP的校驗(yàn)和字段提供了唯一保證UDP報(bào)文無差錯(cuò)的途徑。UDP信息包UDP信息包由UDP標(biāo)題和數(shù)據(jù)組成。UDP的標(biāo)題結(jié)構(gòu)如圖3-5所示,它由5個(gè)域組成:源端端口(SourcePort)、目的地端口(DestinationPort)、用戶數(shù)據(jù)包的長度(Length)和檢查和(Checksum)。其中,前4個(gè)域組成UDP標(biāo)題(UDPheader),每個(gè)域由4個(gè)字節(jié)組成;檢查和域占據(jù)2個(gè)字節(jié),它用來檢測(cè)傳輸過程中是否出現(xiàn)了錯(cuò)誤;用戶數(shù)據(jù)包的長度包括所有5個(gè)域的字節(jié)數(shù)。32位1511623:2431圖3-5UDP1511623:2431圖3-5UDP的標(biāo)題結(jié)構(gòu)以下是對(duì)使用檢查和檢測(cè)錯(cuò)誤的舉例說明。假設(shè)從源端 A要發(fā)送下列3個(gè)16位的二進(jìn)制數(shù):wordl,word2和word3到終端B,檢查和計(jì)算如下。

0110011001100110010101010101010100001111000011111100101011001010001101010011010101100110011001100101010101010101000011110000111111001010110010100011010100110101圖3-6UDP的檢查計(jì)算從發(fā)送端發(fā)出的4個(gè)16位二進(jìn)制數(shù)之和為1111111111111111,如果接收端收到的這4個(gè)16位二進(jìn)制數(shù)之和也是全“1;就認(rèn)為傳輸過程中沒有出差錯(cuò)。許多鏈路層協(xié)議都提供錯(cuò)誤檢查,包括流行的以太網(wǎng)協(xié)議。由于鏈路層以下的協(xié)議在源端和終端之間的某些通道可能不提供錯(cuò)誤檢測(cè), UDP雖然提供有錯(cuò)誤檢測(cè),但檢測(cè)到錯(cuò)誤時(shí),UDP不做錯(cuò)誤校正,只是簡單地把損壞的消息段扔掉,或者給應(yīng)用程序提供警告信息,所以UDP也要提供檢查和。UDP的偽首部UDP校驗(yàn)和覆蓋的內(nèi)容超出了UDP數(shù)據(jù)報(bào)本身的范圍。為了計(jì)算校驗(yàn)和, UDP把偽首部引入數(shù)據(jù)報(bào)中,在偽首部中有一個(gè)值為0的填充八位組用于保證整個(gè)數(shù)據(jù)報(bào)的長度為16比特的整數(shù)倍,這樣才好計(jì)算校驗(yàn)和。填充八位組和偽首部并不隨著UDP數(shù)據(jù)報(bào)一起傳輸,也不計(jì)算在數(shù)據(jù)報(bào)長度之內(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)文的首部僅僅指定了使用的協(xié)議端口號(hào)。因此為了確保數(shù)據(jù)報(bào)能夠正確到達(dá)目的地,發(fā)送UDP數(shù)據(jù)報(bào)的機(jī)器在計(jì)算校驗(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)首部中的1P地址。如果校驗(yàn)和正確,說明UDP數(shù)據(jù)報(bào)到達(dá)了正確主機(jī)的正確端口。在UDP校驗(yàn)和的計(jì)算過程中用到的偽首部長度為12個(gè)八位組,其結(jié)構(gòu)如下圖所示。08 16 31源IP地址目的IP地址0 協(xié)議 UDP長度圖3-7UDP的偽首部偽首部的源IP地址字段和目的IP地址字段記錄了發(fā)送UDP報(bào)文時(shí)使用的源IP地址和目的IP地址。協(xié)議字段指明了所使用的協(xié)議類型代碼(UDP是17),而長度字段是UDP數(shù)據(jù)報(bào)的長度。接收方進(jìn)行正確性驗(yàn)證的時(shí)候,必須要把這些字段的信息從IP報(bào)文的首部中抽取出來,以偽首部的格式進(jìn)行裝配,然后再重新計(jì)算校驗(yàn)和。4協(xié)議應(yīng)用UDP協(xié)議應(yīng)用UDP是一種不可靠的網(wǎng)絡(luò)協(xié)議,但是在有些情況下UDP協(xié)議可能會(huì)變得非常有用。因?yàn)閁DP具有TCP所望塵莫及的速度優(yōu)勢(shì)。雖然TCP協(xié)議中植入了各種安全保障功能,但是在實(shí)際執(zhí)行的過程中會(huì)占用大量的系統(tǒng)開銷,無疑使速度受到嚴(yán)重的影響。反觀UDP由于排除了信息可靠傳遞機(jī)制,將安全和排序等功能移交給上層應(yīng)用來完成,極大降低了執(zhí)行時(shí)間,使速度得到了保證。關(guān)于UDP協(xié)議的最早規(guī)范是RFC768,1980年發(fā)布。盡管時(shí)間已經(jīng)很長,但是UDP協(xié)議仍然繼續(xù)在主流應(yīng)用中發(fā)揮著作用。包括視頻電話會(huì)議系統(tǒng)在內(nèi)的許多應(yīng)用都證明了UDP協(xié)議的存在價(jià)值。因?yàn)橄鄬?duì)于可靠性來說,這些應(yīng)用更加注重實(shí)際性能,所以為了獲得更好的使用效果(例如,更高的畫面幀刷新速率)往往可以犧牲一定的可靠性(例如,會(huì)面質(zhì)量) 。根據(jù)不同的環(huán)境和特點(diǎn),兩種傳輸協(xié)議都將在今后的網(wǎng)絡(luò)世界中發(fā)揮更加重要的作用。UDP協(xié)議的幾個(gè)特性UDP是一個(gè)無連接協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當(dāng)它想傳送時(shí)就簡單地去抓取來自應(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),包括收發(fā)狀態(tài)等,因此一臺(tái)服務(wù)機(jī)可同時(shí)向多個(gè)客戶機(jī)傳輸相同的消息。(3)UDP信息包的標(biāo)題很短,只有8個(gè)字節(jié),相對(duì)于TCP的20個(gè)字節(jié)信息包的額外開銷很小。(4)吞吐量不受擁擠控制算法的調(diào)節(jié),只受應(yīng)用軟件生成數(shù)據(jù)的速率、傳輸帶寬、源端和終端主機(jī)性能的限制。UDP使用盡最大努力交付,即不保證可靠交付,因此主機(jī)不需要維持復(fù)雜的鏈接狀態(tài)表。UDP是面向報(bào)文的。發(fā)送方的UDP對(duì)應(yīng)用程序交下來的報(bào)文,在添加首部后就向下交付給IP層。既不拆分,也不合并,而是保留這些報(bào)文的邊界,因此,應(yīng)用程序需要選擇合適的報(bào)文大小。雖然UDP是一個(gè)不可靠的協(xié)議,但它是分發(fā)信息的一個(gè)理想?yún)f(xié)議。例如,在屏幕上報(bào)告股票市場、在屏幕上顯示航空信息等等。 UDP也用在路由信息協(xié)議RIP(RoutinglnformationProtocol)中修改路由表。在這些應(yīng)用場合下,如果有一個(gè)消息丟失,在幾秒之后另一個(gè)新的消息就會(huì)替換它。UDP廣泛用在多媒體應(yīng)用中,例如,ProgressiveNetworks公司開發(fā)的RealAudio軟件,它是在因特網(wǎng)上把預(yù)先錄制的或者現(xiàn)場音樂實(shí)時(shí)傳送給客戶機(jī)的一種軟件,該軟件使用的RealAudioaudio-on-demandprotocol協(xié)議就是運(yùn)行在UDP之上的協(xié)議,大多數(shù)因特網(wǎng)電話軟件產(chǎn)品也都運(yùn)行在UDP之上。我們經(jīng)常使用“ping”命令來測(cè)試兩臺(tái)主機(jī)之間TCP/IP通信是否正常,其實(shí)“ping”命令的原理就是向?qū)Ψ街鳈C(jī)發(fā)送UDP數(shù)據(jù)包,然后對(duì)方主機(jī)確認(rèn)收到數(shù)據(jù)包,如果數(shù)據(jù)包是否到達(dá)的消息及時(shí)反饋回來,那么網(wǎng)絡(luò)就是通的。4.3UDP技術(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ā)送方傳來的信息時(shí),會(huì)自動(dòng)向發(fā)送方發(fā)出確認(rèn)消息;發(fā)送方只有在接收到該確認(rèn)消息之后才繼續(xù)傳送其它信息,否則將一直等待直到收到確認(rèn)信息為止。與TCP不同,UDP協(xié)議并不提供數(shù)據(jù)傳送的保證機(jī)制。如果在從發(fā)送方到接收方的傳遞過程中出現(xiàn)數(shù)據(jù)報(bào)的丟失,協(xié)議本身并不能做出任何檢測(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)D1D22D333D4444但是UDP有可能按照以下順序?qū)⑺邮盏臄?shù)據(jù)提交到服務(wù)端的應(yīng)用:D333D1D4444D22事實(shí)上,UDP協(xié)議的這種亂序性基本上很少出現(xiàn),通常只會(huì)在網(wǎng)絡(luò)非常擁擠的情況下才有可能發(fā)生。TCP是面向連接的,有比較高的可靠性,一些要求比較高的服務(wù)一般使用這個(gè)協(xié)議,如FTP、Telnet、SMTP、HTTP、POP3等,而UDP是面向無連接的,使用這個(gè)協(xié)議的常見服務(wù)有DNS、SNMP、QQ等。5協(xié)議實(shí)現(xiàn)編寫UDPServer程序編寫步驟⑴使用socket()來建立一個(gè)UDPsocket,第二個(gè)參數(shù)為SOCK_DGRAM。(2)初始化sockaddr_in結(jié)構(gòu)的變量,并賦值。sockaddr_in結(jié)構(gòu)定義:structsockaddr_in{uint8_tsin_len;sa_family_tsin_family;in_port_tsin_port;structin_addrsin_addr;charsin_zero[8];};這里使用8888”作為服務(wù)程序的端口,使用INADDR_ANY”作為綁定的IP地址即任何主機(jī)上的地址。(3)使用bind()把上面的socket和定義的IP地址和端口綁定。這里檢查bind()是否執(zhí)行成功,如果有錯(cuò)誤就退出。這樣可以防止服務(wù)程序重復(fù)運(yùn)行的問題。(4)進(jìn)入無限循環(huán)程序,使用recvfrom()進(jìn)入等待狀態(tài),直到接收到客戶程序發(fā)送的數(shù)據(jù),就處理收到的數(shù)據(jù),并向客戶程序發(fā)送反饋。這里是直接把收到的數(shù)據(jù)發(fā)回給客戶程序。程序內(nèi)容#defineMAXLINE80#defineSERV_PORT8888voiddo_echo(intsockfd,structsockaddr*pcliaddr,socklen_tclilen){intn;socklen_tlen;charmesg[MAXLINE];for(;;){len=clilen;/*waitingforreceivedata*/n=recvfrom(sockfd,mesg,MAXLINE,0,pcliaddr,&len);/*sentdatabacktoclient*/sendto(sockfd,mesg,n,0,pcliaddr,len);}}intmain(void){intsockfd;structsockaddr_inservaddr,cliaddr;sockfd=socket(AF_INET,SOCK_DGRAM,0);/*createasocket7/*initservaddr*/bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_addr.s_addr=htonl(INADDR_ANY);servaddr.sin_port=htons(SERV_PORT);/*bindaddressandporttosocket*/if(bind(sockfd,(structsockaddr*)&servaddr,sizeof(servaddr))==-1){perror("binderror");exit⑴;}do_echo(sockfd,(structsockaddr*)&cliaddr,sizeof(cliaddr));return。;}UDPClient程序編寫UDPClient程序的步驟(1)初始化sockaddr_in結(jié)構(gòu)的變量,并賦值。這里使用“8888”作為連接的服務(wù)程序的端口,從命令行參數(shù)讀取IP地址,并且判斷IP地址是否符合要求。(2)使用socket()來建立一個(gè)UDPsocket,第二個(gè)參數(shù)為SOCK_DGRAM。(3)使用connect()來建立與服務(wù)程序的連接。與TCP協(xié)議不同,UDP的connect()并沒有與服務(wù)程序三次握手。上面說了 UDP是非連接的,實(shí)際上也可以是連接的。使用連接的UDP,kernel可以直接返回錯(cuò)誤信息給用戶程序,從而避免由于沒有接收到數(shù)據(jù)而導(dǎo)致調(diào)用 recvfrom()一直等待下去,看上去好像客戶程序沒有反應(yīng)一樣。(4)向服務(wù)程序發(fā)送數(shù)據(jù),因?yàn)槭褂眠B接的 UDP,所以使用write()來替代sendto()。這里的數(shù)據(jù)直接從標(biāo)準(zhǔn)輸入讀取用戶輸入。(5)接收服務(wù)程序發(fā)回的數(shù)據(jù),同樣使用read()來替代recvfrom()。(6)處理接收到的數(shù)據(jù),這里是直接輸出到標(biāo)準(zhǔn)輸出上。udpclient.c程序內(nèi)容:#defineMAXLINE80#defineSERV_PORT8888voiddo_cli(FILE*fp,intsockfd,structsockaddr*pservaddr,socklen_tservlen){intn;charsendline[MAXLINE],recvline[MAXLINE+1];/*connecttoserver*/if(connect(sockfd,(structsockaddr*)pservaddr,servlen)==-1){perror("connecterror");exit(1);}while(fgets(sendline,MAXLINE,fp)!=NULL){/*readalineandsendtoserver*/write(sockfd,sendline,strlen(sendline));/*receivedatafromserver*/n=read(sockfd,recvline,MAXL

溫馨提示

  • 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)論