试验四IP包的分片和重组(共8页).doc
《试验四IP包的分片和重组(共8页).doc》由会员分享,可在线阅读,更多相关《试验四IP包的分片和重组(共8页).doc(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上实验四 IP包的分片和重组实验目的通过实验掌握IP数据包的分片和重组的方法。实验内容对一个较长的IP分组进行分片,然后再将所有的分片重新组装成一个IP分组。实验要求(1) 从数据包文件如“packet.pkt”中读取分组,并输入一个整数值作为MTU。首先计算分组头校验和,判断分组接收是否正确,然后检查分组长度是否超过MTU。如果长度超过MTU,则检查DF位:若DF位为1,打印出错信息;否则对IP包进行分片,生成各分片的文件,如Fragment1.pkt、Fragment2.pkt等。(2) 读取上一步得到的各分片文件,首先计算头校验,检查分片是否正确;然后将各个分片组
2、装成一个完整的分组,并保存在一个数据包文件如“MergedPkt.pkt”中;比较MergePkt.pkt与原始的packet.pkt的数据部分内容,以检验分组分片和重组是否成功。尝试不按顺序读入各个片段,验证重组程序是否仍然能够正确重组分组。实验提示(1) IP数据包的格式为:与数据报的分片与重组有关的字段是:总长度、标识、标志、分片偏移、TTL、16位首部校验和。总长度:总长度以字节为单位,指该IP数据报的总大小,包括首部的20字节以及实际的来自应用层的数据。判断一个数据包是否要进行分片,就是将收到的数据报的总长度与MTU进行比较。如果总长度大于MTU,就需要进行分片。标识:这个16位的字
3、段标识从源主机发出的数据报。当数据报离开源主机时,这个标识与源IP地址唯一地定义了这个数据报。为了保证唯一性,IP协议使用了一个计数器来标识数据报。当IP协议发送数据报时,就把这个计数器的当前值复制到标识字段中,并把这个计数器的值加1。当数据报被分片时,标识字段的值就被复制到所有的分片中,即同一个数据报的所有分片具有相同的标识。这个标识主要是用于在分片组装的时候对每个分片属于哪个数据报进行判断。本次实验只考虑对同一个数据报进行分片,并把这些分片重新组装,因此不需要做这个判断,只要直接把标识拷贝到各分片中即可。标志:这是一个3位的字段,如下图所示:第一个比特保留为以后用;第二个比特是不分片(Do
4、 not fragment)位。若这个值是1,机器就不能把该数据报进行分片。若无法把这个数据报通过任何可用的物理网络进行转发,就丢弃这个数据报,并向源主机发送ICMP差错报文。若这个值为0,则在需要的时候可把这个数据报进行分片。第三个比特是还有分片(More fragment),若这个值是1,则表示这个数据报不是最后的分片,这个分片后面还有更多的分片。若这个值是0,则表示这已是最后的或者是唯一的分片。分片偏移:这个13位的字段表示这个分片在整个数据报中的相对位置。是在原始数据报中的数据偏移量,以8字节为度量单位。这样做是因为分片偏移字段只有13bit长,它不能表示超过8191的字节数。而IP数
5、据报最大的长度为65535字节,因此按8字节为单位可以用13位来表示更多的字节。把数据报进行分片的主机或路由器必须选择每个分片的长度,使得这个长度可以被8整除。如下图所示,一个具有4000字节的数据报,当MTU=1420字节的时候,被划分为3个分片,每个分片长度为1400字节,1400字节是可以被8整除的。为减少分片的数量,每个分片的长度应尽可能大。为用片偏移表示片段的起始位置,除最后一个分片外,其它分片的长度(数据部分,不包括IP头)应能被8整除。如MTU=505的时候,除去20字节IP头,可以传输的最大数据段长度为485字节,但可被8整除及不不超过485的最大整数为480,需要按480来进
6、行分片。TTL:在分片的时候需要对原数据报的TTL进行减1操作,组装的时候不需要此操作。首部检验和:对于每一个分片,设置好各自的总长度、标识、标志、片偏移、TTL之后,需要重新对该IP报头重新计算校验和。(2) IP数据报头的C语言定义可以用类似如下的数据结构:typedef struct tagIPHDRunsigned char VIHL;/Version and IHLunsigned char TOS;/Type Of Serviceshort TotalLen;/Total Lengthshort ID;/IDentificationshort FlagOff;/Flags and
7、Fragment Offsetunsigned char TTL;/Time To Liveunsigned char Protocol;/Protocolunsigned short Checksum;/Checksumunsigned long SrcAddr;/Source Addressunsigned long DstAddr;/Destination AddressIPHDR,*PIPHDR;对各个域进行操作时要注意网络字节序与主机字节序的不同。对于8位的域,如TOS、TTL等不存这个问题。但对于16位的域,如总长度TotalLen,从二进制文件中读出来的TotalLen域从左到右
8、为0000 0000 0010 0100(即0x0024),即38,但如果直接unsigned short length=IPhead.TotalLen时这个值不等于38。这主要是由于多字节数字在内存中存储方式不同造成的,即大尾端小尾端的问题。解决此问题可以用ntohs函数来解决,即unsigned short length=ntohs(IPhead.TotalLen),时length就等于38了。在操作16位的总长度和16位的首部校验和的时候需要注意这一点,不然使用位运算的时候会出错。同样对于32位源地址/目的地址也有这样的问题,但本次实验不涉及IP地址的操作。(3) 给定的数据文件如pac
9、ket.pkt是二进制文件,不能用普通的文本浏览器浏览,可以使用如UltraEdit或WinHex等二进制浏览器打开,其中不带选项的分组头为20字节,如图所示:即IP头为45 00 65 1A 37 A4 00 00 7F 06 EC 30D3 56 92 89 D2 2D 7A FB各个域写成二进制形式对应到IP头的各个域即可。在程序中打开IP数据报文件的时候需要以二进制的方式打开,可以使用fstream的文件流来进行文件读取操作。#include ifstream SrcFileName(argv2,ios:in|ios:binary);IPHDR IPHead;Int IPHeadSiz
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 试验 IP 分片 重组
限制150内