2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  學(xué) 士 學(xué) 位 論 文</p><p>  THESIS OF BACHELOR</p><p>  題 目 網(wǎng)絡(luò)流量測(cè)量軟件的設(shè)計(jì)與實(shí)現(xiàn) </p><p>  網(wǎng)絡(luò)流量測(cè)量軟件的設(shè)計(jì)與實(shí)現(xiàn)</p><p>  摘 要:為了方便網(wǎng)絡(luò)編程,90年代初,由Microsoft聯(lián)合了其他幾家公司共同制定了一套

2、WINDOWS下的網(wǎng)絡(luò)編程接口,即Windows Sockets規(guī)范,它不是一種網(wǎng)絡(luò)協(xié)議,而是一套開放的、支持多種協(xié)議的Windows下的網(wǎng)絡(luò)編程接口。本篇論文主要是介紹了在TCP/IP基礎(chǔ)上利用winsock2對(duì)網(wǎng)卡進(jìn)行編程,以達(dá)到網(wǎng)絡(luò)流量監(jiān)測(cè)的目的。論文首先介紹了TCP/IP協(xié)議,旨在介紹IP,TCP,UDP等比較重要的協(xié)議。主要是介紹IP頭,TCP頭,UDP頭的特點(diǎn),以便從IP頭中可以獲取源地址,目的地址,協(xié)議類型等信息。在隨后的

3、章節(jié)中提出了Socket的概念,Socket實(shí)際上提供了一個(gè)通信端口使所有擁有Socket的端口的計(jì)算機(jī)之間能夠相互通信,在本論文中主要說明了socket的建立,監(jiān)聽和撤銷的過程。具體到程序?qū)崿F(xiàn)中,對(duì)網(wǎng)卡混雜模式的設(shè)置是通過原始套接字(raw socket)來實(shí)現(xiàn)的。為了讓原始套接字能接受所有的數(shù)據(jù),還需要通過將SOCK_RAW設(shè)置成SIO_RCVALL。對(duì)數(shù)據(jù)包的獲取通過recv()函數(shù)來完成。最后要完成的工作就是對(duì)所捕獲的IP數(shù)據(jù)包

4、進(jìn)行分析以提取出我們所需要的信</p><p>  關(guān)鍵字: TCP/IP,Winsock,原始套接字,NetBios </p><p>  Abstract: For convenience of network programming, in the early 1990s, a new set of network programming interface using under

5、WINDOWS was established by some companies united by Microsoft. It is known as Windows Socket Norm. It isn't a kind of network protocol, but an open network programming interface support multiple protocols under WINDO

6、WS. The main purpose of the thesis is to introduce how to use Winsock2 program on network adapter under the protocol of TCP/IP. This is for the purpose of meas</p><p>  In the following section, we give the

7、concept of Socket. Sockets actually provide a communication port to allow all the computers that have Socket port to communicate with each other. In the thesis, we talk on the process of the Socket’s building listening a

8、nd canceling. In the program, we use RAW Socket to set adapter on the mixed mode. To let the Socket receive all data, we also need to set the on SIO_RCVALL. Then we use the function recv () to get data pack. At last we n

9、eed analyze the data p</p><p>  KEY WORDS:TCP/IP, Winsock,RAW SOCKET, NetBIOS</p><p><b>  目  錄</b></p><p>  摘 要…………………………………………………………………….1</p><p>  Abstrac

10、t………………………………………………………..2</p><p>  前 言…………………………………………………………………….4</p><p>  第一章 緒論……………………………………………………………5</p><p>  1.1 TCP/IP協(xié)議及其協(xié)議分析方法……………………………….5</p><p>  1.1.1 分層

11、…………………………………………………………..5</p><p>  1.1.2 IP地址……………………………………………………….6</p><p>  1.1.3 端口…………………………………………………………..6</p><p>  1.1.4 TCP/IP協(xié)議在Windows中的實(shí)現(xiàn)………………………….7</p><p> 

12、 1.2 Winsock編程…………………………………………………...7</p><p>  1.3 網(wǎng)絡(luò)流量測(cè)量的程序?qū)崿F(xiàn)原理………………………………..8</p><p>  第二章 TCP/IP協(xié)議集………………………………………………9</p><p>  2.1 TCP/IP協(xié)議簡(jiǎn)介……………………………………………….9</p><

13、p>  2.2 IP協(xié)議………………………………………………………….9</p><p>  2.3 TCP協(xié)議………………………………………………………..10</p><p>  2.3.1 TCP服務(wù)模型………………………………………………..10</p><p>  2.3.2 TCP數(shù)據(jù)段頭………………………………………………..11</p&g

14、t;<p>  2.3.3 TCP協(xié)議的建立……………………………………………..12</p><p>  2.4 UDP協(xié)議………………………………………………………..13</p><p>  第三章 WINSOCK編程概述…………………………………………14</p><p>  3.1 套接字的概念………………………………………………….14&l

15、t;/p><p>  3.2 套接字的種類………………………………………………….14</p><p>  3.3 套接字的建立………………………………………………….14</p><p>  第四章 網(wǎng)絡(luò)流量測(cè)量的程序?qū)崿F(xiàn)……………………………….16</p><p>  4.1 網(wǎng)卡初始化…………………………………………………….16<

16、/p><p>  4.1.1 NetBios概述…………………………………………………16</p><p>  4.1.2 利用NetBios來初始化網(wǎng)卡………………………………..16</p><p>  4.2 原始套接字的設(shè)置…………………………………………….16</p><p>  4.3 IP包的協(xié)議分析………………………………………

17、………17</p><p>  4.4 結(jié)果與測(cè)試…………………………………………………….19</p><p>  結(jié) 論…………………………………………………………………….21</p><p>  結(jié)束語…………………………………………………………………….22</p><p>  參考文獻(xiàn)…………………………………………………………

18、………23</p><p><b>  前  言</b></p><p>  隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)日新月異的發(fā)展,Internet的逐漸普及,網(wǎng)絡(luò)對(duì)于人們已經(jīng)不再是一個(gè)陌生的概念??梢哉f,網(wǎng)絡(luò)已經(jīng)在很多人的生活中占據(jù)了重要的地位。于是,各種各樣的軟件隨之誕生,使人們能夠更加方便,快捷的訪問網(wǎng)絡(luò),了解網(wǎng)絡(luò)以充分的利用網(wǎng)絡(luò)。</p><p>  本

19、論文就是向大家介紹網(wǎng)絡(luò)中比較常用的技術(shù)——網(wǎng)絡(luò)流量的監(jiān)測(cè)。在介紹具體的程序?qū)崿F(xiàn)之前,論文首先介紹了TCP/IP協(xié)議,可以說,任何網(wǎng)絡(luò)技術(shù)都與TCP/IP協(xié)議有著密切的關(guān)聯(lián),TCP/IP協(xié)議給不同型號(hào)的計(jì)算機(jī),不同的操作系統(tǒng)之間提供了相互通信的平臺(tái)。TCP/IP起源于60年代末美國(guó)政府資助的一個(gè)分組交換網(wǎng)絡(luò)研究項(xiàng)目,到現(xiàn)在90年代已發(fā)展成為計(jì)算機(jī)之間最常應(yīng)用的組網(wǎng)形式。它是一個(gè)真正的開放系統(tǒng),因?yàn)閰f(xié)議組件的定義及其多種實(shí)現(xiàn)可以不用花錢或花

20、很少的錢就可以公開地得到。</p><p>  在進(jìn)行網(wǎng)絡(luò)流量的測(cè)量之前,我們首先要對(duì)本地機(jī)的信息有一個(gè)了解。這些信息的獲取是通過Netbios來完成的。Netbios利用其網(wǎng)絡(luò)控制快NCB來完成我們需要它去完成的對(duì)網(wǎng)卡的初始化工作。通過ncb_command來發(fā)出命令完成對(duì)網(wǎng)卡的操作。通過發(fā)送NCBENUM命令獲取網(wǎng)卡的數(shù)目和每個(gè)網(wǎng)卡的內(nèi)部編號(hào);對(duì)選定的網(wǎng)卡發(fā)送一個(gè)NCBRESET命令,以便進(jìn)行初始化;接著,

21、可以發(fā)送NCBASTAT命令以獲取網(wǎng)卡的信息。這樣,我們可以讀出網(wǎng)卡的MAC地址以便進(jìn)行進(jìn)一步的工作。</p><p>  要實(shí)現(xiàn)網(wǎng)絡(luò)流量的測(cè)量,Winsock給我們提供了一個(gè)接口,我們通過這個(gè)接口可以實(shí)現(xiàn)對(duì)IP層以上的層的數(shù)據(jù)包的監(jiān)測(cè)。我們通過建立原始套接字,利用Winsock提供給我們的一些特定的函數(shù)就可以完成對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲。首先需要建立一個(gè)socket,將它設(shè)置成為是對(duì)ip頭的操作,然后利用gethos

22、tname,phost獲取本機(jī)名,本機(jī)ip地址。將本機(jī)地址與IP地址綁定之后,將網(wǎng)卡設(shè)置為混雜模式,以便對(duì)所有經(jīng)過它的數(shù)據(jù)包進(jìn)行接收。在這些準(zhǔn)備工作已經(jīng)做好之后,余下的就是利用recv()來捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包。</p><p>  到現(xiàn)在為止,我們所作的工作都是分析工作的鋪墊。我們最后所要看到的就是網(wǎng)絡(luò)數(shù)據(jù)包的分析結(jié)果。在數(shù)據(jù)包的分析過程中,用戶一般想得到的主要信息不外乎是包的協(xié)議類型,源/目的地址,發(fā)送/接收端

23、口以及包的大小,定義指針,分別指向數(shù)據(jù)包的相對(duì)應(yīng)的位置就可以得到這些信息。將得到的信息羅列并顯示出來之后,我們就完成了對(duì)網(wǎng)絡(luò)中數(shù)據(jù)包的流量監(jiān)測(cè)過程。</p><p>  在論文的最后對(duì)整篇論文進(jìn)行了總結(jié),說明了一些不足之處,并對(duì)所有對(duì)這篇論文知道并建議的老師等表示感謝。</p><p><b>  第一章 緒論</b></p><p>  1.

24、1 TCP/IP協(xié)議及其協(xié)議分析方法</p><p>  TCP/IP起源于60年代末美國(guó)政府資助的一個(gè)分組交換網(wǎng)絡(luò)的研究項(xiàng)目,到現(xiàn)在90年代已發(fā)展成為計(jì)算機(jī)之間最常用的組網(wǎng)形式。它是一個(gè)真正的開放系統(tǒng),因?yàn)閰f(xié)議組件的定義及其多種實(shí)現(xiàn)可以不用花錢或花很少的錢就可以公開地得到。它成為被稱作“全球互聯(lián)網(wǎng)”或“因特網(wǎng)”(Internet)的基礎(chǔ)。</p><p><b>  1.1.1

25、 分層</b></p><p>  協(xié)議分層的概念的提出是為了減少協(xié)議設(shè)計(jì)的復(fù)雜性,每一層都建立到它的下層之上,每一層的目的就是為了向上一層提供特定的服務(wù)。一臺(tái)機(jī)器的第n層向另一臺(tái)機(jī)器的第n層會(huì)話,通話的規(guī)則稱為協(xié)議。分層和協(xié)議構(gòu)成了網(wǎng)絡(luò)體系結(jié)構(gòu)。</p><p>  在提到了分層的概念時(shí)就不能不提一下OSI參考模型。該模型基于國(guó)際化標(biāo)準(zhǔn)組織,共分為七層:</p>

26、<p>  物理層:涉及到通信在信道上傳輸?shù)脑急忍亓鳌?lt;/p><p>  數(shù)據(jù)鏈路層:加強(qiáng)物理層傳輸原始比特流的功能,使之對(duì)網(wǎng)絡(luò)層顯現(xiàn)為一條無錯(cuò)線路</p><p>  網(wǎng)絡(luò)層:關(guān)系到子網(wǎng)的運(yùn)行控制,其中一個(gè)關(guān)鍵的問題就是路由選擇。</p><p>  傳輸層:為用戶提供端到端的數(shù)據(jù)傳送服務(wù)。</p><p>  會(huì)話層:允許

27、不同機(jī)器上的用戶建立會(huì)話關(guān)系,為用戶提供會(huì)話控制服務(wù)。</p><p>  表示層:為用戶提供數(shù)據(jù)轉(zhuǎn)換和表示服務(wù)。</p><p>  應(yīng)用層:為用戶提供訪問OSI的接口,其中包括大量的常見的協(xié)議。</p><p>  TCP/IP通常被認(rèn)為是一個(gè)四層協(xié)議系統(tǒng),每一層負(fù)責(zé)不同的功能。</p><p>  數(shù)據(jù)鏈路層,通常包括操作系統(tǒng)中的設(shè)備驅(qū)

28、動(dòng)程序和計(jì)算機(jī)中對(duì)應(yīng)的網(wǎng)絡(luò)接口卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理接口細(xì)節(jié)。</p><p>  網(wǎng)絡(luò)層,處理分組在網(wǎng)絡(luò)中的活動(dòng),例如分組的路由選擇。在TCP/IP協(xié)議組件中,網(wǎng)絡(luò)層協(xié)議包括IP協(xié)議(網(wǎng)際協(xié)議),ICMP協(xié)議(Internet互連網(wǎng)控制報(bào)文協(xié)議),以及IGMP協(xié)議(Internet組管理協(xié)議)。</p><p>  運(yùn)輸層,主要為兩臺(tái)主機(jī)上的應(yīng)用程序提供端到端

29、的通信。在TCP/IP協(xié)議組件中,有兩個(gè)互不相同的傳輸協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)。TCP為兩臺(tái)主機(jī)提供高可靠性的數(shù)據(jù)通信。而另一方面,UDP則為應(yīng)用層提供一種非常簡(jiǎn)單的服務(wù)。它只是把稱作數(shù)據(jù)報(bào)的分組從一臺(tái)主機(jī)發(fā)送到另一臺(tái)主機(jī),但并不保證該數(shù)據(jù)報(bào)能到達(dá)另一端。</p><p>  應(yīng)用層,負(fù)責(zé)處理特定的應(yīng)用程序細(xì)節(jié)。幾乎各種不同的TCP/IP實(shí)現(xiàn)都會(huì)提供下面這些通用的應(yīng)用程序: Teln

30、et 遠(yuǎn)程登錄,F(xiàn)TP 文件傳輸協(xié)議,SMTP 用于電子郵件的簡(jiǎn)單郵件傳輸協(xié)議,SNMP 簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議。</p><p>  圖1-1 OSI模型與TCP/IP模型的比較</p><p>  如圖所示,OSI模型有七層,而TCP/IP模型只有4層。OSI模型在網(wǎng)絡(luò)層支持無連接和面向連接的通信,而TCP/IP模型在網(wǎng)絡(luò)層僅有無連接的通信方式,但是在傳輸層卻支持兩種模式,更好的面向了用戶。

31、</p><p>  1.1.2 IP地址</p><p>  互連網(wǎng)上的每個(gè)接口必須有一個(gè)唯一的Internet地址(也稱作IP地址)。IP地址長(zhǎng)32 bit。這些32位的地址通常寫成四個(gè)十進(jìn)制的數(shù),其中每個(gè)整數(shù)對(duì)應(yīng)一個(gè)字節(jié)。這種表示方法稱作“點(diǎn)分十進(jìn)制表示法”。需要再次指出的是,多接口主機(jī)具有多個(gè)IP地址,其中每個(gè)接口都對(duì)應(yīng)一個(gè)IP地址。</p><p>  由

32、于互連網(wǎng)上的每個(gè)接口必須有一個(gè)唯一的IP地址,因此必須要有一個(gè)管理機(jī)構(gòu)為接入互連網(wǎng)的網(wǎng)絡(luò)分配IP地址。這個(gè)管理機(jī)構(gòu)就是互連網(wǎng)絡(luò)信息中心(Internet Network Information Centre)稱作InterNIC。InterNIC只分配網(wǎng)絡(luò)號(hào)。主機(jī)號(hào)的分配由系統(tǒng)管理員來負(fù)責(zé)。</p><p><b>  1.1.3 端口</b></p><p>  網(wǎng)

33、絡(luò)中可以被命名和尋址的通信端口,是操作系統(tǒng)可分配的一種資源。按照OSI七層協(xié)議的描述,傳輸層與網(wǎng)絡(luò)層在功能上的最大區(qū)別是傳輸層提供進(jìn)程通信能力。從這個(gè)意義上講,網(wǎng)絡(luò)通信的最終地址就不僅僅是主機(jī)地址了,還包括可以描述進(jìn)程的某種標(biāo)識(shí)符。為此,TCP/IP協(xié)議提出了協(xié)議端口(protocol port,簡(jiǎn)稱端口)的概念,用于標(biāo)識(shí)通信的進(jìn)程。端口是一種抽象的軟件結(jié)構(gòu),應(yīng)用程序(即進(jìn)程)通過系統(tǒng)調(diào)用與某端口建立連接后,傳輸層傳給該端口的數(shù)據(jù)都被相

34、應(yīng)進(jìn)程所接收,相應(yīng)進(jìn)程發(fā)給傳輸層的數(shù)據(jù)都通過該端口輸出。在TCP/IP協(xié)議的實(shí)現(xiàn)中,端口操作類似于一般的I/O操作,進(jìn)程獲取一個(gè)端口,相當(dāng)于獲取本地唯一的I/O文件,可以用一般的讀寫原語訪問之。</p><p>  類似于文件描述符,每個(gè)端口都擁有一個(gè)叫端口號(hào)(port number)的整數(shù)型標(biāo)識(shí)符,用于區(qū)別不同端口。端口號(hào)的分配是一個(gè)重要問題。端口號(hào)的分配有兩種基本分配方式:第一種叫全局分配,這是一種集中控制方

35、式,由一個(gè)公認(rèn)的中央機(jī)構(gòu)根據(jù)用戶需要進(jìn)行統(tǒng)一分配,并將結(jié)果公布于眾。第二種是本地分配,又稱動(dòng)態(tài)連接,即進(jìn)程需要訪問傳輸層服務(wù)時(shí),向本地操作系統(tǒng)提出申請(qǐng),操作系統(tǒng)返回一個(gè)本地唯一的端口號(hào),進(jìn)程再通過合適的系統(tǒng)調(diào)用將自己與該端口號(hào)綁定起來。</p><p>  1.1.4 TCP/IP協(xié)議在Windows中的實(shí)現(xiàn)</p><p>  對(duì)TCP/IP協(xié)議有了一個(gè)結(jié)構(gòu)性的了解之后,就要考慮TCP/

36、IP協(xié)議在Windows中是如何應(yīng)用的。TCP/IP和OSI有一層映射關(guān)系,所以可以將TCP/IP通過OSI映射到Windows操作系統(tǒng)中去。OSI在Windows中的實(shí)現(xiàn):物理層就是網(wǎng)卡,數(shù)據(jù)鏈路層就是網(wǎng)卡驅(qū)動(dòng)程序,網(wǎng)絡(luò)層就是NDIS(網(wǎng)絡(luò)驅(qū)動(dòng)程序接口規(guī)范),傳輸層是TDI(傳輸驅(qū)動(dòng)程序接口),會(huì)話層是SPI(服務(wù)提供者接口),表示層是API(應(yīng)用編程接口),應(yīng)用層通常就是EXE文件。</p><p>  1.

37、2 Winsock編程</p><p>  Winsock就是Windows Socket的簡(jiǎn)稱,最簡(jiǎn)單的說,Winsock就是Windows應(yīng)用程序與TCP/IP之間的通信界面。如圖:</p><p>  圖1-2 Winsock在TCP/IP和OSI中的表示</p><p>  在Windows中,利用Winsock通信需經(jīng)過幾個(gè)步驟:初始化Winsock,創(chuàng)建

38、套接字,建立會(huì)話,傳送數(shù)據(jù),中止會(huì)話,中止Winsock。Winsock既可以提供機(jī)器間的通訊,又可提供Windows進(jìn)程間的通信。</p><p>  1.3 網(wǎng)絡(luò)流量測(cè)量的程序?qū)崿F(xiàn)原理</p><p>  網(wǎng)絡(luò)流量監(jiān)測(cè)器也是通過對(duì)網(wǎng)卡的編程來實(shí)現(xiàn)網(wǎng)絡(luò)通訊的,對(duì)網(wǎng)卡的編程也是使用通常的套接字(socket)方式來進(jìn)行。但是,通常的套接字程序只能響應(yīng)與自己硬件地址相匹配的或是以廣播形式發(fā)出

39、的數(shù)據(jù)幀,對(duì)于其他形式的數(shù)據(jù)幀比如已到達(dá)網(wǎng)絡(luò)接口但卻不是發(fā)給此地址的數(shù)據(jù)幀,網(wǎng)絡(luò)接口在驗(yàn)證投遞地址并非自身地址之后將不引起響應(yīng),也就是說應(yīng)用程序無法收取到達(dá)的數(shù)據(jù)包。而網(wǎng)絡(luò)監(jiān)測(cè)器的目的恰恰在于從網(wǎng)卡接收所有經(jīng)過它的數(shù)據(jù)包,這些數(shù)據(jù)包即可以是發(fā)給它的也可以是發(fā)往別處的。顯然,要達(dá)到此目的就必須將其設(shè)置為混雜模式。</p><p>  這種對(duì)網(wǎng)卡混雜模式的設(shè)置是通過原始套接字(raw socket)來實(shí)現(xiàn)的,這也有別

40、于通常經(jīng)常使用的數(shù)據(jù)流套接字和數(shù)據(jù)報(bào)套接字。在創(chuàng)建了原始套接字后,需要通過Setsockopt()函數(shù)來設(shè)置IP頭操作選項(xiàng),然后再通過bind()函數(shù)將原始套接字綁定到本地網(wǎng)卡。為了讓原始套接字能接受所有的數(shù)據(jù),還需要通過ioctlsocket()來進(jìn)行設(shè)置,而且還可以指定是否親自處理IP頭。至此,實(shí)際就可以開始對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行監(jiān)測(cè)了,對(duì)數(shù)據(jù)包的獲取仍通過recv()函數(shù)來完成。</p><p>  第二章 TC

41、P/IP協(xié)議集</p><p>  2.1 TCP/IP協(xié)議簡(jiǎn)介</p><p>  很多不同的廠家生產(chǎn)各種型號(hào)的計(jì)算機(jī),它們運(yùn)行完全不同的操作系統(tǒng),但TCP/IP協(xié)議組件允許它們互相進(jìn)行通信。TCP/IP模型是一種層級(jí)式(Layering)的結(jié)構(gòu),每一層都呼叫它的下一層所提供的服務(wù)來完成自己的需求。TCP/IP模型可以分為以下四層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層。本章主要對(duì)TCP/I

42、P協(xié)議組件進(jìn)行概述。</p><p><b>  2.2 IP協(xié)議</b></p><p>  IP是TCP/IP協(xié)議族中最為核心的協(xié)議。所有的TCP,UDP,ICMP,及IGMP數(shù)據(jù)都以IP數(shù)據(jù)報(bào)格式傳輸。與大多數(shù)網(wǎng)絡(luò)層協(xié)議不同,IP協(xié)議一開始就是為了網(wǎng)絡(luò)互連的目的而設(shè)計(jì)的,它的工作是提供一種從源端到目的端傳輸數(shù)據(jù)報(bào)的最佳嘗試方法,不管這些機(jī)器是否在同一網(wǎng)絡(luò)中。我們

43、可以通過分析IP數(shù)據(jù)報(bào)的頭部來更好的了解IP協(xié)議:</p><p><b>  圖2-1 IP包頭</b></p><p>  1、版本(version):記錄了數(shù)據(jù)報(bào)屬于哪一個(gè)版本的協(xié)議。</p><p>  2、IHL字段:用來告訴頭部有多長(zhǎng),以32字節(jié)長(zhǎng)度為一個(gè)單位,最小值為5。</p><p>  3、服務(wù)類型(

44、type of service):使主機(jī)告訴子網(wǎng)它想要什么樣的服務(wù)。3個(gè)標(biāo)志位D,T,R主機(jī)能說明它最關(guān)心組合{Delay,Throughput,Reliability}中的哪一項(xiàng)。還有兩位未用。D,T,R的優(yōu)先級(jí)從0到7。</p><p>  4、總長(zhǎng)(total length):包括數(shù)據(jù)報(bào)中的所有信息——包括頭部和數(shù)據(jù)??傞L(zhǎng)65535字節(jié)。</p><p>  5、標(biāo)識(shí)(identif

45、ication): 讓目的主機(jī)判斷新來的分段屬于哪個(gè)分組,所有屬于同一分組的字段包含同樣的標(biāo)識(shí)值。</p><p>  6、分段偏移(fragment offset):說明分段在當(dāng)前數(shù)據(jù)報(bào)的什么位置。除了數(shù)據(jù)報(bào)的最后一個(gè)分段外,所有分段都要乘以8字節(jié)。因?yàn)樵诜侄挝灰魄坝?位,其中兩位是未用的位,然后是兩個(gè)1位字段,DF表示不要分段,MF表示還有進(jìn)一步的分段。這樣表示分段位移的位只有13位,因此每個(gè)數(shù)據(jù)報(bào)最長(zhǎng)是81

46、92個(gè)分組,這樣最大的數(shù)據(jù)報(bào)長(zhǎng)度是65536字節(jié)。</p><p>  7、生命期(time to life):是同一個(gè)用來限制分組生命周期的計(jì)數(shù)器,最長(zhǎng)生命周期255s,它必須在每個(gè)節(jié)點(diǎn)都遞減,而且當(dāng)一個(gè)路由器中排隊(duì)時(shí)間過長(zhǎng)可以十倍數(shù)遞減。</p><p>  8、協(xié)議(protocol):說明將它送給哪個(gè)傳輸進(jìn)程的,協(xié)議的編號(hào)在整個(gè)因特網(wǎng)上是全球通用的,它定義于RFC 1700中。&l

47、t;/p><p>  9、頭部校驗(yàn)和(header checksum):這種算法用來校驗(yàn)頭部。該算法將頭部所有16位半字?jǐn)?shù)據(jù)累加起來,采用補(bǔ)運(yùn)算,再取其結(jié)果的補(bǔ)碼。網(wǎng)由于該算法的原理,當(dāng)數(shù)據(jù)報(bào)到達(dá)時(shí)其頭部校驗(yàn)和應(yīng)該為0。</p><p>  10、源地址(source)和目的地址(destination address):指明了網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)。</p><p><

48、b>  2.3 TCP協(xié)議</b></p><p>  TCP(傳輸控制協(xié)議),是專門設(shè)計(jì)用于在不可靠的internet上提供可靠的、端到端的字節(jié)流通信的協(xié)議。每臺(tái)支持TCP的機(jī)器均有一個(gè)TCP傳輸實(shí)體,或者是用戶進(jìn)程,或者負(fù)責(zé)管理TCP流以及與IP層接口的核心。TCP實(shí)體從本地進(jìn)程接受用戶的數(shù)據(jù)流,并將其分為不超過64字節(jié)的數(shù)據(jù)片段,并將每個(gè)數(shù)據(jù)片段作為單獨(dú)的IP數(shù)據(jù)報(bào)發(fā)送出去。當(dāng)包含有TCP

49、數(shù)據(jù)的IP數(shù)據(jù)報(bào)到達(dá)某臺(tái)相連的機(jī)器后,他們又被送給該機(jī)器內(nèi)的TCP實(shí)體,被重新組合為原來的數(shù)據(jù)流。IP層并不能保證將數(shù)據(jù)報(bào)正確地傳送到目的端,因此TCP實(shí)體需要判定是否超時(shí)并根據(jù)需要重發(fā)數(shù)據(jù)報(bào)。到達(dá)的數(shù)據(jù)也可能是按照錯(cuò)誤的順序傳到的,這也需要由TCP實(shí)體按正確的順序重新將這些數(shù)據(jù)報(bào)組裝成報(bào)文。</p><p>  2.3.1 TCP服務(wù)模型</p><p>  通過在發(fā)送方和接收方分別創(chuàng)建

50、稱為Socket的通信端點(diǎn)可以獲得TCP服務(wù)。每個(gè)套接字序號(hào)包含主機(jī)的IP地址以及一個(gè)主機(jī)本地的16位號(hào)碼,稱為端口。為了獲得TCP服務(wù),必須在發(fā)送方的Socket和接收方的Socket之間明確的建立連接。</p><p>  一個(gè)套接字可以被多個(gè)連接同時(shí)使用。序號(hào)小于256的端口稱為通用端口。所有的TCP連接均是全雙工的和點(diǎn)到點(diǎn)的,TCP不支持多點(diǎn)播送或廣播。TCP連接是字節(jié)流而非報(bào)文流,報(bào)文邊界并不按頭尾銜接

51、方式保存。當(dāng)一個(gè)應(yīng)用程序把數(shù)據(jù)送給TCP實(shí)體時(shí),TCP根據(jù)自己的判斷,可能會(huì)立刻將其發(fā)送出去或者將其緩存起來。</p><p>  有時(shí)候用戶為了立刻發(fā)送數(shù)據(jù)可以使用PUSH標(biāo)志來通知TCP不能耽擱數(shù)據(jù)的發(fā)送。TCP服務(wù)的另一個(gè)特點(diǎn)就是緊急數(shù)據(jù)功能。當(dāng)一個(gè)用戶按下DEL或者CTRL+C中斷一個(gè)已經(jīng)開始的遠(yuǎn)程計(jì)算時(shí),發(fā)送方應(yīng)用程序在數(shù)據(jù)流中放入一些控制信息并將其與URGENT標(biāo)志一起交給TCP,當(dāng)緊急數(shù)據(jù)到達(dá)目的端

52、之后,接受方應(yīng)用程序被中斷,然后去讀取數(shù)據(jù)并進(jìn)而發(fā)現(xiàn)了緊急數(shù)據(jù)。</p><p>  2.3.2 TCP數(shù)據(jù)段頭</p><p>  發(fā)送和接收方TCP實(shí)體以數(shù)據(jù)段(segment)的形式交換數(shù)據(jù)。一個(gè)數(shù)據(jù)段包含一個(gè)固定的20字節(jié)的頭,后面跟著以0字節(jié)或多字節(jié)的數(shù)據(jù)。對(duì)于數(shù)據(jù)段的大小有兩個(gè)限制條件:(1)每個(gè)數(shù)據(jù)段必須適合IP的載荷能力,不能超過65535字節(jié)。(2)要求每個(gè)數(shù)據(jù)段必須適合

53、最大傳送單位MTU。TCP實(shí)體所用的基本協(xié)議是滑動(dòng)窗口協(xié)議。當(dāng)發(fā)送方傳送一個(gè)數(shù)據(jù)段時(shí),它要啟動(dòng)計(jì)時(shí)器。當(dāng)數(shù)據(jù)段到達(dá)目的地后,接受方的TCP實(shí)體向回發(fā)送一個(gè)數(shù)據(jù)段,包含確認(rèn)序號(hào),希望收到下一個(gè)數(shù)據(jù)段的順序號(hào)。如果確認(rèn)號(hào)超時(shí),則發(fā)送方將重發(fā)。</p><p>  TCP數(shù)據(jù)段每段均以固定格式的20字節(jié)的頭開始,固定的頭后面可能是頭的一些可選項(xiàng)。在可選項(xiàng)后面最多有65535-20-20=65495數(shù)據(jù)字節(jié),第一個(gè)20指

54、IP頭,第二個(gè)20指TCP頭。不帶任何數(shù)據(jù)的數(shù)據(jù)段也是合法的,一般用于確認(rèn)報(bào)文和控制報(bào)文。</p><p>  以下介紹一下TCP數(shù)據(jù)段頭中每個(gè)字段的含義:</p><p><b>  圖2-2 TCP頭</b></p><p>  1、源端口和目的端口字段標(biāo)識(shí)出本地和遠(yuǎn)端的連接點(diǎn)。每個(gè)主機(jī)都可以自行決定如何分配自己的端口(從256開始)。&l

55、t;/p><p>  2、順序號(hào)和確認(rèn)號(hào)字段執(zhí)行它的通用功能。確認(rèn)號(hào)指希望接收下一個(gè)字節(jié)而不是前面已經(jīng)正確接收的字節(jié)。</p><p>  3、TCP頭長(zhǎng)表明在TCP頭中包含多少個(gè)32位字。由于可選項(xiàng)字段是變長(zhǎng)的,因此TCP頭也是變長(zhǎng)的,它實(shí)際上是指明了數(shù)據(jù)在數(shù)據(jù)段中的開始位置。接下來有6個(gè)未用的位。</p><p>  4、接下來是六個(gè)1位的標(biāo)志:</p>

56、<p> ?。?)URG位是應(yīng)急指針標(biāo)志,當(dāng)用到了應(yīng)急指針,則URG置1。應(yīng)急指針指從當(dāng)前順序號(hào)到緊急數(shù)據(jù)位置的偏移量。</p><p>  (2)ACK位置1表明確認(rèn)號(hào)是合法的。ACK為0表示數(shù)據(jù)段不包括確認(rèn)信息。</p><p> ?。?)PSH偽表示是帶有PUSH位標(biāo)志的數(shù)據(jù)。</p><p> ?。?)RST位用于復(fù)位由于主機(jī)崩潰或其他原因而出

57、現(xiàn)錯(cuò)誤的連接。</p><p> ?。?)SYN位用于建立連接。在連接請(qǐng)求中,SYN=1,ACK=0,表示捎帶確認(rèn)字段無效。連接響應(yīng)數(shù)據(jù)段應(yīng)帶有確認(rèn),因此SYN=1,ACK=1。</p><p> ?。?)FIN位用于釋放連接,它表明發(fā)送方已經(jīng)沒有數(shù)據(jù)發(fā)送了,然而當(dāng)斷開連接后,進(jìn)程還可以繼續(xù)接收數(shù)據(jù)。</p><p>  5、窗口大小字段表示在確認(rèn)了字節(jié)之后還可以發(fā)

58、送多個(gè)字節(jié),由于TCP中的流量控制是通過滑動(dòng)窗口來處理的。窗口大小為0也是合法的,表示它已經(jīng)收到了包括當(dāng)前字段的所有數(shù)據(jù)段,但當(dāng)前接收方急需暫停,希望不要發(fā)數(shù)據(jù)。</p><p>  6、校驗(yàn)和也是為了確保高可靠性而設(shè)置的。它校驗(yàn)頭部,數(shù)據(jù)和偽IP頭(如下圖)之和。當(dāng)接收方對(duì)整個(gè)數(shù)據(jù)段,包括校驗(yàn)和字段進(jìn)行運(yùn)算時(shí),結(jié)果應(yīng)是0。</p><p>  圖2-3 TCP偽頭</p>

59、<p>  2.3.3 TCP協(xié)議的建立</p><p>  TCP連接的建立使用三次握手協(xié)議,在此過程中雙方要互報(bào)自己的初始序號(hào),這樣就可以保證包的接收順序和發(fā)送順序相一致。</p><p>  1、(B) --> [SYN] --> (A)</p><p>  假如服務(wù)器A和客戶機(jī)B通訊. 當(dāng)A要和B通信時(shí),B首先向A發(fā)一個(gè)SYN (Syn

60、chronize) 標(biāo)記的包,告訴A請(qǐng)求建立連接。</p><p>  2、(B) <-- [SYN/ACK] <--(A)</p><p>  接著,A收到后會(huì)發(fā)一個(gè)對(duì)SYN包的確認(rèn)包(SYN/ACK)回去,表示對(duì)第一個(gè)SYN包的確認(rèn),并繼續(xù)握手操作。SYN/ACK包是僅SYN 和 ACK 標(biāo)記為1的包。</p><p>  3、(B) -->

61、[ACK] --> (A)</p><p>  B收到SYN/ACK 包,B發(fā)一個(gè)確認(rèn)包(ACK),通知A連接已建立。至此,三次握手完成,一個(gè)TCP連接完成。</p><p><b>  2.4 UDP協(xié)議</b></p><p>  Internet協(xié)議組同樣支持無連接的傳輸協(xié)議UDP。RFC 768定義的UDP協(xié)議是個(gè)無連接的、不可靠

62、的協(xié)議,它能夠以最小的控制開銷為應(yīng)用層協(xié)議提供最基本的傳輸服務(wù)。UDP向應(yīng)用程序提供了一種發(fā)送封裝的原始IP數(shù)據(jù)報(bào)的方法,并且發(fā)送時(shí)無需建立連接。很多有一個(gè)請(qǐng)求和一個(gè)響應(yīng)的客戶-服務(wù)器應(yīng)用程序采用UDP,這樣可以避免建立和釋放連接的麻煩。</p><p>  一個(gè)UDP數(shù)據(jù)段包括一個(gè)8字節(jié)的頭和數(shù)據(jù)部分。頭的格式如下:</p><p><b>  圖2.4 UDP頭</b&

63、gt;</p><p>  源端口和目的端口的作用與TCP中完全相同。UDP長(zhǎng)度字段指明包括8字節(jié)的頭和數(shù)據(jù)在內(nèi)的數(shù)據(jù)段長(zhǎng)度。UDP校驗(yàn)和字段包括偽UDP頭,UDP頭,UDP數(shù)據(jù),如果有必要再補(bǔ)充為偶數(shù)個(gè)字節(jié)。該字段是可選的,而且在不用于運(yùn)算時(shí)記為0。</p><p>  使用UDP協(xié)議時(shí),為了傳輸數(shù)據(jù),首先要設(shè)置客戶計(jì)算機(jī)的LocalPort屬性。然后服務(wù)器計(jì)算機(jī)只需將RemoteHos

64、t設(shè)置為客戶計(jì)算機(jī)的IP地址,并將RemotePort屬性設(shè)置為與客戶計(jì)算機(jī)LocalPort屬性相同的端口,最后調(diào)用SendData方法來發(fā)送信息,而客戶計(jì)算機(jī)則使用DataArrival事件內(nèi)的GetData方法來獲取服務(wù)器計(jì)算機(jī)發(fā)送來的信息。</p><p>  第三章 Winsock編程概述</p><p>  Winsock就是Windows Socket的簡(jiǎn)稱。最簡(jiǎn)單地說,Wi

65、nsock就是Windows應(yīng)用程序與TCP/IP之間的通信界面。當(dāng)然,Winsock還支持其他一些網(wǎng)絡(luò)協(xié)議棧,例如,Novell的IPX/SPX協(xié)議?!,F(xiàn)在最新版本是Winsock2.0版。</p><p>  3.1 套接字的概念</p><p>  Socket是網(wǎng)絡(luò)上運(yùn)行的兩個(gè)程序間雙向通信連接的一端。Socket這個(gè)詞的一般意義是自然的或人工的插口,如家用電器的電源插口等??蛻舫?/p>

66、序可以向Socket寫請(qǐng)求,服務(wù)器將處理此請(qǐng)求,然后通過Socket把結(jié)果返回給客戶。Socket是一種底層連接。客戶機(jī)和服務(wù)器通過寫入到Socket的字節(jié)流進(jìn)行通信。它們必須有共同的協(xié)議,也就是說,通過Socket相互傳送信息時(shí)所用的語言必須是協(xié)定好的。</p><p>  3.2 套接字的種類</p><p>  流式套接字(SOCK_STREAM):提供了一個(gè)面向連接、可靠的數(shù)據(jù)傳輸

67、服務(wù),數(shù)據(jù)無差錯(cuò)、無重復(fù)地發(fā)送,且按發(fā)送順序接收。內(nèi)設(shè)流量控制,避免數(shù)據(jù)流超限;數(shù)據(jù)被看作是字節(jié)流,無長(zhǎng)度限制。文件傳送協(xié)議(FTP)即使用流式套接字。</p><p>  數(shù)據(jù)報(bào)式套接字(SOCK_DGRAM):提供了一個(gè)無連接服務(wù)。數(shù)據(jù)包以獨(dú)立包形式被發(fā)送,不提供無錯(cuò)保證,數(shù)據(jù)可能丟失或重復(fù),并且接收順序混亂。網(wǎng)絡(luò)文件系統(tǒng)(NFS)使用數(shù)據(jù)報(bào)式套接字。</p><p>  原始套接字(

68、SOCK_RAW): 該接口允許對(duì)較低層協(xié)議,如IP、ICMP直接訪問。常用于檢驗(yàn)新的協(xié)議實(shí)現(xiàn)或訪問現(xiàn)有服務(wù)中配置的新設(shè)備。</p><p>  3.3 套接字的建立</p><p>  一個(gè)人要能夠收到別人打給他的電話,首先他要裝上一門電話。同樣,必須先建立 socket 以偵聽線路。這個(gè)過程包含幾個(gè)步驟。首先,要建立一個(gè)新的 socket,就像先裝上電話一樣。socket() 命令就完

69、成這個(gè)工作。 </p><p>  因?yàn)?sockets 有幾種類型,因此要注明我們要建立什么類型的。我們要做一個(gè)選擇是 socket 的地址格式。如同電話有音頻和脈沖兩種形式一樣,socket 有兩個(gè)最重要的選項(xiàng)是 AF_UNIX 和 AF_INET。我們這里將著重于 AF_INET 方式。AF_INET 使用202.117.1.13 這樣被點(diǎn)號(hào)隔開的四個(gè)十進(jìn)制數(shù)字的地址格式。除了機(jī)器地址以外,還可以利用端口號(hào)

70、允許每臺(tái)機(jī)器上的多個(gè) AF_INET socket。</p><p>  另外一個(gè)必須提供的參數(shù)是 socket 的類型。流式套接字提供了雙向、有序的、無重復(fù)的以及無記錄邊界的數(shù)據(jù)流服務(wù),適合處理大量數(shù)據(jù)。它是面向聯(lián)結(jié)的,必須建立數(shù)據(jù)傳輸鏈路,同時(shí)還必須對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行驗(yàn)證,確保數(shù)據(jù)的準(zhǔn)確性。因此,系統(tǒng)開銷較大。而數(shù)據(jù)報(bào)套接字也支持雙向的數(shù)據(jù)流,但不保證傳輸數(shù)據(jù)的準(zhǔn)確性,但保留了記錄邊界。由于數(shù)據(jù)報(bào)套接字是無聯(lián)接

71、的,例如廣播時(shí)的聯(lián)接,所以并不保證接收端是否正在偵聽。數(shù)據(jù)報(bào)套接字傳輸效率比較高。SOCK_RAW是將套接字定義為原始套接字。原始套接字保存了數(shù)據(jù)包中的完整IP頭,前面兩種套接字只能收到用戶數(shù)據(jù)。因此可以通過原始套接字對(duì)數(shù)據(jù)進(jìn)行分析。</p><p>  在建立 socket 后,我們就要提供 socket 偵聽的地址了。bind() 函數(shù)來處理這件事情,將本地地址綁定到所創(chuàng)建的套接字上。然后我們要做的就是設(shè)置

72、SOCK_RAW 為SIO_RCVALL,以便接收所有的IP包。這里的SIO_RCVALL是指示SOCK_RAW接收所有的數(shù)據(jù)包。</p><p>  前面的工作基本上都是對(duì)原始套接字進(jìn)行設(shè)置,在將原始套接字設(shè)置完畢,使其能按預(yù)期目的工作時(shí),就可以通過recv()函數(shù)從網(wǎng)卡接收數(shù)據(jù)了,接收到的原始數(shù)據(jù)包存放在緩存RecvBuf[]中,緩沖區(qū)長(zhǎng)度BUFFER_SIZE定義為65535。然后就可以根據(jù)前面對(duì)IP數(shù)據(jù)段

73、頭、TCP數(shù)據(jù)段頭的結(jié)構(gòu)描述而對(duì)捕獲的數(shù)據(jù)包進(jìn)行分析。</p><p>  第四章 網(wǎng)絡(luò)流量測(cè)量的程序?qū)崿F(xiàn)</p><p><b>  4.1 網(wǎng)卡初始化</b></p><p>  本論文在介紹對(duì)網(wǎng)卡初始化的過程中,主要介紹以下幾項(xiàng)工作:獲得網(wǎng)卡的MAC地址,得到本機(jī)網(wǎng)卡的數(shù)目,Reset網(wǎng)卡,通過IP地址得到機(jī)器名。在論文中把這幾項(xiàng)工作一起

74、放到網(wǎng)卡初始化部分介紹,其中一個(gè)主要原因就是這些主要都是利用NetBios來完成的。下面我們來詳細(xì)介紹。</p><p>  4.1.1 NetBios概述</p><p>  NetBios是PC網(wǎng)絡(luò)中用得最為廣泛的網(wǎng)絡(luò)協(xié)議之一,大多數(shù)的局域網(wǎng)(LAN)產(chǎn)品都支持NetBios。因此,將NetBios作為網(wǎng)絡(luò)協(xié)議的優(yōu)點(diǎn)是:基于NetBios網(wǎng)絡(luò)應(yīng)用程序并不需修改便能在其它各種網(wǎng)絡(luò)環(huán)境下運(yùn)

75、行,用戶將享受到極大的靈活性,既使改用了其它網(wǎng)絡(luò)也能繼續(xù)使用原先的應(yīng)用程序,避免了重復(fù)投入。</p><p>  4.1.2 利用NetBios來初始化網(wǎng)卡</p><p>  NetBios API只包括了一個(gè)函數(shù),就叫做NetBios。這個(gè)函數(shù)使用網(wǎng)絡(luò)控制塊NCB(network control block)結(jié)構(gòu)作為參數(shù),這個(gè)結(jié)構(gòu)告訴函數(shù)要做什么。這個(gè)結(jié)構(gòu)中包括多個(gè)成員,如ncb_co

76、mmand,ncb_num,ncb_length等。</p><p>  我們著重介紹一下ncb_command。每一個(gè)發(fā)往NetBios的NCB都代表一項(xiàng)要執(zhí)行的動(dòng)作,具體執(zhí)行哪項(xiàng)動(dòng)作,由ncb_command字段的取值決定。我們使用三個(gè)命令來探測(cè)MAC地址:NCBENUM,NCBRESET,NCBASTAT。NCBENUM列舉系統(tǒng)中網(wǎng)卡的數(shù)量。NCBRESET重置網(wǎng)卡。NCBASTAT 接受本地或遠(yuǎn)程接口卡的

77、狀態(tài)。使用此命令后,ncb_buffer成員指向由ADAPTER_STATUS結(jié)構(gòu)填充的緩沖區(qū),隨后是NAME_BUFFER結(jié)構(gòu)的數(shù)組。</p><p>  具體在程序?qū)崿F(xiàn)的時(shí)候我們首先利用NCBTRSRT重置網(wǎng)卡,以便我們可以查詢。接著,可以發(fā)送NCBASTAT命令以獲取網(wǎng)卡的信息。向網(wǎng)卡發(fā)送NCBENUM命令,以獲取當(dāng)前機(jī)器的網(wǎng)卡信息,如網(wǎng)卡的個(gè)數(shù),網(wǎng)卡的編號(hào)等。最后對(duì)于每張網(wǎng)卡以其網(wǎng)卡編號(hào)為輸入編號(hào),獲取其

78、MAC地址。</p><p>  4.2 原始套接字的設(shè)置</p><p><b>  具體設(shè)置步驟如下:</b></p><p>  1、WSAStartup(MAKEWORD(2, 2), &WSAData)查看Winsock的版本號(hào)。</p><p>  2、s=socket(AF_INET,SOCK_RA

79、W,IPPROTO_RAW)創(chuàng)建原始套接字</p><p>  3、setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag));IP頭操作選項(xiàng),將flag設(shè)置成TRUE,親自對(duì)IP頭進(jìn)行處理。</p><p>  4、gethostname((char*)LocalName, sizeof(LocalNa

80、me)-1);獲取本機(jī)名。</p><p>  5、pHost = gethostbyname((char*)LocalName))獲取本地IP地址。</p><p>  6、addr_in.sin_addr=*(in_addr *)phost->h_addr_list[0]; addr_in.sin_family = AF_INET; addr_in.sin_port = hton

81、s(57274);填充SOCKADDR_IN,第一句將IP地址與本機(jī)綁定,然后定義SOCKET類型為AF_INET,然后設(shè)定其端口號(hào),可以為任意值,但是最好不要和公共端口號(hào)相同。</p><p>  7、bind(sock, (PSOCKADDR)&addr_in, sizeof(addr_in));綁定原始套接字到本地網(wǎng)卡上。</p><p>  8、ioctlsocket(so

82、ck, SIO_RCVALL, &dwValue); 設(shè)置 SOCK_RAW 為SIO_RCVALL,以便接收所有的IP包。其中SIO_RCVALL的定義為: #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)。</p><p>  在對(duì)原始套接字設(shè)置完畢后就可以通過reiv()從網(wǎng)卡接收數(shù)據(jù),接收到的原始數(shù)據(jù)包存放在緩存buf中。</p><p> 

83、 4.3 IP包的協(xié)議分析</p><p>  前面在第二章已經(jīng)對(duì)IP頭,TCP頭,UDP頭的結(jié)構(gòu)進(jìn)行了描述。以下我們將利用前面所介紹的結(jié)構(gòu)特點(diǎn)對(duì)所捕獲的數(shù)據(jù)包進(jìn)行分析:</p><p>  IP報(bào)頭是由一個(gè)_iphdr的類來定義的,在這個(gè)類中定義了11項(xiàng):</p><p>  1、ver_len:版本,長(zhǎng)度為4位;</p><p>  2、

84、type:服務(wù)類型,長(zhǎng)度為8位;</p><p>  3、length[2]:該數(shù)據(jù)報(bào)的總長(zhǎng),16位;</p><p>  4、id[2]:報(bào)文標(biāo)識(shí),16位;</p><p>  5、flag_offset[2]:分段偏移,16位,包括3位標(biāo)志,13位分段偏移;</p><p>  6、Time:生存時(shí)間,8位;</p><

85、;p>  7、Protocol:協(xié)議類型,8位;</p><p>  8、crc_val[2]:頭校驗(yàn)和,16位;</p><p>  9、src_addr[4]:源地址,32位</p><p>  10、tar_addr[4]:目的地址,32位</p><p>  11、options[4]:選項(xiàng),32位</p><

86、;p>  與IP頭定義相同,TCP報(bào)頭的定義了一個(gè)_tcphdr類,在這個(gè)類中定義了TCP頭的9項(xiàng):</p><p>  1、source_port[2]:發(fā)送端端口號(hào),16位;</p><p>  2、dest_port[2]:接收端端口號(hào),16位;</p><p>  3、sequence_no[4]:順序號(hào),32位;</p><p&g

87、t;  4、ack_no[4]:確認(rèn)號(hào),32位;</p><p>  5、offset_reser_con[2]:數(shù)據(jù)偏移位,16位;</p><p>  6、window[2]:窗口大小,16位;</p><p>  7、checksum[2]:校驗(yàn)和,16位;</p><p>  8、urgen_pointer[2]:緊急指針,16位;&

88、lt;/p><p>  9、options[3]:選項(xiàng),32位;</p><p>  對(duì)UDP頭的定義,與TCP頭的定義基本一致,這里就不再重復(fù)</p><p>  我們利用RFC1700的協(xié)議定義,分別給IP協(xié)議,TCP協(xié)議和UDP協(xié)議進(jìn)行定義:</p><p>  1、#define PROTOCOL_IP 4,當(dāng)IP頭中Protocol為4

89、時(shí),這是一個(gè)IP數(shù)據(jù)包。</p><p>  2、PROTOCOL_TCP 6,當(dāng)IP頭中Protocol為6時(shí),這是一個(gè)TCP數(shù)據(jù)包。</p><p>  3、#define PROTOCOL_UDP 17,當(dāng)IP頭中Protocol為17時(shí),這是一個(gè)UDP數(shù)據(jù)包。</p><p>  當(dāng)函數(shù)recv()執(zhí)行時(shí),開始捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包,定義一個(gè)名為len的緩沖區(qū),

90、當(dāng)len>0時(shí),說明接收到數(shù)據(jù),開始進(jìn)行數(shù)據(jù)包分析。</p><p>  定義一個(gè)名為ip的指針,指向IP頭的第一個(gè)位,定義一個(gè)名為tcp的指針指向地址=(IP頭的首地址+I(xiàn)P頭的長(zhǎng)度)的位置。這兩個(gè)指針的定義分別定義了IP頭和TCP頭。然后在IP頭分析Protocol,如果滿足上述定義的TCP頭,UDP頭的情況,利用函數(shù)GetProtocolTxt()分別輸出“TCP”“UDP”。</p>

91、<p>  將buf清0,得到一個(gè)16位的空棧,然后將ip指針分別指向src_addr[0],src_addr[1], src_addr[2] ,src_addr[3],彼此之間用“.”間隔開,得到數(shù)據(jù)包的源地址。同樣的,將ip指向tar_addr[0],tar_addr[1],tar_addr[2],tar_addr[3],用“.”間隔開,得到數(shù)據(jù)包的目的地址。然后在分別由src_port,dest_port,datalen

92、分別讀出數(shù)據(jù)包的源端口,目的端口,和數(shù)據(jù)包長(zhǎng)度。Datalen由length[0]×+length[1]。</p><p>  最后,將該程序進(jìn)行測(cè)試,該程序已經(jīng)具備了網(wǎng)絡(luò)流量測(cè)量的基本功能:捕獲數(shù)據(jù)包,對(duì)數(shù)據(jù)包進(jìn)行IP層以上的分析。</p><p><b>  4.4 結(jié)果與測(cè)試</b></p><p>  為了更加客觀準(zhǔn)確的顯示出

93、測(cè)量的數(shù)據(jù)包,我們首先直接將所截獲的TCP包和UDP包的不經(jīng)過加工直接顯示出來:</p><p>  首先截獲UDP包,以下是在本機(jī)上運(yùn)行一個(gè)利用UDP傳輸?shù)某绦驎r(shí),運(yùn)行數(shù)據(jù)包捕獲程序所顯示的數(shù)據(jù)包:</p><p>  圖5-1 截獲的UDP包</p><p>  圖中所標(biāo)記的11轉(zhuǎn)化為10進(jìn)制數(shù)后為17(UDP協(xié)議號(hào)),在兩個(gè)字節(jié)后的部分ca 75 01 65表

94、示源地址,e0 02 f3 47表示目的地址。05 98表示該數(shù)據(jù)包長(zhǎng)度為1432(注意長(zhǎng)度從版本位+I(xiàn)HL開始計(jì)算,從圖中顯示為第一行45)。</p><p>  下圖是在本機(jī)上運(yùn)行FTP軟件所截獲的TCP包:</p><p>  圖5-2 運(yùn)行FTP程序所截獲的TCP數(shù)據(jù)包</p><p>  與UDP相同,圖中第二行所顯示的ca c8 ee e0表示的源地址,

95、隨后ca c8 ee 50所表示的是數(shù)據(jù)包的目的地址。不同的是在源地址前兩個(gè)字節(jié)處的06表示該數(shù)據(jù)包是利用TCP協(xié)議進(jìn)行傳輸?shù)摹?5 dc表示該TCP數(shù)據(jù)包的大小為1500,起始位為版本+I(xiàn)HL,在圖中顯示為第一行的45。</p><p>  將以上所得到的數(shù)據(jù)包信息解析出來,用文字形式顯示出來就可以讓使用者能夠清楚明白的了解所在局域網(wǎng)絡(luò)的基本狀態(tài)了。如圖所示:</p><p>  圖5-

96、3 當(dāng)前網(wǎng)絡(luò)基本狀態(tài)示意圖</p><p><b>  結(jié)  論</b></p><p>  通過網(wǎng)絡(luò)流量監(jiān)測(cè)統(tǒng)計(jì)的程序我們基本上可以了解到網(wǎng)絡(luò)數(shù)據(jù)包中所包含的一般信息,該程序提取出數(shù)據(jù)包中比較有代表性的信息:協(xié)議,源/目的地址,源/目的端口以及數(shù)據(jù)包長(zhǎng)度。通過這些信息,我們就可以對(duì)網(wǎng)絡(luò)狀態(tài)有一個(gè)大體上的了解。通過源/目的地址可以知道在網(wǎng)絡(luò)上有哪些活動(dòng)的主機(jī),通過數(shù)據(jù)

97、包長(zhǎng)度的累加可以了解到當(dāng)前網(wǎng)絡(luò)的流量。</p><p>  本論文介紹的以原始套接字的方式對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行捕獲的方法實(shí)現(xiàn)起來比較簡(jiǎn)單,尤其是不需要編寫VxD虛擬設(shè)備驅(qū)動(dòng)程序就可以實(shí)現(xiàn)抓包,使得其編寫過程變的比較簡(jiǎn)便。但由于捕獲到的數(shù)據(jù)包頭不包含有幀信息,因此不能接收到與 IP 同屬網(wǎng)絡(luò)層的其它數(shù)據(jù)包, 如ARP數(shù)據(jù)包、RARP數(shù)據(jù)包等。由于所學(xué)知識(shí)有限,沒有對(duì)數(shù)據(jù)包做進(jìn)一步的分析,而是僅僅給出了對(duì)一般信息的分析方法

98、。通過本論文的介紹,可對(duì)原始套接字的使用方法以及TCP/IP協(xié)議結(jié)構(gòu)原理等知識(shí)有一個(gè)基本的認(rèn)識(shí)。</p><p>  如果對(duì)TCP包/UDP包進(jìn)行進(jìn)一步的分析,就可以得到一些應(yīng)用層的分析結(jié)果。這是通過對(duì)TCP/UDP協(xié)議的源端口和目的端口進(jìn)行分析得到的。常用的一些協(xié)議的端口號(hào)有:</p><p>  1、SMTP(simple mail transfer protocol):簡(jiǎn)單郵件傳輸協(xié)

99、議,端口號(hào)25</p><p>  2、POP3(post office protocol):電子郵局協(xié)議,端口號(hào)110</p><p>  3、FTP:文件傳輸協(xié)議,端口號(hào)21,</p><p>  4、HTTP:超文本傳輸協(xié)議,端口號(hào)80,</p><p>  5、Telnet:遠(yuǎn)程終端會(huì)話協(xié)議,端口號(hào)23。</p><

100、;p>  這些進(jìn)一步的分析工作由于開始階段的設(shè)計(jì)疏忽,沒有在最終的程序部分顯示出來。</p><p><b>  結(jié) 束 語</b></p><p>  應(yīng)該說,在時(shí)間緊工作忙的情況下,在職完成畢業(yè)論文存在一定的困難,但通過老師的輔導(dǎo)及自己較好地處理工學(xué)矛盾,經(jīng)過一個(gè)多月的努力之后,我總算完成了這次畢業(yè)設(shè)計(jì),雖然說還算順利,但是程序的編寫過程中遇到了不少的問題,

101、像Socket,Netbios以前在程序中基本上沒有使用過。</p><p>  在這里我要特別感謝***老師和高專函授站的***老師,在我挑選畢業(yè)設(shè)計(jì)題目和相關(guān)書籍過程中,他們給予了悉心的指導(dǎo),使我能夠按照規(guī)定完成自己的畢業(yè)設(shè)計(jì)任務(wù)。</p><p>  在這里,我還要感謝我的哥哥,當(dāng)我在程序中遇到問題時(shí),常常能夠得到他耐心的講解,并在論文的完成過程中為我提出了很多的建議。</p&

102、gt;<p><b>  參考文獻(xiàn)</b></p><p>  熊桂喜,王小虎著,計(jì)算機(jī)網(wǎng)絡(luò)原理,北京:清華大學(xué)出版社,1998</p><p>  李增智,陳妍,計(jì)算機(jī)網(wǎng)絡(luò)原理.西安:西安交通大學(xué)出版社,2003</p><p>  朱雁輝,Windows防火墻與網(wǎng)絡(luò)封包截獲技術(shù),北京:電子工業(yè)出版社,2002</p>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲(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)論