tcpip实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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报文格式
4、设置过滤器属性,如目的地址,源地址,协议类型等。如过滤不需要的网络报文,过滤器允许设置第二层,第三层或第四层的协议字段。
过滤器有两种工作方式:
1)捕获前过滤:协议分析软件用过滤器匹配网络上的数据报文,仅当匹配通过时才捕获报文。
2)捕获后过滤:协议分析软件捕获所有报文,但仅显示匹配符合过滤条件的报文。选择统计菜单项可以显示网络中各种流量的统计信息,如:关于字节数,广播中报文数,出错数等。
UDP 客户/服务器实验
一、实验目的
本实验目的是使用因特网提供的UDP 传输协议,实现一个简单的UDP 客户/服务器程序,以了解传输层所提供的UDP 服务的特点,应用层和传输层之间的软件接口风格,熟悉socket 机制和UDP 客户端/服务器方式程序的结构。
二、实验内容
本实验为UDP 客户/服务器实验。实验内容:UDP echo 客户/服务器程序的设计与实现。UDP echo 客户/服务器程序完成以下功能:
客户从标准输入读一行文本,写到服务器上;服务器从网络输入读取此行,并回射(echo )给客户;客户读此回射行,并将其写到标准输出。
三、实验步骤
1、 总体设计
客户程序从标准输入读一行文本,写到服务器程序上;服务器程序从网络输入读取此行,并回射给客户程序;客户程序读此回射行,并将其写到标准输出。
2、 详细设计
U
D P 客户-服务器程序所用套接口函数
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
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);
}