TCPIP原理实验一

实验一链路层帧格式分析实验1、实验目的1)熟悉Packet Tracer和Wireshark的用法。

2)掌握EthernetV2 标准规定的MAC 帧结构,初步了解TCP/IP 的主要协议和协议的层次结构。

3)了解IEEE802.1Q 标准规定的帧结构。

2、实验设备和连接实验设备和连接图如图1 所示,一台交换机连接了2 台PC 机,分别命名为PC1、PC2,交换机命名为Switch。

图1 Ethernet 链路层帧结构实验连接图3、实验分组每两人一小组,每小组各自独立完成实验。

4、实验步骤步骤1:按照如图1 所示连接好设备,配置PC1 和PC2 的IP 地址;步骤2:在:PC1 和PC2 上运行Wireshark 截获报文,为了只截获和实验内容有关的报文,将Wireshark 的Captrue Filter 设置为“No Broadcast and no Multicast ”;步骤3:在: PC1 的“运行”对话框中输入命令“Ping 172.16.1.102”,单击“确定”按钮;步骤4:停止截获报文:将结果保存为MAC-学号,并对截获的报文进行分析:1)列出截获的报文中的协议类型,观察这些协议之间的关系。

___________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________2)在网络课程学习中,EthernetV2 规定以太网的MAC 层的报文格式分为7 字节的前导符、1 字节的帧首定界、6 字节的目的 MAC 地址、6 字节的源 MAC 地址、2 字节的类型、46~1500 字节的数据字段和4 字节的帧尾校验字段。

分析一个Ethernet V2 帧,查看这个帧由几部分组成,缺少了哪几部分?为什么?___________________________________________________________________________ _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________步骤 5:在: PC1 和 PC2 上运行 Wireshark 截获报文,然后进入PC1 的Windows 命令行窗口,执行如下命令:net send 172.16.1.102 Hello这是PC1 向PC2 发送消息的命令,等到PC2 显示器上显示收到消息后,终止截获报文。

注意PC1 和PC2 的信使服务应启动。

找到发送消息的报文并进行分析,查看主窗口中数据报文列表窗口和协议树窗口信息。

3)设法获得IEEE802.1Q 标准规定的帧,分析其基本结构。

实验二ARP协议分析实验1、实验目的分析ARP 协议的报文格式,理解ARP 协议的解析过程;掌握ARP代理的工作特点。

2、实验设备和连接实验设备和连接图如图2 所示,一台交换机连接了2 台PC 机,分别命名为PC1、PC2,交换机命名为Switch。

图2 ARP 协议分析实验连接图3、实验分组每两人一小组,每小组各自独立完成实验。

4.实验步骤步骤1:按照如图27 所示连接好设备,配置PC1 和PC2 的IP 地址;步骤2:在: PC1、PC2 两台计算机上执行如下命令,清除ARP 缓存:ARP –d步骤3:在PC1、PC2 两台计算机上执行如下命令,查看高速缓存中的ARP 地址映射表的内容:ARP –a步骤 4:在PC1 和 PC2 上运行 Wireshark 截获报文,为了截获和实验内容有关的报文, Wireshark 的Captrue Filter 设置为默认方式;步骤5:在主机PC1 上执行Ping 命令向PC2 发送数据报;步骤6:执行完毕,保存截获的报文并命名为arp-1-学号;步骤7:在PC1、PC2 两台计算机上再次执行ARP –a 命令,查看高速缓存中的ARP 地址映射表的内容:1)这次看到的内容和步骤3 的内容相同吗?结合两次看到的结果,理解ARP 高速缓存的作用。

__________________________________________________________________________________________________________________________________________________________2)把这次看到到的高速缓存中的ARP 地址映射表写出来。

__________________________________________________________________________________________________________________________________________________________步骤8:重复步骤: 4—5,将此结果保存为arp-2-学号;步骤9:打开arp-1-学号,完成以下各题:1)在截获的报文中由几个ARP 报文?在以太帧中,ARP 协议类型的代码值是什么?__________________________________________________________________________________________________________________________________________________________2)打开arp-2-学号,比较两次截获的报文有何区别?分析其原因。

_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________3)分析arp-1 中ARP 报文的结构,完成表11。

表1 ARP 报文分析ARP 请求报文ARP 应答报文字段报文信息及参数字段报文信息及参数硬件类型硬件类型协议类型协议类型硬件地址长度硬件地址长度协议地址长度协议地址长度操作操作源站物理地址源站物理地址源站IP 地址源站IP 地址目的站物理地址目的站物理地址目的站IP 地址目的站IP 地址步骤10、设计一个实验来完成ARP代理工作过程的分析。

实验三ICMP协议分析实验1、实验目的掌握ping 和tracert 命令的使用方法,了解ICMP 协议报文类型及其作用。

执行ping 和tracert 命令,分别截获报文,分析截获的ICMP 报文类型和ICMP 报文格式,理解ICMP 协议的作用。

2、实验设备和连接实验设备和连接图如图3 所示,一台锐捷R1760 路由器连接2 台PC 机,分别命名为PC1、PC2。

图3 ICMP 协议分析实验连接图3、实验分组每两人一小组,每小组各自独立完成实验。

4、实验步骤步骤1:按照如图3 所示连接好设备;步骤2:完成路由器和PC1、PC2 的相关配置;(注:学校校园网中连接各个实验室的网关可以作为路由器,任何一台PC都可以作为模型中的PC1。

PC2用202.202.43.125等另一网段机器代理即可。

)PC1 和PC2 的IP 地址、子网掩码、网关按照图中有关参数配置。

步骤3:分别在PC1 和PC2 上运行 Wireshark,开始截获报文,为了只截获和实验内容有关的报文,将Wireshark 的Captrue Filter 设置为“No Broadcast and noMulticast ”;步骤4:在PC1上以PC2 为目标主机,在命令行窗口执行Ping 命令;请写出执行的命令:_____________________________________________________ 步骤 5:停止截获报文,将截获的结果保存为 ICMP-1-学号,分析截获的结果,回答下列问题:1)您截获几个ICMP 报文?分别属于那种类型?___________________________________________________________________________ _______________________________________________________________________________ 2)分析截获的ICMP 报文,查看表2 中要求的字段值,填入表中。

表2 ICMP 报文分析报文号源IP 目标IPICMP 报文格式类型代码标识序列号3)分析在上表中哪个字段保证了回送请求报文和回送应答报文的一一对应,仔细体会Ping 命令的作用。

___________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________ 步骤6:在PC1 上运行Wireshark 开始截获报文;步骤7:在PC1 上执行Tracert 命令,向一个本网络中不存在的主机发送数据报,如:Tracert 172.16.20.200;步骤 8:停止截获报文,将截获的结果保存为 ICMP-2-学号,分析截获的报文,回答下列问题:1)截获了报文中哪几种ICMP 报文?其类型码和代码各为多少?___________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________2)在截获的报文中,超时报告报文的源地址是多少?这个源地址指定设备和PC1 有何关系?___________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ 3)通过对两次截获的ICMP 报文进行综合分析,仔细体会ICMP 协议在网络中的作用。

合集下载

tcpip实验报告

tcpip实验报告

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

二、实验内容利用协议分析软件(如: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 客户/服务器程序的设计与实现。

TCPIP实验指导书

TCPIP实验指导书

TCPIP实验指导书信息科学与工程学院2011目录实验一Wirechark使用 (3)实验二 HTTP协议分析 (20)实验三 FTP协议分析 (23)实验四 DNS实验 (27)实验五 TCP协议分析 (30)实验六 IP协议实验 (33)实验七 ICMPv4协议分析 (34)实验八 ARP协议分析 (35)实验一Wirechark使用一、实验目的1、学习使用Wireshark协议分析工具进行数据报的抓取、过滤。

2、对报文进行分析二、实验内容在成功运行Wireshark之后,我们就可以进入下一步,更进一步了解这个强大的工具。

下面是一张地址为192.168.1.2的计算机正在访问“”网站时的截图。

1. MENUS(菜单)程序上方的8个菜单项用于对Wireshark进行配置:- "File"(文件)- "Edit" (编辑)- "View"(查看)- "Go" (转到)- "Capture"(捕获)- "Analyze"(分析)- "Statistics" (统计)- "Help" (帮助)打开或保存捕获的信息。

查找或标记封包。

进行全局设置。

设置Wireshark的视图。

跳转到捕获的数据。

设置捕捉过滤器并开始捕捉。

设置分析选项。

查看Wireshark的统计信息。

查看本地或者在线支持。

2. SHORTCUTS(快捷方式)在菜单下面,是一些常用的快捷按钮。

您可以将鼠标指针移动到某个图标上以获得其功能说明。

3. DISPLAY FILTER(显示过滤器)显示过滤器用于查找捕捉记录中的内容。

请不要将捕捉过滤器和显示过滤器的概念相混淆。

请参考Wireshark过滤器中的详细内容。

4. PACKET LIST PANE(封包列表)封包列表中显示所有已经捕获的封包。

tcpip实验报告

tcpip实验报告

《TCP/IP》实验报告姓名:学号:学院:专业:班级:指导老师:2013年6月3日实验一熟悉Linux编程环境练习1:编写一个并发程序,利用fork函数创建五个进程,让每一个进程打印出可用来分辨不同进程的信息。

#include<stdio.h>#include<unistd.h>#include<sys/wait.h>int main(){int pid, i;i = 0;while(i < 5){i++;if((pid=fork()) == 0){printf("pid:%d\n",getpid());sleep(3);break;}waitpid(pid,(int*)0,0);printf("ppid:%d\n",getpid());}return 0;}运行结果:练习2:编写一个程序,利用execve函数改变进程执行的代码。

//execve.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>int main(int argc,char *argv[]){char *newargv[] = {NULL,"you","me",NULL};char *newenviron[]={NULL};if(argc != 2){fprintf(stderr,"Usage:%s <file-to-exec>\n",argv[0]);exit(EXIT_FAILURE);}newargv[0] = argv[1];execve(argv[1],newargv,newenviron);perror("execve");exit(EXIT_FAILURE);}//myecho.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>int main(int argc, char *argv[]){int i;for(i = 0; i < argc; i++)printf("argv[%d]:%s\n",i,argv[i]);return 0;}运行结果:实验二实现Echo服务客户端程序(UDP)代码://client.c#include<sys/socket.h>#include<netinet/in.h>#include<netdb.h>#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<sys/types.h>#include<sys/time.h>#include<errno.h>int readable_timeo(int fd, int sec){fd_set rset;struct timeval tv;FD_ZERO(&rset);FD_SET(fd,&rset);_sec = sec;_usec = 0;return (select(fd+1,&rset,NULL,NULL,&tv)); //使用select函数实现简单超时重传}int main(int argc, char **argv){int sockfd, len, res, i;struct sockaddr_in address;char *host;struct hostent *hostinfo;struct servent *servinfo;char buf[128], buf2[128];int nsec = 20;//timeout:20sstruct timeval tpstart,tpend;double timeuse;if(argc == 1)host = "localhost";elsehost = argv[1];hostinfo = gethostbyname(host);if(!hostinfo){fprintf(stderr,"no host:%s\n",host);exit(1);}servinfo = getservbyname("echo","udp");if(!servinfo){fprintf(stderr,"no echo server!\n");exit(1);}sockfd = socket(AF_INET,SOCK_DGRAM,0);address.sin_family = AF_INET;address.sin_port = servinfo->s_port;address.sin_addr = *(struct in_addr*)*hostinfo->h_addr_list;len = sizeof(address);while(fgets(buf,128,stdin) != NULL){for(i = 0; i < 2; i++) //juse one chance to resend{if(i == 1) //resend{printf("ReSend!!!\n");gettimeofday(&tpend,NULL);timeuse=1000000*(__sec)+__usec;timeuse/=1000000;printf("resend time is %lf s\n",timeuse);}gettimeofday(&tpstart,NULL);res = sendto(sockfd,buf,strlen(buf),0,(struct sockaddr*)&address,len);if(readable_timeo(sockfd,nsec) == 0){fprintf(stderr,"socket timeout\n");continue;}res = recvfrom(sockfd,buf2,128,0,(struct sockaddr*)&address,&len);buf2[res] = 0;fputs(buf2,stdout);break; //send successfully,quit!}}close(sockfd);exit(0);}实验三循环无连接服务器Echo的实现代码://server.c#include<stdio.h>#include<unistd.h>#include<netinet/in.h>#include<arpa/inet.h>#include<sys/types.h>#include<stdlib.h>#include<signal.h>#include<string.h>#include<errno.h>#include<time.h>#define MAXLINE 128int sockfd, flag = 1;void close_action(int sig){printf("close the sockfd\n");close(sockfd);signal(SIGINT,SIG_DFL);flag = 0;}int main(){struct sockaddr_in sin,sin_cli;int type, res, opt;char mesg[MAXLINE], buf[MAXLINE];socklen_t len;struct sigaction act;struct tm *ptm;int y,m,d,h,n,s;long ts;//set the signal actionact.sa_handler = close_action;sigemptyset(&act.sa_mask);act.sa_flags = 0;memset(&sin,0,sizeof(sin));sin.sin_family = AF_INET;sin.sin_addr.s_addr = INADDR_ANY;sin.sin_port = htons(45454);sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd < 0){fprintf(stderr,"can't create socket %s \n",strerror(errno));exit(1);}if(bind(sockfd,(struct sockaddr*)&sin,sizeof(sin)) < 0){fprintf(stderr,"can't bind to %s port:%s\n",service,strerror(errno));exit(1);}len = sizeof(sin_cli);sigaction(SIGINT,&act,0); //Ctrl+C close the sockfdwhile(flag){printf("\n");res = recvfrom(sockfd,mesg,MAXLINE,0,(struct sockaddr*)&sin_cli,&len);mesg[res] = 0;ts = time(NULL);sprintf(buf,"%.24s\r\n",ctime(&ts));printf("%s\t",buf);printf("%s\t",inet_ntoa(sin_cli.sin_addr));sendto(sockfd,mesg,n,0,(struct sockaddr*)&sin_cli,len);}exit(0);}实验四循环的、面向连接服务器的实现//server.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<time.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>#define MAXSIZE 30int main(){struct sockaddr_in servaddr,cliaddr;int clilen;int connfd, listenfd;char buf[MAXSIZE];time_t now;int seconds;struct tm *ptm;int y,m,d,h,n,s;long ts;listenfd = socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(9734);servaddr.sin_addr.s_addr = htonl(INADDR_ANY);bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));listen(listenfd,5);for(;;){clilen = sizeof(cliaddr);connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);ts = time(NULL);sprintf(buf,"%.24s\r\n",ctime(&ts));write(connfd,buf,MAXSIZE);}exit(1);}//client.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<time.h>#include<string.h>#define MAXSIZE 30void str_daytime(int fd){char buf[MAXSIZE];int n;if((n = read(fd,buf,MAXSIZE)) <= 0){fprintf(stderr,"error");}buf[n] = 0;fputs(buf,stdout);}int main(int argc,char **argv){int sockfd;struct sockaddr_in servaddr;sockfd = socket(AF_INET,SOCK_STREAM,0);servaddr.sin_family = AF_INET;servaddr.sin_port = htons(9734);//Inet_pton(AF_INET,argv[1],&servaddr.sin_addr);servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));str_daytime(sockfd);exit(1);}实验五循环的、面向连接服务器的实现//server.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<time.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>#define MAXSIZE 30int main(){struct sockaddr_in servaddr,cliaddr;int clilen,connfd, listenfd, childpidchar buf[MAXSIZE];time_t now;int seconds;struct tm *ptm;int y,m,d,h,n,s;long ts;listenfd = socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(9734);servaddr.sin_addr.s_addr = htonl(INADDR_ANY);bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));listen(listenfd,5);clilen = sizeof(cliaddr);for(;;){connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);if((childpid = fork()) == 0){close(listenfd);ts = time(NULL);sprintf(buf,"%.24s\r\n",ctime(&ts));write(connfd,buf,MAXSIZE);}close(connfd);}exit(1);}//test.c#include<stdio.h>#include<unistd.h>#include<stdlib.h>int main(){int i;for(i = 0; i < 10; i++){system("./tcpcli");printf("\n");}exit(0);}实验六单进程并发服务代码:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<arpa/inet.h>#include<netinet/in.h>#include<sys/socket.h>#include<sys/select.h>#include<strings.h>#include<string.h>#include<time.h>#define MAXLINE 128int main(){struct sockaddr_in servaddr,cliaddr;int clilen;int connfd, listenfd, sockfd;char buf[MAXLINE];int i, maxi, maxfd, seconds, nresult, res, nread,client[FD_SETSIZE];pid_t childpid;fd_set readfds,testfds;struct tm *ptm;int y,m,d,h,n,s;time_t ts;listenfd = socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(9734);servaddr.sin_addr.s_addr = htonl(INADDR_ANY);bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));listen(listenfd,10);maxfd = listenfd;maxi = -1;for(i = 0; i < FD_SETSIZE; i++)client[i] = -1;FD_ZERO(&readfds);FD_SET(listenfd,&readfds);for(;;){testfds = readfds;nresult = select(maxfd+1,&testfds,NULL,NULL,NULL);if(FD_ISSET(listenfd,&testfds)){clilen = sizeof(cliaddr);connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);for(i = 0; i < FD_SETSIZE; i++)if(client[i] < 0){client[i] = connfd;break;}if(i == FD_SETSIZE)fprintf(stderr,"too many clients");FD_SET(connfd,&readfds);if(connfd > maxfd)maxfd = connfd;if(i > maxi)maxi = i;if(--nresult <= 0)continue;}for(i = 0; i <= maxi; i++){if((sockfd = client[i]) < 0)continue;if(FD_ISSET(sockfd,&testfds)){if((res = read(sockfd,buf,MAXLINE))== 0){close(sockfd);printf("connection closed by client\n");FD_CLR(sockfd,&readfds);client[i] = -1;}else if(res > 0){printf("supply service to client!\n");ts = time(NULL);sprintf(buf,"%.24s",ctime(&ts));write(sockfd,buf,strlen(buf));}elseprintf("error!!!!\n");if(--nresult <= 0){printf("no more readble descriptors\n");break;}}}}exit(1);}实验七并发的客户端//tcpcli.c#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include "unp.h"int main(int argc,char **argv){int i, ccount, hcount = 0, fd, maxfd = 0, n, one, sockfd;fd_set afds;char ser_ip[FD_SETSIZE][20], buf[MAXLINE];struct sockaddr_in servaddr;struct servent *servinfo;servinfo = getservbyname("daytime","tcp");servaddr.sin_family = AF_INET;servaddr.sin_port = servinfo->s_port;for(i = 1; i < argc; ++i){sockfd = socket(AF_INET,SOCK_STREAM,0);if(strcmp(argv[i],"-c") == 0){if(++i < argc && (ccount = atoi(argv[i])))continue;err_quit("tcpcli [-c] [number] [ip] ");}Inet_pton(AF_INET,argv[i],&servaddr.sin_addr);fd = connect(sockfd,(SA*)&servaddr,sizeof(servaddr));if(ioctl(sockfd,FIONBIO,(char*)&one))err_quit("can't mark socket nonblocking:%s\n",strerror(errno));if(sockfd > maxfd)maxfd = sockfd;strcpy(ser_ip[sockfd],argv[i]);++hcount;FD_SET(sockfd,&afds);}n = select(maxfd+1,&afds,NULL,NULL,NULL);for(i = 0; i <= maxfd; i++){if(FD_ISSET(i,&afds)){if((n = read(i,buf,MAXLINE)) == 0){close(sockfd);FD_CLR(i,&afds);}elseprintf("%s\t%s\n",buf,ser_ip[i]);}}exit(0);}实验八多线程服务代码:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<time.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>#include<semaphore.h>#include<pthread.h>#define MAXSIZE 30struct share_thread{pthread_mutex_t work_mutex;int count;}shared;void *thread_func(void *arg){int connfd;char buf[MAXSIZE];struct tm *ptm;int y,m,d,h,n,s;long ts;connfd = *(int*)arg;ts = time(NULL);sprintf(buf,"%.24s\r\n",ctime(&ts));write(connfd,buf,MAXSIZE);pthread_mutex_lock(&shared.work_mutex);shared.count++;pthread_mutex_unlock(&shared.work_mutex);printf("Number of service of daytime:%d\n",shared.count);close(connfd);pthread_exit(0);}int main(){struct sockaddr_in servaddr, cliaddr;int listenfd, connfd;pthread_t serv_thread;pthread_attr_t thread_attr;int res;int clilen;shared.count = 0;res = pthread_mutex_init(&shared.work_mutex,NULL);if(res != 0){fprintf(stderr,"mutex initilization failed");exit(1);}res = pthread_attr_init(&thread_attr);if(res != 0){fprintf(stderr,"Attribute creation failed");exit(1);}res = pthread_attr_setdetachstate(&thread_attr,PTHREAD_CREATE_DETACHED);if(res != 0){fprintf(stderr,"Setting detached attribute failed");exit(1);}listenfd = socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(9734);servaddr.sin_addr.s_addr = htonl(INADDR_ANY);bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));listen(listenfd,5);for(;;){clilen = sizeof(cliaddr);connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);//wrongres = pthread_create(&serv_thread,&thread_attr,thread_func,(void*)&connfd);if(res != 0){fprintf(stderr,"create pthread failed\n");exit(1);}}exit(1);}实验九预分配进程服务器代码://server.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<time.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>#include<signal.h>#include<errno.h>#include<sys/wait.h>#include<pthread.h>#include<semaphore.h>#define MAXSIZE 30#define MAXCHILD 100static pthread_mutex_t work_mutex;static pid_t childpid[MAXCHILD];void child_main(int i, int listenfd){char buf[MAXSIZE];struct tm *ptm;int y,m,d,h,n,s;long ts;int connfd;int clilen;struct sockaddr_in cliaddr;clilen = sizeof(cliaddr);pthread_mutex_lock(&work_mutex); //lockconnfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);pthread_mutex_unlock(&work_mutex); //unlockprintf("Now, it is the %d child to supply service for the client\n",i);ts = time(NULL);sprintf(buf,"%.24s\r\n",ctime(&ts));write(connfd,buf,MAXSIZE);close(connfd);}void sig_int(int signo){printf("\ndestroy the mutex\n");int i;for(i = 0; i < MAXCHILD; i++)kill(childpid[i],SIGTERM);while(wait(NULL) > 0);if(errno != ECHILD)fprintf(stderr,"wait error");pthread_mutex_destroy(&work_mutex);exit(0);}int main(){struct sockaddr_in servaddr, cliaddr;int listenfd, connfd;int res, i;int clilen;res = pthread_mutex_init(&work_mutex,NULL);if(res != 0){fprintf(stderr,"mutex initialization failed\n");exit(1);}listenfd = socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(9734);servaddr.sin_addr.s_addr = htonl(INADDR_ANY);bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));listen(listenfd,5);for(i = 0; i < MAXCHILD; i++){if((childpid[i] = fork()) < 0){fprintf(stderr,"fork failed");exit(1);}else if(childpid[i] == 0)child_main(i, listenfd);}signal(SIGINT,sig_int);for(;;)pause();}。

tcpip实验

tcpip实验

1.应用层:telnet,FTP,HTTP,DNS,SMTP,POP32.传输层:TCP,UDPTCP:面向连接的可靠的传输协议,通信前建立三次握手,握手成功后才能通信,对数据准确性要求较高的场合使用,如从网上载的安装文件,不能缺少任何信息UDP:是无连接的,不可靠的传输协议,不需要建立连接,也没有重传和确认的机制,在实时性要求较高,但对数据准确度要求不是很高的场合使用,如视频会议,在线观看电影,当中丢失个别数据包并不影响整体的效果。

3.网络层:IP因为OSI七层结构较为复杂,所以使用较多的是TCP/IP模型,现在TCP/IP已经成为Internet上通用的工业标准TCP/IP模型包括4个层次:应用层,传输层,网络层,网络接口端口:1. 为了标识通信实体中进行通信的进程(应用程序),TCP/IP协议提出了协议端口的概念2. 端口是一种抽象的软件结构(包括一些数据结构和I/O 缓冲区)。

应用程序通过系统调用和某端口建立连接(binding)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都通过该端口输出3. 端口用一个整数型标识符来表示,即端口号。

端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP是完全独立的的两个软件模块,因此各自的端口号也相互独立4. 端口使用一个16位的数字来表示,它的范围是0~65535,1024以下的端口号保留给预定义的服务,例如,http 使用80端口套接字(Socket)1. Socket的出现,使得程序员可以很方便的访问TCP/IP,从而开发各种网络应用的程序2. 套接字存在于通信区域中,通信区域也叫地址族,他是一个抽象的概念,主要用于通过套接字通信的进程的共有特性综合在一起。

套接字通常只与同一个区域的套接字交换数据。

套接字的类型1. 流式套接字(SOCK_STREAM)提供面向连接的,可靠的数据传输服务,数据无差错,无重复的发送,且按发送的顺序接收,基于TCP协议2. 数据保式套接字(SOCK_DGRAM)提供无连接的服务,数据包以独立包形式发送,不提供无错误的保证,数据可能丢失或重复,且接收顺序混乱,基于UDP协议基于TCP(面向连接)的Socket编程服务器端顺序:1. 加载套接字库2. 创建套接字(socket)3. 将套接字绑定到一个本地地址和端口上(bind)4. 将套接字设为监听模式,准备接收客户请求(listen)5. 等待客户请求的到来;当请求带来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)6. 用返回的套接字和客户端进行通信(send/recv)7. 返回,等待另一个客户请求8. 关闭套接字(closesocket)客户端程序:1. 加载套接字库2. 创建套接字(socket)3. 向服务器发送连接请求(connect)4. 和服务器端进行通信(send/receive)5. 关闭套接字(closesocket)基于UDP(面向无连接)的socket编程服务器端(接收端)程序:1. 加载套接字库2. 创建套接字(socket)3. 将套接字绑定到一个本地地址和端口上(bind)4. 等待接收数据(recvfrom)5. 关闭套接字(closesocket) 客户端(发送端)程序1. 加载套接字库2. 创建套接字(socket)3. 向服务器发送数据(sendto)4. 关闭套接字(closesocket)创建基于TCP协议的CS程序的Server端所涉及的相关函数说明(按使用的先后顺序排列):1. int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData):作用是加载套接字库和进行套接字库的版本协商a. 参数wVersionRequested:用于指定准备加载的Winsock库的版本,高位字节指定所需要的Winsock库的副版本,低位字节则是主版本,可用MAKEWORD(X,Y)(其中,x为高位字节,y为低位字节)方便获得wVersionRequested的正确值。

TCPIP协议分析实验

TCPIP协议分析实验

实际例子:TCP/IP协议的封装 实际例子:TCP/IP协议的封装
应用层 传输层 网际层 IP头 头 TCP头 TCP头
应用层数据
应用层数据
TCP头 头
应用层数据
数链层
帧头
IP头 头
TCP头 头
应用层数据
帧尾
实际例子:TCP/IP协议的封装 实际例子:TCP/IP协议的封装
WWW
应用地址 (80)
TCP/IP的主要协议 TCP/IP的主要协议
FTP TCP IP ARP/RARP telnet HTTP SMTP SNMP UDP DNS 其 他
ICMP
Ethernet
Token Ring
FDDI
ATM
其他
数据封装
一台计算机要发送数据到另一台计算机, 一台计算机要发送数据到另一台计算机,数据 首先必须打包,打包的过程称为封装 封装。 首先必须打包,打包的过程称为封装。 封装就是在数据前面加上特定的协议头部。 封装就是在数据前面加上特定的协议头部。 数 据
主要内容?tcpip体系结构?局域网协议栈??网间网层协议?传输层协议第一节tcpip体系结构应用层tcpipmodelapplicationpresentationosirefmodelftptelnethttptcpipprotocols传输层网间网层网络接口层sessiontransportnetworkdatalinkphysicaltcpipethernetudpx25ppptcpip的主要协议ftptelnethttpsmtpsnmpdns其他其他tcpudpiparprarpicmpethernettokenringfddiatm其他数据封装?一台计算机要发送数据到另一台计算机数据首先必须打包打包的过程称为封装一台计算机要发送数据到另一台计算机数据首先必须打包打包的过程称为封装

TCPIP原理实验一

TCPIP原理实验一

实验一链路层帧格式分析实验1、实验目的1)熟悉Packet Tracer和Wireshark的用法。

2)掌握EthernetV2 标准规定的MAC 帧结构,初步了解TCP/IP 的主要协议和协议的层次结构。

3)了解IEEE802.1Q 标准规定的帧结构。

2、实验设备和连接实验设备和连接图如图1 所示,一台交换机连接了2 台PC 机,分别命名为PC1、PC2,交换机命名为Switch。

图1 Ethernet 链路层帧结构实验连接图3、实验分组每两人一小组,每小组各自独立完成实验。

4、实验步骤步骤1:按照如图1 所示连接好设备,配置PC1 和PC2 的IP 地址;步骤2:在:PC1 和PC2 上运行Wireshark 截获报文,为了只截获和实验内容有关的报文,将Wireshark 的Captrue Filter 设置为“No Broadcast and no Multicast ”;步骤3:在: PC1 的“运行”对话框中输入命令“Ping 172.16.1.102”,单击“确定”按钮;步骤4:停止截获报文:将结果保存为MAC-学号,并对截获的报文进行分析:1)列出截获的报文中的协议类型,观察这些协议之间的关系。

___________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________2)在网络课程学习中,EthernetV2 规定以太网的MAC 层的报文格式分为7 字节的前导符、1 字节的帧首定界、6 字节的目的 MAC 地址、6 字节的源 MAC 地址、2 字节的类型、46~1500 字节的数据字段和4 字节的帧尾校验字段。

TCP-IP攻击实验-实验报告.docx

中南大学TCP/IP 攻击实验实验报告学生姓名学院信息科学与工程学院专业班级完成时间2015年 11 月 29 日目录1. 实验描述 (3)2. 实验步骤 (3)环境搭建 (3)实验 1:ARP缓存中毒 (3)实验 2:ICMP重定向攻击 . (4)实验 3:SYN洪流攻击 (5)实验 4:在 telnet和ssh连接上的TCP RST攻击 (6)实验5:对视频流应用程序的TCP RST 攻击 (7)实验 6:ICMP 盲目连接重置和源端关闭攻击 (7)实验 7:TCP报文劫持 (8)3. 总结 (8)TCP/IP 攻击实验1.实验描述【实验背景】由于 TCP/IP 协议是 Internet的基础协议,所以对TCP/IP 协议的完善和改进是非常必要的。

TCP/IP 协议从开始设计时候并没有考虑到现在网络上如此多的威胁, 由此导致了许多形形色色的攻击方法,一般如果是针对协议原理的攻击( 尤其 DDOS),我们将无能为力。

TCP/IP 攻击的常用原理有:(1)源地址欺骗(Source Address Spoofing)Spoofing);、 IP欺骗 (IP Spoofing)和 DNS欺骗 (DNS(2)路由选择信息协议攻击 (RIP Attacks) ;(3) 源路由选择欺骗(Source Routing Spoofing);(4) TCP 序列号欺骗和攻击(TCP Sequence Number Spoofing and Attack)。

【实验目的】基于 TCP/IP 协议进行攻击实验, 了解 TCP/IP 协议的具体机制。

2.实验步骤环境搭建这里我使用三台虚拟机做实验,其中一个用于攻击;另一个用于被攻击;第三个作为观察者使用;把三台主机放在同一个LAN中,其配置信息参照如下所示(实际在实验过程中有所改动):这里我使用的是Wireshark工具箱的SEED实验室已经搭建好,并且已经安装好相关的Ubuntu 系统,与此同时三台虚拟机都需要打开netwoxFTP 和 Telnet工具箱和服务:使用如下命令来完成上述任务Start the ftp server#servicevsftpd startStart the telnet server#serviceopenbsd-inetd start实验 1:ARP缓存中毒【实验背景】ARP缓存是 ARP协议的重要的一部分。

《计算机网络》实验一TCP和IP配置与测试

成绩:
教师评语
指导教师签名: 批阅日期:
一、实验目的及要求
实验目的:掌握TCP/IP的配置和使用
实验要求:掌握TCP/IP的配置,熟悉Ping、Ipconfig等命令的使用
二、实验内容
掌握TCP/IP的配置,熟悉Ping、Ipconfig等命令的使用
三、实验软硬件环境
能接入Internet、安装Windows 2003 Server操作系统的PC机
3.Ping,Ipconfig,Netstat,Route,Tracert等命令使用
选择“开始”→“程序”→“附件”→“命令提示符”
在“命令提示符”下,使用各个命令获取和PC机相关的网络信息以及PC机所处网络的信息
五、实验结果分析
Ping,验证与远程计算机的连接。
ping IP –t连续对IP地址执行Ping命令,直到被用户以Ctrl+C中断。
ipconfig /release和ipconfig /renew--这是两个附加选项,只能在向DHCP服务器租用其IP地址的计算机上起作用。
Route,控制网络路由表。
route print本命令用于显示路由表中的当前项目
Tracert,是路由跟踪实用程序,用于确定IP数据报访问目标所采取的路径。Tracert命令用IP生存时间(TTL)字段和ICMP错误消息来确定从一个主机到网络上其他主机的路由。
四、实验过程
1.设置IP地址
选择“开始”→“设置”→“网络连接”→“本地连接”属性→“Internet协议属性”→“使用下面的IP地址”→填写PC机IP地址(如:172.19.10.15)
2.DNS服务器地址的设置
选择“开始”→“设置”→“网络连接”→“本地连接”属性→“Internet协议属性”→“使用下面的DNS服务器地址”-j host-list指定Tracert实用程序数据包所采用路径中的路由器接口列表。

电子科技大学_TCPIP实验一_IP分组交付和ARP协议_实验报告

电子科技大学实验报告学生姓名:陈虹宇学号:2012019110004指导教师:杨宁日期:2014 年10 月31 日实验项目名称:IP分组交付和ARP协议报告评分:教师签字:一、实验原理子网中使用一个32比特的掩码来标识一个IP地址的网络/子网部分和主机部分。

将IP 地址和掩码进行“位与”运算后可以得到该IP地址所在IP子网的子网地址,结合掩码中0比特个数可以确定该IP子网的IP地址空间范围。

根据IP地址所在IP子网的子网地址及其掩码,可以判断这些IP地址是否属于同一个IP子网。

IP地址空间中定义了一些特殊地址:网络/子网地址:标识一个IP网络或子网。

直接广播地址:表示该分组应由特定网络上的所有主机接收和处理。

受限广播地址:表示该分组应由源所在网络或子网上的所有主机接收和处理。

本网络上本主机地址:表示主机自己。

环回地址:用来测试机器的协议软件。

IP分组被交付到最终目的地有两种不同的交付方式:直接交付和间接交付。

交付时首先通过路由选择技术确定交付方式:如果IP分组的目的与交付者在同一个IP网络上,就直接交付该分组至目的站点;如果IP分组的目的与交付者不在同一个IP网络上,就间接交付该分组至下一个路由器(即下一跳站点)。

在以太网上,IP分组是封装在以太帧中发送的,因此发送时除了要有接收站的IP地址(IP 分组中的目的IP地址)外,还需要接收站的MAC地址(以太网帧中的目的MAC地址)。

ARP 协议(RFC 826)实现了IP地址(逻辑地址)到MAC地址(物理地址)的动态映射,并将所获得的映射存放在ARP高速缓存表中。

不同的交付方法将导致不同的ARP解析操作,获取不同的目的物理地址。

直接交付时,交付者直接将IP分组交付给该分组的目的站点,因此交付者使用ARP协议找出IP分组中目的IP地址对应的物理地址。

间接交付时,交付者需要将IP分组交付给下一跳站点,而不是该IP分组的目的端,因此交付者使用ARP协议找出下一跳站点IP地址对应的物理地址。

TCP IP实验报告

《TCP/IP协议》实验报告学院:机械与电子信息学院专业:计算机网络技术学号:姓名:指导教师:2018年 6 月实验一Packet Tracer 6.0的使用一、实验目的通过在Packet Tracer 6.0 添加网络设备,熟悉不同的物理设备及其连接方式,掌握使用Packet Tracer 6.0构建网络的方法,掌握捕获、查看通信信息的方法。

二、实验步骤步骤1、打开Packet Tracer 6.0,添加以下网络节点:1841路由器3台,2950-24 交换机1台,PC三台,服务器1台。

步骤2、选择合适的连接线把设备连接起来。

以太网连线时,交换机与计算机或路由器等设备之间连接用直通线,交叉线用于同种设备(路由器与路由器,交换机与交换机)之间相连或计算机与路由器之间相连。

用直通线吧PC0、PC1、Router0与Switch0的任意端口连接,Router0、Router1和Router2之间需要用交叉线连接,Server0与Router2也要用交叉线连接。

如果连线类型正确,则PC与交换机之间连线上的绿灯马上会点亮。

特别的,为配置路由器,可以用控制台连线把PC2和Router1的Console 端口连接起来,也可以连接到Router1的Auxiliary端口上,但使用方法与连接到控制口时不同。

步骤3、配置设备。

PC的配置可以直接在Packet Tracer 6.0的逻辑拓补图上单击PC图标,打开设备配置窗口,单击Desktop选项卡中的IP Configuration,完成默认网关和ID地址的设置。

依次设置3台PC和服务器0的IP地址,PC0和PC1的默认网关设为192.168.1.1,服务器0的默认网关设为192.168.4.1。

单击需要配置的路由器图标,打开设备配置窗口,单击CLI选项卡,按Enter键出现命令行提示符,然后使用如下命令配置静态路由。

Router>enable #进入特权模式Router#configure terminal #全局配置Router(config)#int f0/0 #配置接口f0/0 Router(config-if)#no shutdown #开启接口Router(config-if)#ip address 192.168.1.1 255.255.255.0随着借口no shutdown 命令的输入,接口连线上的绿灯随时变亮。

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