- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编写计算机程序,从IP数据报头中抽出源和目的地址,将它们一点分十进制表示输出
计算机网络与通信实习报告
设 计 题 目
学生专业班级 通信工程2007级2班
学生姓名(学号)
指 导 教 师 成 时 间
实 习(设计)地点 信息学院机房
2010 年5月20日
实习题目:
编写一个计算机程序,从IP数据报包头中抽出源和目的IP地址,将它们以点分十进制的形式表示出
原理概述:
IP协议特点IP协议位于网络层,是因特网的核心协议,除了ARP和RARP报文外,几乎所有的数据都要经过IP协议进行发送。由于IP协议在网络层中具有重要地位,人们又将TCP/IP协议的网络层称为IP层。
IP协议是不可靠的无连接数据报协议,提高尽力而为的传输服务,具有一下特点:
是点对点协议,虽然IP数据报携带源IP和目的IP地址,但进行数据传输时的对等实体一定相邻设备(同一网络中)的对等实体。
IP协议不保证传输的可靠性,不对数据进行差错校验和跟踪,可靠性有IP的上层TCP协议加以保证。
IP协议提供无连接数据报服务,各个数据报独立传输,可能沿着不同路径到达目的地,也可能不按序到达目的地。
正因为IP协议采用尽力传输的思想,所以IP协议的效率非常高,实现也简单。IP层向下要面对各种不同的物理网络,向上却提供一个同一的数据传输服务。通过IP数据报实现了物理数据帧的同一,IP层达到了向上屏蔽底层差异的目的。
IP数据报
IP协议所处理的数据单元称为IP数据报。其格式如下:
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):变长字段,传输数据报时的附加功能。
编程原理:
用C语言里的随机数生成指令生成32位的二进制数,作为源操作数,再生成32位二进制数作为目的操作数,用编程实现将二进制数转化成十进制数,以点分的形式输出在屏幕上
流程图:
编程程序:
#includestdio.h
#includemath.h
#includetime.h
#includestdlib.h
void getid(int ad[32])
{
int p=0,q=0,r=0,t=0;
int i;
for(i=0;i8;i++)
{p+=pow(2,7-i%8)*ad[i];} ;将低八位二进制数转化为十进制数
printf(%d.,p);
for(i=8;i16;i++)
{q+=pow(2,7-i%8)*ad[i];}
printf
文档评论(0)