编写计算机程序实现点分十进制的IP.docx
《编写计算机程序实现点分十进制的IP.docx》由会员分享,可在线阅读,更多相关《编写计算机程序实现点分十进制的IP.docx(16页珍藏版)》请在冰豆网上搜索。
编写计算机程序实现点分十进制的IP
目录
一、问题背景概述1
1.1背景概述1
1.2题目要求1
二、协议分析说明分析1
2.1IP地址的分类1
2.2不常用的特殊IP地址1
2.3IP数据报的格式1
2.3.1IP数据报首部的固定部分1
2.3.2IP数据报首部的可变部分1
三、实验方案设计及实现5
3.1.实验方案设计说明5
3.1.1设计原理5
3.1.2基本流程5
3.2实验实现过程说明6
四、程序代码9
五、总结11
附录A 参考文献12
一、问题背景概述
1.1背景概述
在因特网中,IP协议是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。
任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。
IP地址具有唯一性,根据用户性质的不同,可以分为5类。
另外,IP还有进入防护,知识产权,指针寄存器等含义。
在计算机领域中,网络在发送分组是不需要先建立连接,每一个分组(也就是IP数据报)独立发送,与起前后的分组无关(不进行编号),即网络成不提供服务质量的承诺。
也就是说,所传送的分组可能出错、丢失、重复和失序(即不安序到达终点),当然也不保证分组交付的时限。
IP是怎样实现网络互连备,如以太网、分组交换网等,它们相互之间不能互通,不能互通的主要原因是因为它们所传送数据的基本单元(技术上称之为“帧”)的格式不同。
IP协议实际上是一套由软件程序组成的协议软件,它把各种不同“帧”统一转换成“IP数据包”格式,这种转换是因特网的一个最重要的特点,使所有各种计算机都能在因特网上实现互通,即具有“开放性”的特点。
通信协议是为了使计算机网络中不同的设备之间能进行正常的数据通信而预先制定的一套通信主机双方相互了解和共同遵守的格式和约定。
由网络互联协议IP和传输控制协议TCP一起构成的TCPΠIP协议,已成为事实上的网络互联协议标准,几乎所有的WAN和LAN都支持该协议。
1.2题目要求
题目是《编写计算机程序,实现点分十进制的IP地址标识方法》,要求是“从IP数据报头中取出源和目的地址,将它们以点分十进制表示输出”。
二、协议分析说明分析
2.1IP地址的分类
IP地址是一种层次型地址,分为网络标识和主机标识两个部分。
因特网中每个主机和路由器都有一个IP地址,来对它们的网络和主机号进行编码,这种编码是唯一的,任何两个不同的主机不会有相同的IP地址、所有的IP地址都是32位,在IP数据报的源站地址和目的站地址都用到了IP地址,其格式如图3所示。
连接到多个网络上的主机在每个网络上都有不同的IP地址。
A类IP地址一个A类IP地址是指,在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。
如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。
A类IP地址中网络的标识长度为7位,主机标识的长度为24位,A类网络地址数量较少,可以用于主机数达1600多万台的大型网络。
A类IP地址地址范围1.0.0.1-126.255.255.254(二进制表示为:
00000001000000000000000000000001-01111110111111111111111111111110)。
B类IP地址一个B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码,。
如果用二进制表示IP地址的话,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。
B类IP地址中网络的标识长度为14位,主机标识的长度为16位,B类网络地址适用于中等规模的网络,每个网络所能容纳的计算机数为6万多台。
B类IP地址地址范围128.1.0.1-191.254.255.254(二进制表示为:
10000000000000010000000000000001-10111111111111101111111111111110)。
C类IP地址一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。
如果用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。
C类IP地址中网络的标识长度为21位,主机标识的长度为8位,C类网络地址数量较多,适用于小规模的局域网络,每个网络最多只能包含254台计算机。
C类IP地址范围192.0.1.1-223.255.254.254(二进制表示为:
11000000000000000000000100000001-11011111111111111111111011111110)。
除了以上三种类型的IP地址外,还有几种特殊类型的IP地址,TCP/IP协议规定,凡IP地址中的第一个字节以“lll0”开始的地址都叫多点广播地址。
因此,任何第一个字节大于223小于240的IP地址是多点广播地址;IP地址中的每一个字节都为0的地址(“0.0.0.0”)对应于当前主机;IP地址中的每一个字节都为1的IP地址(“255.255.255.255”)是当前子网的广播地址;IP地址中凡是以“llll0”的地址都留着将来作为特殊用途使用;IP地址中不能以十进制“127”作为开头,该类地址中数字127.0.0.1到127.1.1.1用于回路测试,同时网络ID的第一个6位组也不能全置为“0”,全“0”表示本地网络。
D类IP地址第一个字节以“1110”开始,它是一个专门保留的地址。
它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。
多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
地址范围224.0.0.1-239.255.255.254。
E类IP地址以“11110”开始,保留用于将来和实验使用。
2.2不常用的特殊IP地址
网络号
主机号
源地址使用
目的地址使用
代表的意思
0
0
可以
不可
在本网络上的主机
0
Host-id
可以
不可
在本网络上的某个主机host-id
全1
全1
不可
可以
只在本网络上进行广播
Net-id
全1
不可
可以
对net-id上的所有主机进行广播
127
非全0或全1的任何数
可以
可以
用作本地软件环回测试之用
2.3IP数据报的格式
2.3.1IP数据报首部的固定部分
(1)版本占4为,指IP协议的版本,通信双方使用的IP协议的版本必须一致。
目前广泛使用的IP协议版本号为4(即IPV4)。
(2)首部长度占4位,可表示的最大十进制数值是15,请注意这个字段所表示数的单位是32位字(1个32位字长是4字节)。
当IP的首部长度为1111时,首部长度就达到最大值60字节,当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。
(3)区分服务占8位,用来获得更好的服务,这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。
(4)总长度总长度指首部和数据只和的长度,单位为字节。
总长度字段为16位,因此数据报的最大长度为65535字节。
(5)标识占16位。
IP软件在存储器中维持一个计数器,没产生一个数据报,计数器就加1,并将此值赋给标识字段。
(6)标志占3位,标志字段中的最低位记为MF。
MF=1即表示后面“还有分片”的数据报,MF=0表示这已是若干数据报片中的最后一个。
标志字段中间的以为记为DF,意思是“不能分片”,只有当DF=0时才允许分片。
(7)片偏移占13位。
片偏移指出:
较长的分组在分组后,某片在源分组中的相对位置。
(8)生存时间占8位,生存时间字段常用的英文缩写是TTL,表明是数据报在网络中的寿命。
(9)协议占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
(10)首部检验和占16位,这个字段只检验数报的首部,但不包括数据报部分。
这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和。
不检验数据部分可减少计算的工作量。
为了进一步减少计算检验和的工作量,IP首部的检验和不采用复杂的CRC检验码的采用简单的计算方法。
(11)源地址占32位。
(12)目的地址占32位。
2.3.2IP数据报首部的可变部分
IP首部的可变部分就是一个选项字段,选项字段用来支持排错、检测以及安全等措施,内容很丰富。
此字段的长度可变,从1字节到40个字节不等,取决与所选择的项目。
某些选项项目只需要1个字节,它只包括1字节的选项代码。
但还有些选香港需要多个字节,这些选项一个个拼接起来,中间不需要有分隔,最后用全0的填充自读那补充成为4字节的整数倍。
三、实验方案设计及实现
3.1实验方案设计说明
3.1.1设计原理
3.1.2程序基本流程
3.2实验实现过程说明
在数据传输过程中,网络层把运输层产生报文段或用户数据报封装成数据帧,然后在加上IP数据报的首部信息再组成IP数据报传给数据链路层,再加上数据层的首部信息和尾部信息,最后交给物理层在物理传输媒体上进行比特流的传输。
接受方对接受到的数据逐层解封,去掉首部,直到找到IP数据报为止,再从IP数据报的首部信息中取出源地址和目的地址,取出来的源地址和目的地址全是二进制的机器语言,把取出的二进制地址转化为十进制地址,并将他们以十进制表示输出。
下面的图3-1,图3-2,图3-3,图3-4,图3-5是验证从任意的IP数据报中取出任意的五个源地址和目的地址输出的过程,具体结果如下图:
图3-1
图3-2
图3-3
图3-4
图3-5
四、程序代码
#include"math.h"
#include
#include"stdio.h"
#include
voidgetid(intad[32])//用getid函数表示二进制和十进制之间的转换
{
intp=0,q=0,r=0,t=0;//定义四个整形变量表示IP数据报的四个字节
inti;
for(i=0;i<8;i++)
{
p+=pow(2,7-i%8)*ad[i];//二进制转化为十进制过程中,二进制的最高位为2的7次幂依次降序到0次幂,在减去i%8求余
}
printf("%d.",p);//表示输出值
for(i=8;i<16;i++)
{
q+=pow(2,7-i%8)*ad[i];//相应二进制数转化为十进制数
}
printf("%d.",q);
for(i=16;i<24;i++)
{
r+=pow(2,7-i%8)*ad[i];
}
printf("%d.",r);
for(i=24;i<32;i++)
{
t+=pow(2,7-i%8)*ad[i];}
printf("%d",t);
}
voidmain()
{
inta[1500];
inti,j;
intm=0,n=0;
intb[32];
intc[32];
voidgetid(intad[32]);//调用getid函数
srand((unsigned)time(NULL));//表示从IP数据报中取出源地址b和目的地址c
for(i=0;i<1500;i++)//IP数据报最大长度为1500字节,每个字节为8个比特流
{
a[i]=rand()%2;//随机产生一个0、1的数
printf("%d",a[i]);
}
for(j=96;j<=127;j++)//IP数据报的源地址(含32位)前面还有三个部分,共32*3=96位,所以源地址从96开始
{b[m]=a[j];
m++;}
for(j=128;j<=159;j++)//目的地址(含32位)从128位开始
{
c[n]=a[j];
n++;
}
printf("\n源地址是:
");//输出十进制地址
getid(b);
printf("\n目的地址是:
");
getid(c);
printf("\n");
}
五、总结
以上就是我这次课程设计的全部内容,从这次课程设计中我们真正感觉到了网络层传输的复杂性,IP协议的重要性。
对于我们来说这个课程设计难度有点大,在平时过程中我们学的都是理论知识,而动手能力很差,把知识与实际结合起来的机会更少。
通过这次课程设计我们深刻理解了点分十进制记法和更深层次的认识了IP数据报的格式,同时学到了一些在编程方面的知识,很多是自己没有接触过的东西。
在编程过程中遇到问题时,通过查找资料,或者XX搜索解决。
通过本次课程设计,我们更充分的理解了IP协议的源地址和目的地址二进制转化为十进制的过程,在实验过程中也充实了以前不懂的知识点,增强了自己的动手能力,也明白了编程的重要性。
一个软件的好坏不仅仅在于算法的先进,软件是否能够满足用户需求,操作是否简单也是很重要的一个因素。
这个程序我们已经尽力做了,但肯定存在很多的不足之处,希望老师谅解。
附录A 参考文献
文末参考文献的著录引用应做到规范完整,并符合国家的相关标准。
根据GB3469国家标准规定,被引用的参考文献类型标识为单字母,各种参数文献的类型标识字母如下表所示:
参考文献类型
专著
论文集
(单篇论文)
报纸文章
期刊文章
文献类型标识
M
C
(A)
N
J
参考文献类型
学位论文
报告
标准
专利
其它文献
文献类型标识
D
R
S
P
Z
电子文献类型的参考文献,建议以下列字母作为标识:
数据库[DB],计算机程序[CP],电子公告[EB]。
一般性的网页文章建议以[EB/OL]标识(在线的电子文章)。
要求引用的参考文献应不少于3篇,引用列举条目的具体要求为:
参考文献的序号左顶格,并用数字加方括号表示,如[1],[2],…,以与正文中的指示序号一致。
每一参考文献条目的最后均以“.”结束。
各类参考文献条目的编排格式以及示例如下:
1.连续出版物
[序号]主要责任者.文献题名[J].刊名,出版年份,卷号(期号):
起止页码.例如:
[1]毛峡,丁玉宽.图像的情感特征分析及其和谐感评价[J].电子学报,2001,29(12A):
1923-1927.
2.专著
[序号]主要责任者.文献题名[M].出版地:
出版者,出版年:
起止页码.例如:
[2]刘国梁,王成.图书馆史研究[M].北京:
高等教育出版社,1979:
15-18,31.
3.会议论文集
[序号]主要责任者.文献题名[A]//主编.论文集名[C].出版地:
出版者,出版年:
起止页码.例如:
[3]毛峡,孙云.和谐图案自动的生成研究[A].第一届中国情感计算及智能交互学术会议论文集[C].北京:
中国科学院自动化研究所,2003:
277-281.
4.学位论文
[序号]主要责任者.文献题名[D].保存地:
保存单位,年份.例如:
[4]张京.水利水电理论[D].武汉:
武汉大学,1997.
5.报告
[序号]主要责任者.文献题名[R].报告地:
报告会主办单位,年份.例如:
[5]冯宜章.核反应堆压力容器的LBB分析[R].北京:
清华大学核能技术研究院,1997.
6.专利文献
[序号]专利所有者.专利题名[P].专利国别:
专利号,发布日期.例如:
[6]姜锡州.一种温热外敷药制备方案[P].中国专利:
881056078,1983-08-12.
7.国际、国家标准
[序号]标准代号,标准名称[S].出版地:
出版者,出版年.例如:
[7]GB/T16159-1996,汉语拼音正词法基本规则[S].北京:
中国标准出版社,1996.
8.报纸文章
[序号]主要责任者.文献题名[N].报纸名,出版日期(版次).例如:
[8]毛峡.情感工学破解‘舒服’之谜[N].光明日报,2000-4-17(B1).
9.电子文献
[序号]主要责任者.电子文献题名[电子文献及载体类型标识].电子文献的出处或可获得地址,发表或更新日期/引用日期(任选).例如:
[9]王明亮.关于中国学术期刊标准化数据库系统工程的进展[EB/OL].
[1]谢希仁.计算机网络(第五版).北京:
电子工业出版社,2008.1
[2]李际.思科网络技术学院教程.北京:
人民邮电出版社,2001
[3]郑阿奇.VC++教程.北京:
机械工业出版社,2008.8
[4]严蔚敏.数据结构.北京:
清华大学出版社,2008.3
[5]王晓东.计算机算法分析与设计.北京:
电子工业出版社,2011.6