版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 題目:接收并解析IP分組姓名: 學(xué)號(hào): 班號(hào): 時(shí)間:2016/10/23計(jì)算機(jī)學(xué)院時(shí)間:目 錄摘 要1 目的12 要求13相關(guān)知識(shí)14實(shí)現(xiàn)原理及流程圖錯(cuò)誤!未定義書(shū)簽。5程序代碼96運(yùn)行結(jié)果與分析97參考文獻(xiàn)15題目:接收并解析IP分組1、 目的IP分組是網(wǎng)絡(luò)層傳輸?shù)幕締卧?,通過(guò)接收和解析IP分組,了解IP分組基本結(jié)構(gòu)與IP協(xié)議基本功能2、要求(1)以命令行方式運(yùn)行:DOSParseIP log_file;以命令方式顯示,并保存文件。 其中,ParseIP為程序名,log_file為文件名(2)輸出內(nèi)容:IP分組首部每個(gè)字段,以及數(shù)據(jù)用ASCII碼顯示。(3)當(dāng)程序收到輸入“CTRL+C
2、”時(shí)退出。3、相關(guān)知識(shí) 互聯(lián)網(wǎng)絡(luò)層是TCP/IP協(xié)議參考模型中的關(guān)鍵部分。IP協(xié)議把傳輸層送來(lái)的消息組裝成IP數(shù)據(jù)包,并把IP數(shù)據(jù)包傳遞給數(shù)據(jù)鏈路層。 IP協(xié)議的數(shù)據(jù)包格式如下: 1. IP數(shù)據(jù)報(bào)首部的固定部分中的各字段 版本:占4位,指IP協(xié)議的版本。通信雙方使用的IP協(xié)議版本必須一致。日前廣泛使用的 IP協(xié)議版本號(hào)為 4 (即 IPv4)。IPv6 目前還處于起步階段。 首部長(zhǎng)度:占 4 位,可表示的最大十進(jìn)制數(shù)值是 15。請(qǐng)注意,這個(gè)字段所表示數(shù)的單位是32位字 ( 1 個(gè)32位字長(zhǎng)是4 字節(jié)),因此,當(dāng) IP 的首部長(zhǎng)度為 1111 時(shí) (即十進(jìn)制的 15),首部長(zhǎng)度就達(dá)到 60字節(jié)。
3、當(dāng) IP 分組的首部長(zhǎng)度不是4字節(jié)的整數(shù)倍時(shí),必須利用最后的填充字段加以填充。因此數(shù)據(jù)部分永遠(yuǎn)在 4字節(jié)的整數(shù)倍開(kāi)始,這樣在實(shí)現(xiàn) IP協(xié)議時(shí)較為方便。首部長(zhǎng)度限制為 60字節(jié)的缺點(diǎn)是有時(shí)可能不夠用。這樣做的目的是希望用戶(hù)盡量減少開(kāi)銷(xiāo)。最常用的首部長(zhǎng)度就是 20 字節(jié) (即首部長(zhǎng)度為 0101),這時(shí)不使用任何選項(xiàng)。 服務(wù):占 8 位,用來(lái)獲得更好的服務(wù)。這個(gè)字段在舊標(biāo)準(zhǔn)中叫做服務(wù)類(lèi)型,但實(shí)際上一直沒(méi)有被使用過(guò)。1998年IETF把這個(gè)字段改名為區(qū)分服務(wù) DS (DifferentiatedServices)。只有在使用區(qū)分服務(wù)時(shí),這個(gè)字段才起作用。 總長(zhǎng)度:總長(zhǎng)度指首都及數(shù)據(jù)之和的長(zhǎng)度,單位為
4、字節(jié)。因?yàn)榭傞L(zhǎng)度字段為 16位,所以數(shù)據(jù)報(bào)的最大長(zhǎng)度為 216-1=65 535字節(jié)。 在IP層下面的每一種數(shù)據(jù)鏈路層都有自己的幀格式,其中包括幀格式中的數(shù)據(jù)字段的最大長(zhǎng)度,即最大傳送單元 MTU (Maximum Transfer Unit)。當(dāng)一個(gè)數(shù)據(jù)報(bào)封裝成鏈路層的幀時(shí),此數(shù)據(jù)報(bào)的總長(zhǎng)度 (即首部加上數(shù)據(jù)部分)一定不能超過(guò)下面的數(shù)據(jù)鏈路層的MTU值。 標(biāo)識(shí) (Identification):占 16位。IP軟件在存儲(chǔ)器中維持一個(gè)計(jì)數(shù)器,每產(chǎn)生一個(gè)數(shù)據(jù)報(bào),計(jì)數(shù)器就加 1,并將此值賦給標(biāo)識(shí)字段。但這個(gè)“標(biāo)識(shí)”并不是序號(hào),因?yàn)?IP是無(wú)連接的服務(wù),數(shù)據(jù)報(bào)不存在按序接收的問(wèn)題。當(dāng)數(shù)據(jù)報(bào)由于長(zhǎng)度超
5、過(guò)網(wǎng)絡(luò)的 MTU 而必須分片時(shí),這個(gè)標(biāo)識(shí)字段的值就被復(fù)制到所有的數(shù)據(jù)報(bào)的標(biāo)識(shí)字段中。相同的標(biāo)識(shí)字段的值使分片后的各數(shù)據(jù)報(bào)片最后能正確地重裝成為原來(lái)的數(shù)據(jù)報(bào)。 標(biāo)志 (Flag):占3 位,但目前只有2位有意義。 標(biāo)志字段中的最低位記為 MF (More Fragment)。MF=1即表示后面“還有分片”的數(shù)據(jù)報(bào)。MF=0表示這已是若干數(shù)據(jù)報(bào)片中的最后一個(gè)。標(biāo)志字段中間的一位記為 DF(Dont Fragment),意思是“不能分片”。只有當(dāng) DF=0時(shí)才允許分片。 片偏移:占 13位。較長(zhǎng)的分組在分片后,某片在原分組中的相對(duì)位置。也就是說(shuō),相對(duì)用戶(hù)數(shù)據(jù)字段的起點(diǎn),該片從何處開(kāi)始。片偏移以 8個(gè)
6、字節(jié)為偏移單位。這就是說(shuō),每個(gè)分片的長(zhǎng)度一定是 8字節(jié) (64位)的整數(shù)倍。 生存時(shí)間:占 8位,生存時(shí)間字段常用的英文縮寫(xiě)是TTL (Time To Live),其表明數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中的壽命。由發(fā)出數(shù)據(jù)報(bào)的源點(diǎn)設(shè)置這個(gè)字段。其目的是防止無(wú)法交付的數(shù)據(jù)報(bào)無(wú)限制地在因特網(wǎng)中兜圍子,因而白白消耗網(wǎng)絡(luò)資源。最初的設(shè)計(jì)是以秒作為 TTL的單位。每經(jīng)過(guò)一個(gè)路由器時(shí),就把TTL減去數(shù)據(jù)報(bào)在路由器消耗掉的一段時(shí)間。若數(shù)據(jù)報(bào)在路由器消耗的時(shí)間小于 1 秒,就把TTL值減 1。當(dāng) TTL值為 0時(shí),就丟棄這個(gè)數(shù)據(jù)報(bào)。 協(xié)議:占 8 位,協(xié)議字段指出此數(shù)據(jù)報(bào)攜帶的數(shù)據(jù)是使用何種協(xié)議,以便使目的主機(jī)的IP層知道應(yīng)將數(shù)
7、據(jù)部分上交給哪個(gè)處理過(guò)程。 首部檢驗(yàn)和:占 16位。這個(gè)字段只檢驗(yàn)數(shù)據(jù)報(bào)的首部,但不包括數(shù)據(jù)部分。這是因?yàn)閿?shù)據(jù)報(bào)每經(jīng)過(guò)一個(gè)路由器,都要重新計(jì)算一下首都檢驗(yàn)和 (一些字段,如生存時(shí)間、標(biāo)志、片偏移等都可能發(fā)生變化)。不檢驗(yàn)數(shù)據(jù)部分可減少計(jì)算的工作量。 源地址:占32位。 目的地址:占 32位。 2. IP數(shù)據(jù)報(bào)首部的可變部分 IP首都的可變部分就是一個(gè)可選字段。選項(xiàng)字段用來(lái)支持排錯(cuò)、測(cè)量以及安全等措施,內(nèi)容很豐富。此字段的長(zhǎng)度可變,從 1 個(gè)字節(jié)到40個(gè)字節(jié)不等,取決于所選擇的項(xiàng)目。某些選項(xiàng)只需要 1 個(gè)字節(jié),它只包括 1 個(gè)字節(jié)的選項(xiàng)代碼。但還有些選項(xiàng)需要多個(gè)字節(jié),這些選項(xiàng)一個(gè)個(gè)拼接起來(lái),中間
8、不需要有分隔符,最后用全0 的填充字段補(bǔ)齊成為 4字節(jié)的整數(shù)倍。 增加首都的可變部分是為了增加 IP 數(shù)據(jù)報(bào)的功能,但這同時(shí)也使得 IP 數(shù)據(jù)報(bào)的首部長(zhǎng)度成為可變的。這就增加了每一個(gè)路由器處理數(shù)據(jù)報(bào)的開(kāi)銷(xiāo)。實(shí)際上這些選項(xiàng)很少被使用。新的 IPv6就將 IP數(shù)據(jù)報(bào)的首部長(zhǎng)度做成固定的。4、實(shí)現(xiàn)原理及流程圖實(shí)現(xiàn)原理:為了獲取網(wǎng)絡(luò)中的IP數(shù)據(jù)包,必須對(duì)網(wǎng)卡進(jìn)行編程,在這里我們使用套接字(socket)進(jìn)行編程。本程序主要由三部分構(gòu)成:初始化原始套接字,反復(fù)監(jiān)聽(tīng)捕獲數(shù)據(jù)包和解析數(shù)據(jù)包。1. 使用原始套接字/初始化Socket環(huán)境WSADATA wsData;if (WSAStartup(MAKEWOR
9、D(2, 2), &wsData) != 0)printf(WSAStartup failed!);return;/建立初始SocketSOCKET sock;if (sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP) = INVALID_SOCKET)printf(Create socket failed!);return;/設(shè)置IP頭部操作選項(xiàng),flag設(shè)置為trueBOOL flag = true;if (setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag) = SOC
10、KET_ERROR)printf(Setsockopt failed!);return;/獲取本地主機(jī)名char hostName128;if (gethostname(hostName, 100) = SOCKET_ERROR)printf(Gethostname failed!);return;/獲取本地主機(jī)IP地址hostent* pHostIP;if (pHostIP = gethostbyname(hostName) = NULL)printf(Gethostbyname failed!);return;/填充SOCKADDR_IN結(jié)構(gòu)sockaddr_in addr_in;addr
11、_in.sin_addr = *(in_addr*)pHostIP-h_addr_list0;addr_in.sin_family = AF_INET;addr_in.sin_port = htons(6000);/把原始Socket綁定到本地網(wǎng)卡if (bind(sock, (PSOCKADDR)&addr_in, sizeof(addr_in) = SOCKET_ERROR)printf(Bind failed!);return;/設(shè)置SOCK_RAW為SIO_RCVALL,接受所有的IP包DWORD dwValue = 1;DWORD dwBufferLen10;DWORD dwBuff
12、erInLen = 1;DWORD dwBytesReturned = 0;if (WSAIoctl(sock, IO_RCVALL, &dwBufferInLen, sizeof(dwBufferInLen), &dwBufferLen, sizeof(dwBufferLen), &dwBytesReturned, NULL, NULL) = SOCKET_ERROR)printf(Ioctlsocket failed!);return;2. 接收數(shù)據(jù)包/監(jiān)聽(tīng)經(jīng)過(guò)本機(jī)的IP包c(diǎn)har bufferBUFFER_SIZE;printf(Listening on local host.n);wh
13、ile (true)int size = recv(sock, buffer, BUFFER_SIZE, 0);if (size 0)ipparse(stdout, buffer);ipparse(file, buffer);fclose(file);return;3. 定義IP頭部的數(shù)據(jù)結(jié)構(gòu)/定義IP首部數(shù)據(jù)結(jié)構(gòu)typedef struct _IP_HEADERunionBYTE Version;/版本號(hào)(前4比特位)BYTE HdrLen; /IP首部長(zhǎng)度(后4比特位);BYTE ServiceType;/服務(wù)類(lèi)型WORD TotalLen; /總長(zhǎng)度WORD ID; /標(biāo)識(shí)unionWO
14、RD Flags; /標(biāo)志(前3比特位)WORD FragOff; /分片偏移(后13比特位);BYTE TimeToLive; /生命期BYTE Protocol; /協(xié)議類(lèi)型WORD HdrChksum; /16比特位校驗(yàn)和DWORD SrcAddr; /32位比特源IP地址DWORD DstAddr; /32位比特目的IP地址BYTE Options; /選項(xiàng)IP_HEADER;4. IP包的解析/解析IP包的版本信息void getVersion(BYTE b, BYTE &version)version = b 4;/解析IP包的頭部長(zhǎng)度void getIHL(BYTE b, BYT
15、E &length)length = (b&0x0f) * 4;/解析IP包的服務(wù)類(lèi)型char* parseServiceType_getProcedence(BYTE b)switch (b 5)case 7:return Network Control;break;case 6:return internet work Control;break;case 5:return CRITIC/ECP;break;case 4:return Flash Override;break;case 3:return Flash;break;case 2:return Immediate;break;c
16、ase 1:return Priority;break;case 0:return Routine;break;default:return Unknown;/解析IP包的服務(wù)級(jí)別char* parseServiceType_getTOS(BYTE b)b = (b 1) & 0x0f;switch (b)case 0:return Normal service;break;case 1:return Minimize monetary cost;break;case 2:return Maximize reliability;break;case 4:return Maximize thro
17、ughput;break;case 8:return Minimize delay;break;case 15:return Maximize security;break;default:return Unknown;/解析IP包的標(biāo)志位void getFlags(WORD w, BYTE &DF, BYTE &MF)DF = (w 14) & 0x01;MF = (w 13) & 0x01;/解析IP包的分段偏移void getFragOff(WORD w, WORD &fragOff)fragOff = w & 0x1fff;/解析IP包的協(xié)議類(lèi)型char* getProtocol(BYTE Protocol)switch (Protocol)case 1:return ICMP;case 2:return IGMP;case 4:return IP in IP;case 6:return TCP;case 8:return TCP;case 17:return EGP;case 41:return UDP;case 46:return RSV
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)開(kāi)口同步帶項(xiàng)目投資可行性研究報(bào)告
- 麥牙篩行業(yè)深度研究報(bào)告
- 上海戲劇學(xué)院《機(jī)械設(shè)計(jì)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海外國(guó)語(yǔ)大學(xué)《環(huán)境科學(xué)與工程仿真實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025標(biāo)準(zhǔn)版企業(yè)借款合同樣書(shū)
- 乘除法和加減法混合運(yùn)算教學(xué)設(shè)計(jì)
- 工程虧損報(bào)告范文
- 實(shí)踐調(diào)查報(bào)告范文
- 勘測(cè)設(shè)計(jì)報(bào)告范文大全
- 申請(qǐng)報(bào)告范文格式
- 中學(xué)美術(shù)《剪紙藝術(shù)》完整課件
- 涉水作業(yè)安全指導(dǎo)手冊(cè)
- 北京市道德與法治初二上學(xué)期期末試題與參考答案(2024年)
- 【論電子商務(wù)對(duì)現(xiàn)代生活的影響(論文)3300字】
- 專(zhuān)題02整式加減的應(yīng)用(應(yīng)用題專(zhuān)項(xiàng)訓(xùn)練)(滬科版)(原卷版+解析)
- 人教PEP版(2024)三年級(jí)上冊(cè)英語(yǔ)全冊(cè)教案(單元整體教學(xué)設(shè)計(jì))
- TFJPACIA 001-2024 氟石膏規(guī)程規(guī)范
- 醫(yī)院提高住院患者抗菌藥物治療前病原學(xué)送檢率學(xué)習(xí)培訓(xùn)課件
- 2024-2025學(xué)年七年級(jí)英語(yǔ)上冊(cè)第一學(xué)期 期末綜合模擬考試卷(滬教版)(一)
- 10S505 柔性接口給水管道支墩
- DL∕T 939-2016 火力發(fā)電廠(chǎng)鍋爐受熱面管監(jiān)督技術(shù)導(dǎo)則
評(píng)論
0/150
提交評(píng)論