- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(IP分段重组
实验四IP包的分片和重组
实验目的
通过实验掌握IP数据包的分片和重组的方法。实验内容
一个较长的IP分组分片重组。实验要求
(1) 从数据包文件如“packet.pkt”中读取分组,并输入一个整数值作为MTU分组头校验和分组是否正检查分组是否超过MTU如果超过MTU,则检查D位打印出错信息否则对IP包进行分片,生成各分片的文件,如Fragment1.pkt、Fragment2.pkt等。
(2)上一步得到的各分片各个片组装成一个完整的分组,并保存在一个数据包文件如“MergedPkt.pkt”中比较MergePkt.pkt与原始的packet.pkt的数据部分内容,以验分组分片和重组是否成功尝试不按顺序读入各个片段,验证重组程序是否仍然能够正确重组分组。实验提示
(1) IP数据包的格式为:
与数据报的分片与重有关的字段是:总长度、标识、标志、分片偏移、TTL、16位首部校验和。
总长度:总长度以字节为单位,指该IP数据报的总大小,包括首部的20字节以及实际的来自应用层的数据。判断一个数据包是否要进行分片将收到的数据报的总长度与MTU进行比较如果总长度大于MTU,需要进行分片。
标识:这个16位的字段标从源主机发出的数据报。当数据报离开源主机时,这个标识与源IP地址唯一地定义这个数据报。为了保证唯一性,IP协议使用了一个计数器来标数据报。当IP协议发送数据报时,就把这个计数器的当前值复制到标识字段中,并把这个计数器的值加1。当数据报被分片时,标识字段的值就被复制到所有的分片中即同一个数据报的所有分片具有相同的标识。这个标识主要是用于在分片组装的时候对每个分片属于哪个数据报进行判断。本次实验只考虑对同一个数据报进行分片,并把这些分片重新组装,因此不需要做这个判断,只直接把标识拷贝到各分片中即可。
标志:这是一个3位的字段,如下图所示:
第一个比特保留为以后用;第二个比特是不分片(Do not fragment)位。若这个值是1,机器就不能把该数据报进行分片。若无法把这个数据报通过任何可用的物理网络进行转发,就丢弃这个数据报,并向源主机发送ICMP差错报文。若这个值为0,则在需要的时候可把这个数据报进行分片。第三个比特是还有分片(More fragment),若这个值是1,则表示这个数据报不是最后的分片,这个分片后面还有更多的分片。若这个值是0,则表示这已是最后的或者是唯一的分片。
分片偏移:这个13位的字段表示这个分片在整个数据报中的相对位置。是在原始数据报中的数据偏移量,以8字节为度量单位。这样做是因为分片偏移字段只有13bit长,它不能表示超过8191的字节数。而IP数据报最大的长度为65535字节,因此按8字节为可以用13位来表示更多的字节。把数据报进行分片的主机或路由器必须选择每个分片的长度,使得这个长度可以被8整除。
如下图所示,一个具有4000字节的数据报,当MTU=1420字节的时候,被划分为3个分片,每个分片长度为1400字节,1400字节是可以被8整除的。
片偏移表示片段的起始位置,的长度(数据部分,不包括IP头)被8整除。如MTU=505的时候,除去20字节IP头,可以传输的最大数据段长度为485字节,但不超过485最大整数为480,需要按480来进行分片。
TTL:在分片的时候需要对原数据报的TTL进行减1操作,组装的时候不需要此操作。
首部检验和:对于每一个分片,设置好各自的总长度、标识、标志、片偏移、TTL之后,需要重新对该IP报头重新计算校验和。
(2) IP数据报头的C语言定义可以用类似如下的数据结构:
typedef struct tagIPHDR
{
unsigned char VIHL; //Version and IHL
unsigned char TOS; //Type Of Service
short TotalLen; //Total Length
short ID; //IDentification
short FlagOff; //Flags and Fragment Offset
unsigned char TTL; //Time To Live
unsigned char Protocol; //Protocol
unsigned short Checksum; //Checksum
unsigned long SrcAddr; //Source Address
unsigned long DstAddr; //Destination Address
}IPHDR,*PIPHDR;
对各个域进行操作时要注意网络字节序与主机字节序的不同。对于8位的域如TOS、TTL等不存这个问题但对于16位的域如总长度TotalLe,从二
文档评论(0)