论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
内容摘要
IP协议(网际协议),是TCP/IP 协议族中最为核心的协议。所有的数据在此协议机制下都以IP数据报的格式传输。当分组过大不适合在所选硬件接口(即不同网络)上发送时,就要对其分片。在目的主机上再把所有分片组装成一个完整的数据报,提交给上层协议处理。本次设计开发工具为Turboc2.o+win2000,由我们3人独立完成,采用结构化设计思想完成对所有分片的重装,实现IP协议的重装模快。
(一)IP协议重装原理及功能分析
1:设计背景
我们知道,每一个数据链路层都有自己的帧格式,在格式里面规定了数据的最大长度,即MTU。当数据报封装成帧时,长度都应该小于此长度,因此,为了适应不同网络,就要对IP数据报进行分片,分片带来的问题就是要对分片进行重装。
2:重装依据—>IP数据报首部
0 15 16 31
4位版本 4位首部长度 8位TOS 16位总长度(字节)
16位标识 3位标志 13位片偏移
8位TTL 8位协议 16位首部检验和
32位源IP地址
32位目的IP地址
32位选项
数据
(图1)IP首部
首部共20字节。
把一份IP数据报分片后,只有到达目的地才进行重新组装。重新组装由目的端的IP层来完成,其目的是分片与重新组装过程对传输层是透明的。如图(1)IP首部为分片后的重装提供了必要的信息:首先,其标识字段包含一个唯一的值,该值在分片后被复制到每个片中;其次,标志字段由3个1bit组成,比特0是保留的,必须为0,比特1是“不分片”,比特2是表示“更多的片”标志,标志字段其它13bit指出该片偏移原始数据报开始处的位置,以8字节单元计算,因此,除最后一个分片外,其他每个分片都望是一个8字节倍数的数据,从而使后面的分片从8字节开始。当数据被分片后,片总长要改为该片的长度。当IP数据报被分片后,每个片都有自己的首部,这样在目的端就有足够的信息来组装这些数据报分片。
(转载自http://www.NSEAC.com中国科教评价网)
ST SA DI To F
……….
——>链表
图(2)重装表
——>链表
ST:状态;SA:源址,DI:数据报ID;TO:超时;F:分片
(二)数据结构定义及处理流程
1:变量定义:
数据报首部:
数据报首部 说明
ip_id 标识字段
ip_off 标志字段
IP_DF 标志字段的”不分片”标志
IP_MF “更多分片“标志
ip_src 源地址 您可以访问中国科教评价网(www.NsEac.com)查看更多相关的文章。
ip_dst 目的地址
ip_p 协议值
ip_len 数据报长度
记数统计量:
ipstat成员 说明
ips_cantfrag 要求分片但被DF禁止而没有发送的数据报报数
ips_odropped 内存不足而被丢弃的分组数
ips_ofragments 被发送的分组数
ips_fragmented 未输出的分片的分组数
全局变量:
ipq:类型Struct,说明—>重装表
2:函数设计:
函数 说明
ipintr() 接收分片并交给ip_reass()处理,最后由它把封装好的数据报传给上层
ip_reass() 接受来自ipintr()的分片,并对其进行重装,最后把重装好的数据报交给ipintr()函数
3用到的数据结构以及必要的说明:
ipq(重装表)结构:
struct ipq{
struct ipq *next,*prev; /*重组报头*/
char ipq_tll; /*重装生存时间*/
char ipq_p; /*此片用到的协议*/
short ipq_id; /*重装序列号*/
struct ipastrag *ipq_next,*ipq_prve; /*分片的IP报头*/
struct in_addr, ipq_src,