计算机网络课程设计实验报告Word文件下载.doc

上传人:wj 文档编号:7002894 上传时间:2023-05-07 格式:DOC 页数:35 大小:2.13MB
下载 相关 举报
计算机网络课程设计实验报告Word文件下载.doc_第1页
第1页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第2页
第2页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第3页
第3页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第4页
第4页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第5页
第5页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第6页
第6页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第7页
第7页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第8页
第8页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第9页
第9页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第10页
第10页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第11页
第11页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第12页
第12页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第13页
第13页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第14页
第14页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第15页
第15页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第16页
第16页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第17页
第17页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第18页
第18页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第19页
第19页 / 共35页
计算机网络课程设计实验报告Word文件下载.doc_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机网络课程设计实验报告Word文件下载.doc

《计算机网络课程设计实验报告Word文件下载.doc》由会员分享,可在线阅读,更多相关《计算机网络课程设计实验报告Word文件下载.doc(35页珍藏版)》请在冰点文库上搜索。

计算机网络课程设计实验报告Word文件下载.doc

多播传送地址作为目的物理地址的帧可以被组内的其它主机同时接收,而组外主机却接收不到。

但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。

3)直接模式(DirectModel):

工作在直接模式下的网卡只接收目地址是自己MAC地址的帧。

4)混杂模式(PromiscuousModel):

工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获程序就是在这种模式下运行的。

实验二网络层实验—Ping程序的设计与实现

1.联网计算机

2.Linux系统

3.系统自带编译环境

三、程序的需求分析与逻辑框图

需求分析

1、实验一

数据包的捕获与分析

1>

.在PC中安装协议分析软件。

2>

.启动Wireshark协议分析软件,选择抓包菜单项启动实时监视器,开始实时跟踪显示网络数据报文。

可根据系统提示修改显示方式。

3>

.调出跟踪存储的历史报文,选择有代表性的ETHERNET,IEEE802.3,IP,ICMP,TCP,UDP报文,对照有关协议逐个分析报文各字段的含义及内容。

4>

.设置过滤器属性,如目的地址,源地址,协议类型等。

如过滤不需要的网络报文,过滤器允许设置第二层,第三层或第四层的协议字段。

2、实验二

网络层实验—Ping程序的设计与实现

PING程序是我们使用的比较多的用于测试网络连通性的程序。

PING程序给予ICMP使用ICMP的回送请求和回送应答来工作。

ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。

实现检测网络通畅及速度的ping,并扩展以下功能:

-h显示帮助信息

-b允许ping一个广播地址,只用于IPv4

-t设置ttl值,只用于IPv4

-q安静模式,不显示每个收到的包的分析结果,只在结束时,显示汇总结果

三、程序的需求分析与逻辑框图

逻辑框图

1、总体设计

程序分为两大部分:

一部分读取收到的所有消息,并输出ICMPEchoreplay消息,另一部分每个一秒钟发送一个Echo消息。

另一部分由SIGALARM信号每秒驱动一次。

2、详细设计

1)main函数

三、 程序的需求分析与逻辑框图

2)readloop函数

3)proc函数 4)send函数

Checksum开始

定义初始化cksum

(size>

1)

确定cksum及size大小

if(size)

计算校验cksum,获得结果

cksum+=*(UCHAR*)buffer;

结束

四、程序核心功能的实现机制

利用协议分析软件跟踪局域网报文,实验内容如下:

将安装协议分析软件的PC接入以太网中,跟踪PC之间的报文,并存入文件以备重新查。

设置过滤器过滤网络报文以检测特定数据流。

利用协议分析软件的统计工具显示网络报文的各种统计信息。

IP头的格式如下

0123

01234567890123456789012345678901

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|Version|IHL|TypeofService|TotalLength|

|Identification|Flags|FragmentOffset|

|TimetoLive|Protocol|HeaderChecksum|

|SourceAddress|

|DestinationAddress|

Version=4

IHLInternet头长

TypeofService=0

TotalLengthIP包的总长度

Identification,Flags,FragmentOffset用于IP包分段

TimetoLiveIP包的存活时长

ProtocolICMP=1

Addresses发送Echo消息的源地址是发送Echoreply消息的目的地址,相反,发送Echo消息的目的地址是发送Echoreply消息的源地址。

四、程序核心功能的实现机制

Ping实际上是使用ICMP中的ECHO报文来实现的。

Echo或EchoReply消息格式如下:

0123

01234567890123456789012345678901

|Type|Code|Checksum|

|Identifier|SequenceNumber|

|Data...

+-+-+-+-+-

Type

echo消息的类型为8

echoreply的消息类型为0。

Code=0

Checksum

为从TYPE开始到IP包结束的校验和

Identifier

如果code=0,identifier用来匹配echo和echoreply消息

SequenceNumber

功能描述:

收到echo消息必须回应echoreply消息。

identifier和sequencenumber可能被发送echo的主机用来匹配返回的

echoreply消息。

例如:

identifier可能用于类似于TCP或UDP的port

用来标示一个会话,而sequencenumber会在每次发送echo请求后递增。

收到echo的主机或路由器返回同一个值与之匹配

四、 程序核心功能的实现机制

1、 数据结构的描述

1)IP包格式

structip{

BYTEVer_ihl;

//版本号与包头长度

BYTETOS;

//服务类型

WORDLeng;

//IP包长度

WORDId;

//IP包标示,用于辅助IP包的拆装,本实验不用,置零

WORDFlg_offset;

//偏移量,也是用于IP包的拆装,本实验不用,置零

BYTETTL;

//IP包的存活时间

BYTEProtocol;

//上一层协议,本实验置ICMP

WORDChecksum;

//包头校验和,最初置零,等所有包头都填写正确后,计算并替换。

BYTESaddr[4];

//源端IP地址

BYTEDaddr[4];

//目的端IP地址

BYTEData[1];

//IP包数据

};

2)ICMP包格式

structicmp{

BYTEType;

//ICMP类型,本实验用8:

ECHO0:

ECHOREPLY

BYTECode;

//本实验置零

//ICMP包校验和,从TYPE开始,直到最后一位用户数据,如果为

字节数为奇数则补充一位

WORDID;

//用于匹配ECHO和ECHOREPLY包

WORDSeq;

//用于标记ECHO报文顺序

//用户数据

五、程序源代码(核心部分)

PING.H

#ifndefPING_H_

#definePING_H_

#include <

netinet/in_systm.h>

#include <

netinet/ip.h>

netinet/ip_icmp.h>

netinet/icmp6.h>

netinet/ip6.h>

sys/types.h>

/*basicsystemdatatypes*/

sys/socket.h>

/*basicsocketdefinitions*/

sys/time.h>

/*timeval{}forselect()*/

time.h>

/*timespec{}forpselect()*/

netinet/in.h>

/*sockaddr_in{}andotherInternetdefns*/

arpa/inet.h>

/*inet(3)functions*/

netdb.h>

signal.h>

stdio.h>

stdlib.h>

string.h>

errno.h>

pwd.h>

unistd.h>

sys/un.h>

/*forUnixdomainsockets*/

sys/ioctl.h>

net/if.h>

#include<

stdarg.h>

syslog.h>

#ifdefHAVE_SOCKADDR_DL_STRUCT

#include<

net/if_dl.h>

#endif

#defineBUFSIZE 1500

#defineMAXLINE4096

/*globals*/

char recvbuf[BUFSIZE];

char sendbuf[BUFSIZE];

intttl_signal;

intttl_value;

char*ttl_val;

intdatalen;

/*#bytesofdata,followingICMPheader*/

char *host;

intbroad_sign=0;

int nsent;

/*add1foreachsendto()*/

pid_tpid;

/*ourPID*/

int sockfd;

int verbose;

intdaemon_proc;

/*setnonzerobydaemon_init()*/

/*functionprototypes*/

void proc_v4(char*,ssize_t,structtimeval*);

void proc_v6(char*,ssize_t,structtimeval*);

void send_v4(void);

void send_v6(void);

void readloop(void);

void sig_alrm(int);

void tv_sub(structtimeval*,structtimeval*);

char*Sock_ntop_host(conststructsockaddr*sa,socklen_tsalen);

structaddrinfo*host_serv(constchar*host,constchar*serv,intfamily,intsocktype);

staticvoiderr_doit(interrnoflag,intlevel,constchar*fmt,va_listap);

voiderr_quit(constchar*fmt,...);

voiderr_sys(constchar*fmt,...);

structproto{

void (*fproc)(char*,ssize_t,structtimeval*);

void (*fsend)(void);

structsockaddr*sasend;

/*sockaddr{}forsend,fromgetaddrinfo*/

structsockaddr*sarecv;

/*sockaddr{}forreceiving*/

socklen_t salen;

/*lengthofsockaddr{}s*/

int icmpproto;

/*IPPROTO_xxxvalueforICMP*/

}*pr;

#endif/*PING_H_*/

PING.C

#include"

ping.h"

structproto proto_v4={proc_v4,send_v4,NULL,NULL,0,IPPROTO_ICMP};

#ifdef IPV6

structproto proto_v6={proc_v6,send_v6,NULL,NULL,0,IPPROTO_ICMPV6};

int datalen=56;

/*datathatgoeswithICMPechorequest*/

doublertt_min=INFINITY,rtt_max=-INFINITY,rtt_total=0,rtt_sqr_total=0;

longlongsend_count=0,recv_count=0;

intttl_flag=0,broadcast_flag=0;

intttl=0;

structtimevaltval_start;

constchar*usage=

"

usage:

ping[-v][-h][-b][-tttl][-q]<

hostname>

\n"

\t-v\tNormalmode\n"

\t-b\tBroadcast\n"

\t-tttl\tSetTTL(0-255)\n"

\t-q\tQuietmode"

;

intmain(intargc,char**argv)

{

int c;

structaddrinfo *ai;

opterr=0;

/*don'

twantgetopt()writingtostderr*/

while((c=getopt(argc,argv,"

vhbt:

q"

))!

=-1){

switch(c){

case'

v'

:

verbose++;

break;

h'

puts(usage);

return0;

b'

broadcast_flag=1;

break;

t'

ttl_flag=sscanf(optarg,"

%d"

&

ttl)&

&

ttl>

=0&

ttl<

256;

q'

verbose--;

?

'

err_quit("

unrecognizedoption:

%c"

c,usage);

}

if(optind!

=argc-1)

err_quit(usage);

host=argv[optind];

pid=getpid();

signal(SIGALRM,sig_alrm);

signal(SIGINT,sig_int);

ai=host_serv(host,NULL,0,0);

printf("

ping%s(%s):

%ddatabytes\n"

ai->

ai_canonname,

Sock_ntop_host(ai->

ai_addr,ai->

ai_addrlen),datalen);

/*4initializeaccordingtoprotocol*/

if(ai->

ai_family==AF_INET){

pr=&

proto_v4;

}elseif(ai->

ai_family==AF_INET6){

proto_v6;

if(IN6_IS_ADDR_V4MAPPED(&

(((structsockaddr_in6*)

ai->

ai_addr)->

sin6_addr)))

cannotpingIPv4-mappedIPv6address"

);

}else

err_quit("

unknownaddressfamily%d"

ai_family);

pr->

sasend=ai->

ai_addr;

sarecv=calloc(1,ai->

ai_addrlen);

salen=ai->

ai_addrlen;

gettimeofday(&

tval_start,NULL);

readloop();

exit(0);

voidproc_v4(char*ptr,ssize_tlen,structtimeval*tvrecv)

int hlen1,icmplen;

double rtt;

struc

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2