文档视界 最新最全的文档下载
当前位置:文档视界 › 从IP数据报中解析源目的地址

从IP数据报中解析源目的地址

从IP数据报中解析源目的地址
从IP数据报中解析源目的地址

从I P数据报中解析源

目的地址

-CAL-FENGHAI.-(YICAI)-Company One1

青岛农业大学

理学与信息科学学院

计算机网络综合实习报告

题目从IP数据报中解析源/目的地址专业计算机科学与技术

学号

姓名

指导教师

日期

目录

一、设计任务和目的.............................................................................................. 错误!未定义书签。

二、设计要求.......................................................................................................... 错误!未定义书签。

三、设计内容.......................................................................................................... 错误!未定义书签。

原理概述: ................................................................................................................ 错误!未定义书签。

点分十进制表示法:................................................................................... 错误!未定义书签。

IP数据报格式:.......................................................................................... 错误!未定义书签。

运行结果及分析.................................................................................................... 错误!未定义书签。

程序运行及截图............................................................................................ 错误!未定义书签。

分析............................................................................................................... 错误!未定义书签。

四、设计方案改进及建议...................................................................................... 错误!未定义书签。

五、总结体会.......................................................................................................... 错误!未定义书签。

六、主要参考文献.................................................................................................. 错误!未定义书签。

七、附录.................................................................................................................. 错误!未定义书签。

附录1 程序流程图................................................................................................. 错误!未定义书签。

附录2 程序源代码及解释..................................................................................... 错误!未定义书签。

一、设计任务和目的

设计一个解析IP数据包的程序,并根据这个程序,从IP数据报头中解析出源地址和目的地址等相关问题,从而对IP层的工作原理有更好的理解和认识。

通过实际操作,加深对计算机网络的理解,了解计算机网络应用的灵活性,加深对IP数据报格式的了解,点分十进制理解,巩固所学习的C语言。

二、设计要求

编写计算机程序,从网络捕获数据包,从IP数据报头中解析出源地址和目的地址,将它们以点分十进制形式输出。

三、设计内容

原理概述:

3.1.1 点分十进制表示法:

对主机或路由器来说,ip地址都是32位的二进制代码,为了提高可读性,我们常常把32位的ip地址中的每8位用其等效的十进制数字表示,并且在这些数字之间加上一个点,这就叫做点分十进制表示法(dotted decimal notation)。例如:一个ip地址:0 00001011 00000011 00011111 用点分十进制表示为:读起来要方便得多。

3.1.2 IP数据报格式:

IP协议所处理的数据单元称为IP数据报。其格式如下:

图3-1 数据报格式图[1]

IP数据报由首部和数据两部分组成,首部又分为定长部分和变长部分。

◆版本(VER):4位,表示数据报的IP协议版本,当前的IP协议版本号为4,即IPv4;下一代网络协议IPv6,版本号为6.

◆首部长度(HLEN):4位,表示以字长(4字节)为单位的数据报首部长度。

◆服务类型(SERVICE TYPE): 8位,规定本数据报的处理方式。前三位是优先级,0-7,0表示最低,7最高(最重要),但目前的IPv4没有使用优先级。后4位是TOS,表示本数据报在传输过程中所希望得到的服务,D--最小延迟(minimize delay);T--最大吞吐率(maximize throughout);R--最高可靠性(maximize reliability);C--最低成本(minimize cost)。

值得注意的有2点:

①服务类型代表用户的希望,并不具有强制性,目前许多设备TCP/IP中不支持服务类型特性。

②在D、T、R、C这4个参数中只能设置其中一个。

◆数据报总长度:在IP数据报封装到以太网帧中进行传输时很有用.

◆标识(IDENTIFICATION):16位每个IP数据报都有一个本地唯一的标识符,它由信源机赋予IP数据报。每次自动加1.

◆标志(FLAGS):3位,表示该IP数据报是否允许分片以及是否最后一片。

◆片偏移(FRAGMENTATION OFFSET):表示本片数据在他所属原始数据报数据区的偏移量。

◆生存时间(time to live,TTL): 8位,

◆协议(PROTOCOL):8位,指明被IP数据报封装的协

议:ICMP=1,IGMP=2,TCP=6,EGP=8,UDP=17,OSPF=89.

◆首部校验和(HEADER CHECKSUM):16位,保证首部数据完整性。

◆源IP地址(SOURCE ADDRESS):32位(IPv4中),发送方源地址。

◆目的地址(DESTINATION ADDRESS): 32位(IPv4中),最总接收方IP地址。

◆ IP选项(IP OPTIONS):变长字段,传输数据报时的附加功能。

本实验的功能主要是实现将32位的二进制表示成十进制数

图3-2 IP组成结构图[2]

运行结果及分析

3.2.1程序运行及截图

图3-2-1 程序运行图

图3-2-2 运行结果图

3.2.2 分析

IP数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍。对于

IPv4,4位版本字段是4。4位首部长度的数值是以4字节为单位的,最小值为5,也就是说首部长度最小是4x5=20字节,也就是不带任何选项的IP首部,4位能表示的最

大值是15,也就是说首部长度最大是60字节。8位TOS字段有3个位用来指定IP数据报的优先级(目前已经废弃不用),还有4个位表示可选的服务类型(最小延迟、最大呑吐量、最大可靠性、最小成本),还有一个位总是0。总长度是整个数据报(包括IP首部和IP层payload)的字节数。每传一个IP数据报,16位的标识加1,可用于分片和重新组装数据报。3位标志和13位片偏移用于分片。TTL(Time to live)是这样用的:源主机为数据包设定一个生存时间,比如64,每过一个路由器就把该值减1,如果减到0就表示路由已经太长了仍然找不到目的主机的网络,就丢弃该包,因此这个生存时间的单位不是秒,而是跳(hop)。协议字段指示上层协议是TCP、UDP、ICMP 还有IGMP。然后是校验和,只校验IP首部,数据的校验由更高层协议负责。IPv4的IP 地址长度为32位。选项字段的解释从略。

四、设计方案改进及建议

首先理解点分十进制表示方法的运用,理解IP数据报的格式,利用C语言设计程序以点分十进制表示输出IP数据报头源/目的地址。

用C语言里的随机数生成指令生成32位的二进制数,作为源操作数,再生成32位二进制数作为目的操作数,用编程实现将二进制数转化成十进制数,以点分的形式输出在屏幕上。

五、总结体会

经过实习,通过实际操作,对计算机网络加深了理解。才知道计算机网络的可以应用的很灵活,而且加深了对IP数据报格式的了解,点分十进制理解,而且对于C语言也进行了巩固。

在实习中遇到了许多的困难,但是经过努力最终解决了这些困难,让我认识到了坚持的重要性。总的来说通过实习是我收获不小,也让我认识到了认真学习知识的重要性。希望学校以后多提供这样的机会。

本次实习,其目的是将以前所学的计算机网络理论知识上升为实践,在编程的基础上进一步了解计算机通信交流以及组网的方法,实践就要求对知识的掌握更加的系统化。在实习之初,仔细的查找了相关的资料,了解与本实习有关的知识,对IP数据报报头的格式更进一步的复习和掌握,并查找最前沿的资料充实自己,力求将自己的实习做得的更加全面,在实习的准备过程中了解到,在实际的网络管理中大多使用的sniffer软件对流经网络的数据进行抓取和处理以及分析的过程也可以通过软件的设置

将所需数据显示在终端上,本实验所要求处理的任务是将IP数据报报头中的源和目的IP地址以点分十进制的形式输出,程序的实现比较简单,结合以前C语言的基础和编程方法使用随机数生成指令,以及调用C语言库函数实现将二进制的源和目的IP地址转化为点分十进制。

在实验过程中曾试图使用套接字编程实现数据包的抓取,然后使用解析程序分析数据报的报头,但是在具体的实现过程中由于现在使用的VC++平台不包含库文件,所以程序没有得到验证,但也在思考和设计的过程中学到了很多知识。

六、主要参考文献

[1] 谢希仁《计算机网络》(第5版)电子工业出版社 2008

[2] 殷肖川《网络编程与开发技术》西安交通大学出版社 2003

七、附录

附录1 程序流程图

图7-1 程序流程图

附录2 程序源代码及解释

#include""

#include""

#include<>

#include<>

void getid(int ad[32]) /*定义一个数组名为ad的含有32个元素的整型数组*/

{

int p=0,q=0,r=0,t=0;

int i;

for(i=0;i<8;i++)

{p+=pow(2,7-i%8)*ad[i];} /*p=p+(2^(7-i%8))*ad[i]*/

printf("%d.",p);

for(i=8;i<16;i++)

{q+=pow(2,7-i%8)*ad[i];} /*q=q+(2^(7-i%8))*ad[i]*/

printf("%d.",q);

for(i=16;i<24;i++)

{r+=pow(2,7-i%8)*ad[i];} /*r=r+(2^(7-i%8))*ad[i]*/

printf("%d.",r);

for(i=24;i<32;i++)

{t+=pow(2,7-i%8)*ad[i];} /*t=t+(2^(7-i%8))*ad[i]*/

printf("%d",t);

}

void main() /*主函数*/

{

int a[1500];

int i,j;

int m=0,n=0;

int b[32];

int c[32];

void getid(int ad[32]); /*数组ad不用返回值*/

srand((unsigned) time(NULL)); /*获得当前系统时间的函数,包含在头文件中前面的unsigned是把time强制转换为unsigned int类型,然后使用这个作为种子提供给srand 函数*/

for(i=0;i<1500;i++)

{

a[i]=rand()%2;

printf("%d",a[i]);

}

for(j=96;j<=127;j++)

{b[m]=a[j];

m++;}

for(j=128;j<=159;j++)

{c[n]=a[j];

n++;}

printf("\n源地址是:"); /*结果输出*/

getid(b);

printf("\n目的地址是:");

getid(c);

}

相关文档