tcpip实验报告

  • 格式:doc
  • 大小:745.00 KB
  • 文档页数:18

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

网络协议分析实验

一、实验目的

通过使用协议分析软件,对通信系统的通信过程进行监控、分析,以了解通信协议的工作过程。

二、实验内容

利用协议分析软件(如:Wireshark)跟踪局域网报文(如条件允许也可跟踪多种局域网协议报文),实验内容如下:

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

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

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

三、实验步骤

1、在PC中安装协议分析软件(如:Wireshark)。具体安装过程详见附录:Wireshark用户指南。

2、启动Wireshark协议分析软件,选择抓包菜单项启动实时监视器,开始实时跟踪显示网络数据报文。可根据系统提示修改显示方式,详见附录:Wireshark用户指南。

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

EHERNET报文格式

IEEE802.3报文格式

IP报文格式

VERSION IHL TOS TOTAL LENGTN

IDENTIFICATION FLAGS FRAGMENT OFFSET

TTL PROTOWT HEADER CHECLCSUM

SOWRCE ADDRESS

DRSTINWTION ADDRESS

OPTIONS PADDING

INFO

4、设置过滤器属性,如目的地址,源地址,协议类型等。如过滤不需要的网络报文,过滤器允许设置第二层,第三层或第四层的协议字段。

过滤器有两种工作方式:

1)捕获前过滤:协议分析软件用过滤器匹配网络上的数据报文,仅当匹配通过时才捕获报文。

2)捕获后过滤:协议分析软件捕获所有报文,但仅显示匹配符合过滤条件的报文。选择统计菜单项可以显示网络中各种流量的统计信息,如:关于字节数,广播中报文数,出错数等。

UDP客户/服务器实验

一、实验目的

本实验目的是使用因特网提供的UDP传输协议,实现一个简单的UDP客户/服务器程序,以了解传输层所提供的UDP服务的特点,应用层和传输层之间的软件接口风格,熟悉socket 机制和UDP客户端/服务器方式程序的结构。

二、实验内容

本实验为UDP客户/服务器实验。实验内容:UDP echo客户/服务器程序的设计与实现。UDP echo客户/服务器程序完成以下功能:

客户从标准输入读一行文本,写到服务器上;服务器从网络输入读取此行,并回射(echo)给客户;客户读此回射行,并将其写到标准输出。

三、实验步骤

1、总体设计

客户程序从标准输入读一行文本,写到服务器程序上;服务器程序从网络输入读取此行,并回射给客户程序;客户程序读此回射行,并将其写到标准输出。

2、详细设计

UDP客户-服务器程序所用套接口函数1)服务器main函数

2)服务器str_echo函数

3)客户main函数

4)客户str_echo函数

#include

#include

#include

#include

#include

#define MAXLINE 4096

#define LISTENQ 1024 /* 2nd argument to listen() */ #define SERV_PORT 9877

#define SA struct sockaddr

static int sockfd;

void dg_echo(int, SA *, socklen_t);

int

main(int argc, char ** argv)

{

struct sockaddr_in servaddr, cliaddr;

if((sockfd = socket(AF_INET, SOCK_DGRAM, 0))<0) {

printf("socket error.\n");

exit(1);

}

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

servaddr.sin_port = htons(SERV_PORT);

bind(sockfd, (SA *)&servaddr, sizeof(servaddr));

dg_echo(sockfd, (SA *)&cliaddr, sizeof(cliaddr));

}

void

dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen)

{

int n;

socklen_t len;

char mesg[MAXLINE];

for ( ; ; ) {

len = clilen;

n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);

sendto(sockfd, mesg, n, 0, pcliaddr, len);

}

}

Cli

#include

#include

#include

#include

#include

#define MAXLINE 4096

#define LISTENQ 1024 /* 2nd argument to listen() */ #define SERV_PORT 9877

#define SA struct sockaddr

void dg_cli(FILE *, int, const SA *, socklen_t);

main(int argc, char **argv)

{

int sockfd;

struct sockaddr_in servaddr;

if (argc != 2) {

printf("usage:udpcli01sigio \n");

exit(1);

}

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(SERV_PORT);

inet_pton(AF_INET, argv[1], &servaddr.sin_addr);

if((sockfd = socket(AF_INET, SOCK_DGRAM, 0))<0) {

printf("socket error.\n");

exit(1);

}

dg_cli(stdin, sockfd, (SA *)&servaddr, sizeof(servaddr));

exit(0);

}