电子科大TCPIP第三次实验报告材料
实验三传输层TCP协议的分析
TCP报头长度(4位):给出报头中32bit字的数目,它实际上指明数据从哪里开始。需要这个值是因为任选字段的长度是可变的。这个字段占4bit,因此TCP最多有60字节的首部。然而,没有任选字段,正常的长度是20字节。
图4TCP前20字节的固定报文
1.分析上图的TCP协议的报文得到如下结论:
源端口号(16位):它(连同源主机IP地址)标识源主机的一个应用进程。图片中的来源端口地址为80。
目的端口号(16位):它(连同目的主机IP地址)标识目的主机的一个应用进程。这两个值加上IP报头中的源主机IP地址和目的主机IP地址唯一确定一个TCP连接。图片中的目的端口为1025。
顺序号(32位):用来标识从TCP源端向TCP目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号。如果将字节流看作在两个应用程序间的单向流动,则TCP用顺序号对每个字节进行计数。序号是32bit的无符号数,序号到达2 32-1后又从0开始。当建立一个新的连接时,SYN标志变1,顺序号字段包含由这个主机选择的该连接的初始顺序号ISN(Initial Sequence Number)。图片中的序号为0。
图5数据部分的报文
选项:长度可变,最长达到40字节。当没有使用“选项”时,TCP首部的长度就是20字节。还有就是后面的填充都是在常规的TCP首部后增加的。
教
师
评
语
教师签名:
TCPIP攻击实验实验学习报告计划
中南大学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协议的重要的一部分。
TCPIP实验报告
TCP/IP技术实验报告书专业:[通信工程]学生姓名:[张世超]完成时间:9:28 AM实验一网络应用程序基础实验目得:通过实验,使学生熟悉并掌握运用TCP/IP技术进行网络编程得基本知识,加深对课堂教学内容得理解,掌握套接字网络通信编程技术,能够运用VC++为开发工具编程解决网络通信中得实际问题,进行一些简单得网络应用程序设计。
实验内容:1,Winsock得启动与终止。
2,Winsock得创建及绑定与关闭。
3,建立通信连接listen及accept与connect。
4,数据得传输。
5,简单得客户机/服务器之间得通信。
要求:通过在SDK模式下完成数据通信得过程,掌握Windows Socket得常用函数得形式与使用方法,理解数据通信得过程。
实验步骤:1,打开VC环境1,使用向导为客户端创建工程:选择可执行程序,选择使用wsa环境,单文档环境,其她得选择默认设置2,在文件中添加代码3,编译调试4,使用向导为服务器端创建工程:选择可执行程序,选择使用wsa环境,单文档环境,其她得选择默认设置5,在文件中添加代码6,编译调试7,分别打开两个系统命令窗口中,并分别在其中运行客户端与服务器端程序。
8,在客户端侧输入字符,可以瞧到服务器收到字符串参考代码:课本156页--160页实验结果:Client:#include<Winsock2、h>#include<stdio、h>//服务器端口号为5050#define DEFAULT_PORT 5050#define DATA_BUFFER 1024void main(int argc,char *argv[]){ﻩWSADATA wsaData;SOCKET sClient;ﻩint iPort=DEFAULT_PORT;//从服务器端接收得数据长度int iLen;ﻩ//接收数据得缓冲char buf[DATA_BUFFER];ﻩ//服务器端地址ﻩstruct sockaddr_in ser;ﻩ//判断输入得参数就是否正确if(argc<2){//提示在命令行中输入服务器IP地址ﻩﻩprintf("Usage:client [server IP address]\n");return;}ﻩ//接收数据得缓冲区初始化ﻩmemset(buf,0,sizeof(buf));ﻩif(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)ﻩ{printf("Failed to load Winsock、\n");ﻩﻩreturn;ﻩ}ﻩ//填写要连接得服务器地址信息ﻩser、sin_family=AF_INET;ser、sin_port=htons(iPort);//inet_addr()函数将命令行得点分IP地址转换为用二进制表示得网络字节顺序得IP地址ﻩser、sin_addr、s_addr=inet_addr(argv[1]);ﻩ//建立客户端流式套接口ﻩsClient=socket(AF_INET,SOCK_STREAM,0);if(sClient==INVALID_SOCKET)ﻩ{ﻩﻩprintf("socket()Failed:%d\n",WSAGetLastError());ﻩreturn;ﻩ}//请求与服务器端建立TCP连接ﻩif(connect(sClient,(struct sockaddr*)&ser,sizeof(ser))==INVALID_SOCKET){printf("connect() Failed:%d\n",WSAGetLastError()); ﻩﻩreturn;}elseﻩ//从服务器端接收数据ﻩiLen=recv(sClient,buf,sizeof(buf),0);ﻩﻩif(iLen==0)ﻩreturn;else if(iLen==SOCKET_ERROR)ﻩ{ﻩﻩprintf("recv() Failed:%d",WSAGetLastError());ﻩreturn;ﻩ}ﻩprintf("recv() datafrom server:%s\n",buf);}closesocket(sClient);ﻩWSACleanup();}Server:#include<Winsock2、h>#include<stdio、h>#include<stdlib、h>#pragma ment(lib,"ws2_32、lib")//服务器使用得端口号为5050#define DEFAULT_PORT 5050void main(){ﻩint iPort=DEFAULT_PORT;WSADATA wsaData;ﻩSOCKET sListen,ﻩﻩsAccept;ﻩ//客户端地址长度int iLen;//发送得数据长度ﻩint iSend;//要发送给客户端得信息ﻩchar buf[]="I am a server、";//服务器与客户端得IP地址struct sockaddr_in ser,ﻩﻩcli;printf("---------------------------\n");ﻩprintf("Serverwaiting\n");ﻩprintf("---------------------------\n");ﻩif(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf("Failed to load Winsock、\n");ﻩreturn;ﻩ}ﻩ//创建服务器端套接口ﻩsListen=socket(AF_INET,SOCK_STREAM,0);if(sListen==INVALID_SOCKET)ﻩ{ﻩﻩprintf("socket() Failed:%d\n",WSAGetLastError());ﻩreturn;ﻩ}//以下建立服务器端地址ﻩser、sin_family=AF_INET;//htons()函数把一个双字节得主机直接顺序得数据转换为网络直接顺序得数ﻩser、sin_port=htons(iPort);ﻩ//htonl()函数把一个四字节得主机直接顺序得数据转换为网络直接顺序得数ﻩ//使用系统制定得IP地址INADDR_ANYser、sin_addr、s_addr=htonl(INADDR_ANY);if(bind(sListen,(LPSOCKADDR)&ser,sizeof(ser))==SOCKET_ER ROR){ﻩprintf("bind() Failed: %d\n",WSAGetLastError());ﻩreturn;ﻩ}ﻩ//进入监听状态ﻩif(listen(sListen,5)==SOCKET_ERROR)ﻩ{ﻩprintf("listen() Failed:%d\n",WSAGetLastError());ﻩﻩreturn;}ﻩ//初始化客户端地址长度参数iLen=sizeof(cli);ﻩ//进入一个无限循环,等待客户得连接请求while(1){ﻩﻩsAccept=accept(sListen,(struct sockaddr*)&cli,&iLen);ﻩif(sAccept==INVALID_SOCKET){ﻩﻩprintf("accept() Failed: %d\n",WSAGetLastError());ﻩbreak;ﻩﻩ}ﻩ//输出客户IP地址与端口号ﻩprintf("Acceptedclient IP:[%s],port:[%d]\n",ine t_ntoa(cli、sin_addr),ntohs(cli、sin_port));ﻩ//给建立连接得客户发送信息ﻩﻩiSend=send(sAccept,buf,sizeof(buf),0);if(iSend==SOCKET_ERROR)ﻩ{ﻩﻩprintf("send() Failed:%d\n",WSAGetLastError());ﻩbreak;ﻩ}ﻩﻩelse if(iSend==0)ﻩbreak;ﻩﻩelseﻩ{printf("send() byte:%d\n",iSend);printf("---------------------------\n");ﻩ}ﻩclosesocket(sAccept);ﻩ}closesocket(sListen);ﻩWSACleanup();}实验截图:实验二基于TCP协议得客户/服务器通信程序实验目得:通过实验,使学生熟悉并掌握运用TCP/IP技术进行网络编程得基本知识,加深对课堂教学内容得理解,掌握套接字网络通信编程技术,能够运用VC++为开发工具编程解决网络通信中得实际问题,进行一些简单得网络应用程序设计。
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();}。
2019-计算机网络第三次实验报告-word范文模板 (7页)
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==计算机网络第三次实验报告篇一:计算机网络实验报告一实验一:网络常用命令的使用一、实验目的:1. 了解或掌握一些网络常用命令;2. 掌握Ping、IPconfig、arp等命令的功能及一般用法;3. 能应用上述命令进行网络连通、网络状态、网络配置等。
二、实验环境:1. 运行Windows 201X / 201X Server / XP操作系统的PC一台;2. 每台PC 具有一块以太网卡,通过双绞线与局域网相连。
三、实验内容与要求:1. 进入DOS模式:“开始”-> “所有程序”->“附件”-> “命令提示符”;[第1页][201X.3.制]2. 参照附件一:IP地址的查看与配置,完成其中实验要求,并回答下面的问题:(1)使用“ipconfig”命令,查看本机的IP地址是什么?并记录下来。
(2)使用“ipconfig”命令,怎样查看本机的物理地址?截屏记录,并根据截屏回答物理地址具体是多少?3. 参照附件二:网络连通性的测试,完成其中实验要求,并回答下面的问题:(1)使用ping命令测试网络时,本机通常向被测试计算机发几次请求?(2)执行“ping ”,是否可以获取对应的IP地址?截屏记录其IP地址。
(3)执行“ping ”和“ping ”,记录两者执行后的参数“平均往返时延”各为多少?并截屏记录。
[第2页][201X.3.制](4)执行ping命令,要求向香港科技大学ust.hk一次性发送10个报文请求。
截屏记录操作结果。
(5)执行ping命令,要求向香港科技大学ust.hk发送报文请求的长度分别为500B和201XB。
截屏记录操作结果。
[第3页][201X.3.制]4. 参照附件三:理解ARP协议,完成其中实验要求,并回答下面的问题:(1)使用“arp -a”查看本机ARP选路表中的内容,并需截屏记录。
tcpip实验报告
实验一Linux内核通用链表的使用一、实验目的学习Linux内核通用链表的设计原理,熟练掌握Linux内核通用链表的使用。
二、实验内容1、掌握Linux通用链表的创建2、掌握通用链表添加元素、删除元素和遍历链表的方法3、掌握通用链表的查找方法三、实现原理Linux的内核源文件list.h提供了所有的链表定义,以及各类链表的操作接口和实现。
其中创建链表的方法如下:LIST_HEAD(my_list);在指定的head后插入新节点,常用于堆栈数据结构的实现list_add(structlist_head *new, structlist_head *head);在指定的head前插入新节点,常用于队列数据结构的实现list_add_tail(structlist_head *new, structlist_head *head);从链表中删除一个指定节点list_del(structlist_head *entry);根据当前链表节点指针ptr获得宿主节点指针list_entry(ptr, type, member);遍历链表list_for_each(pos, head);四、实现代码和运行结果#include <stdio.h>#include <malloc.h>#include "list.h"struct user{int id;structlist_head list;};int main(void){struct user *p;LIST_HEAD(user_queue);for (inti = 0; i< 10; i++){p = (struct user *)malloc(sizeof(struct user));p->id = i;list_add_tail(&p->list, &user_queue);}structlist_head *q;list_for_each(q, &user_queue){p = list_entry(q, struct user, list);printf("%d\n", p->id);}return 0;}#include <stdio.h>#include <malloc.h>#include "list.h"struct user{char username[20];int id;structlist_head list;};int main(void){struct user *p;LIST_HEAD(head);for (inti; i< 10; i++){p = (struct user *)malloc(sizeof(struct user)); p->id = i + 1;printf("user %2d, Please input username: ", i+1); scanf("%s", p->username);list_add_tail(&(p->list), &head);}structlist_head *tmp;list_for_each(tmp, &head){p = list_entry(tmp, struct user, list);printf("%d\t%s\n", p->id, p->username);}list_for_each(tmp, &head){p = list_entry(tmp, struct user, list);if (p->id == 5)printf("%s\n", p->username);}return 0;}实验二Linux内核通用哈希链表的使用一、实验目的学习Linux内核通用哈希链表的设计原理,熟练掌握Linux内核通用哈希链表的使用。
电子科技大学_TCPIP实验三_FTP中的TCP传输服务_实验报告
电子科技大学实验报告学号学生姓名:课程名称:TCP / IP任课老师:杨宁实验项目名称FTP中的TCP传输服务实验3:FTP中的TCP传输服务【实验内容】实验拓扑中VMware虚拟机PC2和Server分别位于由提供集线器功能的虚拟网卡VMnet1和VMnet2模拟实现的两个以太网Ethernet1和Ethernet2中,这两个以太网对应的IP子网A和子网B分别连在Dynamips软件模拟实现的路由器R1和R2的F0/0接口上。
R1和R2之间通过PPP链路互联。
Server上开启了匿名FTP服务。
实验者在PC2上分别使用ftp命令和IE浏览器连接FTP服务器下载文件,结合Dynamips 软件的分组捕获功能以及Wireshark软件的捕获分组查看功能,考察在FTP会话过程中TCP 协议的连接建立过程和连接终止过程。
通过分析TCP连接建立和连接终止过程中所捕获的TCP报文段,掌握TCP报文段首部中的端口地址、序号、确认号和各个码元比特的含义和作用;并通过FTP操作体会网络应用程序间的交互模式——客户/服务器(C/S)模式。
【实验步骤】1、依次启动VMware Workstation中TCPIP组内的虚拟机PC2和Server。
2、启动Dynamips Server,然后运行,在Dynagen窗口中提示符“=>”后依次输入以下命令启动路由器R1和R2:=> start R1=> start R23、在PC2上ping Server的IP地址确保整个实验网络运行正常。
4、在Dynagen窗口中提示符“=>”后输入以下命令捕获子网A中的分组:=> capture R1 f0/0 cmdftp.cap5、在PC2的cmd窗口中以命令行的方式启动FTP客户进程登录FTP服务器,下载一份文本文件tcpip.txt后结束FTP客户进程。
该过程中的操作示意如下:(X.X.X.X表示FTP服务器的IP地址,黑斜体表示学生输入内容,其它为系统显示信息)C:\>ftp X.X.X.X……User (X.X.X.X:(none)): ftp……Password: ftp……ftp> get tcpip.txt……ftp> quit2216、在Dynagen窗口中提示符“=>”后依次输入以下命令重新捕获子网A中的分组:=> no capture R1 f0/0=> capture R1 f0/0 ieftp.cap7、在PC2上用IE浏览器作为FTP客户机登录同一台FTP服务器,下载完文本文件tcpip.txt后关闭IE浏览器窗口。
杭州电子科技大学通信工程计算机网络的实验报告3【范本模板】
计算机通信与网络实验报告姓名:徐一得学号:15081525班级:通信五班上课时间:周四3—5实验名称:TCP/IP Configuration一、实验目的(1) To learn TCP/IP configuration。
(2) To learn the basic command of dos。
二、实验内容与要求1. Click Start and then click Run。
Type the command or cmd and then press Enter。
2。
At the DOS prompt,type NET HELP and press Enter。
You should see something like the screen below:The command you are interested in is the View command。
To obtain information about it, type NET HELP VIEW, and press Enter。
3. What is the purpose of NET VIEW:The NET VIEW command shows the names of the machines present on your network。
Lists the names of machines on the left,in column labelled “Server name” and another columns labelled “Remark"4. List the machines after you have typed NET VIEW from the command promptHDUSEC-01, HDUSEC-02,HDUSEC-03,……,HDUSEC-48Close the DOS window by typing EXIT on the command line and then press Enter, or by clicking the Close button in the upper right corner of the window。
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 命令的输入,接口连线上的绿灯随时变亮。
计算机网络第三次实验
实验三使用Wireshark分析FTP协议一、实验目的分析FTP协议二、实验环境与因特网连接的计算机,操作系统为Windows,安装有Wireshark、IE等软件。
三、实验步骤HTTP和FTP都可以用来通过网络传输对象和文件,但它们的工作方式截然不同。
HTTP侧重于传送立即浏览的文件或供暂时高速缓存于客户端的文件。
HTTP还侧重于表达那些包含了用于规定文件格式的首部信息,以便让浏览器能正确解释内容。
而FTP却更侧重于专门进行数据传输,让用户自己去决定文件在本机上的存储时间和如何处理数据。
FTP是一种有状态的协议。
FTP客户端与服务器建立一个持续的会话,并通过这个会话发送多个请求。
启动会话要输入用户名和密码,然而许多FTP服务器允许公开访问,即客户端可以使用匿名登录(anonymous)及随意设置的密码连接。
一旦建立连接,对FTP会话的操作类似命令行下的操作,用户在提示符下操作,并能浏览一些文件和目录。
用户在浏览目录时,FTP服务器保持对用户目录位置的跟踪。
用户还可以请求从服务器获取文件或向服务器存储文件,对这些请求的解释与当前工作的目录有关。
FTP总是为正在进行的控制通道维持一个TCP连接,然后建立一个独立的用于数据传输的TCP连接。
控制通道通常建立在从客户端到FTP服务器端口21的连接,它用于描述每一个使用中的数据通道的属性,包括客户端或服务器是否启动传输,以及用什么IP地址和端口连接。
用RFC-Editor搜索功能找到定义FTP协议的RFC文档。
搜索结果表明该RFC文档在URL ftp:///in-notes/rfc 959.txt 找到。
如果你在浏览器窗口中输入以ftp://开头的URL,那么它将作为FTP客户端来获取想要的文件。
1、俘获FTP分组(1)启动Wireshark嗅探器。
(2)使用FTP工具或浏览器进入:ftp:///in-notes,点击文件下载(3)在停止分组俘获。
如图8.1所示:图8.1 俘获的FTP分组2、查看FTP控制通道(1)本地客户端首先为控制通道初始化了一个到服务器上FTP端口(端口21)的TCP连接。
电子科技大学-TCPIP实验3-FTP中的TCP传输服务-报告模板
电子科技大学实验报告学生姓名:学号:指导教师:日期:年月日实验项目名称:报告评分:教师签字:一、实验原理二、实验目的三、实验内容四、实验器材(设备、元器件)五、实验步骤六、实验数据及结果分析1、按捕获顺序记录步骤6中子网A上捕获的所有TCP报文段,记录信息如下:说明:“标志位”=控制字段中置1的标志;“序号”、“确认号”和“窗口”用十六进制表示。
【分析】1)步骤6中的FTP客户以及FTP服务器之间建立了几条TCP连接?每条连接中双方的IP地址、TCP端口号和初始序号分别是多少?2)TCP报文段中的窗口值定义的是该报文段源端还是目的端的发送窗口还是接收窗口?3)实验中哪些类型的TCP报文段首部中携带有MSS的选项信息?2、按捕获顺序记录步骤7中子网A上捕获的所有TCP连接建立、连接终止和连接复位报文段,记录信息如下:说明:“标志位”=控制字段中置1的标志;“序号”、“确认号”和“窗口”用十六进制表示。
【分析】1)步骤7中的FTP客户以及FTP服务器之间建立了几条TCP连接?每条连接中双方的IP地址、TCP端口号和初始序号分别是多少?2)步骤6和步骤7的FTP会话交互有哪些不同?解释产生这些差异的原因。
七、实验结论1、需要用哪些参数来标识一条TCP连接?2、利用记录的TCP报文段信息,在一张时序图中画出步骤6中FTP客户与FTP 服务器之间的整个TCP报文段交互过程。
(要求:在图中注明每个TCP报文段的编号、类型、序号和确认号,并标注出每一条TCP连接的连接建立、数据传输和连接终止阶段。
)八、总结及心得体会九、对本实验过程及方法、手段的改进建议。
TCP-IP实习报告
1 教学实习的目地本阶段实践目的是在结束了《计算机网络与TCP/IP》课程的学习之后,综合利用所学知识完成一个综合设计题目。
本阶段实践的主要任务是通过解决实际问题,巩固和加深《计算机网络与TCP/IP》课程中所学的理论知识和实际应用能力,通过实践教学的训练,基本掌握分析问题、解决问题的基本技能和技巧,包括问题描述、分析、设计、实现、测试等;熟悉网络项目设计、实现的规范和培养团体协作精神,获得初步的网络应用经验,为以后从事生产和科研工作打下一定的基础。
2 教学实习的内容实施实验网络系统集成,具体包括需求分析,构建网络环境,系统配置,应用集成,系统测试与调整。
3教学实习设计介绍3.1 设计题目《教室、办公、管理三个子网环境的设计》3.2 设计目标采用100/1000Mbps交换网络实现校区内部高速互联,连接主楼和二号教学楼,增加信息点若干个。
将学校的各种PC机、服务器、终端设备和局域网连接起来,整合现有的网络资源,改善与Internet/Cernet相连的网络性能。
构建一个以计算机多层交换网络为框架,以网络基本应用、网络管理、计算机多媒体辅助教学、电子化图书馆、教学管理办公自动化为平台的校园网,并逐步形成数字化校园网络。
3.3系统的主要功能3.3.1办公自动化基于Web综合管理信息系统,提供行政、人事、学籍、教学、后勤、财务管理、公文收发管理、教师档案管理、学生档案管理、科技档案管理等,使学校日常办公无纸化,减少办公开支,提高办公效率。
3.3.2网络多媒体教学将计算机多媒体视听引入课堂教学,使声音、图像、动画的普遍采用可以大大提高教学效果,使每一节课都能够得到有效的作用。
3.3.3学生自主学习针对不同的学生,提供不同的教学内容,采取不同的教学手段。
主要采用基于VOD、WEB及FTP的课件、光盘软件、Internet资源,学生可以根据自己的需要自由选择所需内容。
3.3.4电子图书馆基于Web的图书音像资料供学生随时阅读,并与Internet连接,使图书馆得到进一步拓展,使学生能够得到近乎无限的网上资源。
电子科技大学计算机网络实验报告材料2017计算机学院
计算机专业类课程实验报告课程名称:计算机网络学院:计算机科学与工程学院专业:数字媒体技术学生姓名:tss学号:20150605010指导教师:日期:2017年5月21日电子科技大学实验报告实验一一、实验名称:交换机和路由器的基本配置二、实验学时:1三、实验内容和目的:理解和掌握交换机和路由器的工作原理;掌握交换机和路由器命令行各种操作模式的区别;能够使用各种帮助信息,以及用命令进行基本的配置。
四、实验原理:交换机和路由器(以下简称设备)的管理方式基本分为两种:带内管理和带外管理。
通过设备的Console口管理设备属于带外管理,不占用设备的网络接口,其特点是需要使用配置线缆,近距离配置。
第一次配置交换机或路由器时必须利用Console端口进行配置。
交换机或路由器的命令行操作模式,主要包括:用户模式、特权模式、全局配置模式、端口模式等几种。
本次实验学习多种模式之间的切换,以及路由器与交换机的基本配置。
五、实验器材(设备、元器件)Cisco网络设备模拟器六、实验步骤:交换机的配置第一步:交换机各个操作模式直接的切换使用enable进入特权模式,configure terminal进入配置模式第二步:交换机命令行界面基本功能使用?可以输出在当前模式下可能的命令第三步:配置交换机的名称和每日提示信息使用banner motd $,可以设置交换机进入时的提示语言。
通过$结束信息第四步:配置接口状态第五步:查看交换机的系统和配置信息第六步:保存配置Copy running-cofig startup-config 将现有的配置保存到启动配置里Write memory , write 写入配置到nvram内路由器的配置第一步:配置路由器的接口并查看接口配置进入config模式,interface fastEthernet 0/1进入接口配置,ip address 192.168.1.1 255.255.255.0配置好接口上的子网第二步:显示路由表的信息在特权模式下输入show ip route七、实验数据及结果分析:(删去无用的默认部分,留下配置部分)交换机running-configSW-1#show running-configBuilding configuration...Current configuration : 1143 bytes!version 12.1!hostname SW-1!spanning-tree mode pvst!interface FastEthernet0/1description "this is a accessable port!!!" duplex halfspeed 10!interface Vlan1no ip addressshutdown!banner motd ^CWelcome to SW-1!!!!!!!^C!line con 0!line vty 0 4loginline vty 5 15login! !end路由器running-configRouter#show running-config Building configuration...Current configuration : 419 bytes!version 12.2!hostname Router!ip cefno ipv6 cef!interface FastEthernet0/0ip address 192.168.1.1 255.255.255.0 duplex autospeed auto!ip classless!ip flow-export version 9!line con 0!line aux 0!line vty 0 4login!end八、实验结论、心得体会和改进建议:第一次操作真正的路由器,与之前在家用路由器上玩openwrt,dd-wrt,padavan之类的系统完全不一样。
电子科大 tcpip实验报告三 ftp中的tcp传输服务
电子科技大学实验报告学生姓名:学号:指导教师:日期:年月日实验项目名称:报告评分:教师签字:一、实验原理FTP协议是一个用于文件传输的应用层协议,采用客户/服务器模式实现文件传输功能,使用TCP协议提供的面向连接的可靠传输服务。
FTP客户和服务器之间使用2条TCP连接来传输文件:控制连接(TCP端口21)和数据连接(TCP端口20)。
在整个FTP会话交互过程中,控制连接始终处于连接状态;数据连接则在每一次文件传送时使用PORT命令或PASV命令打开,文件传送完毕后关闭。
因此,整个FTP会话中如果传送多个文件,那么数据连接会打开和关闭多次。
TCP协议(RFC 793)是一个面向连接的、可靠的运输层协议,通过连接建立和连接终止这两个过程完成面向连接的传输。
TCP的连接建立通常被称为“三向握手”。
在建立TCP连接之前,服务器程序需要向它的TCP模块发出被动打开请求,表示该服务器已经准备好接受客户的连接。
客户程序则要向它的TCP模块发出主动打开请求,表示该客户需要连接特定的服务器。
然后即可开始建立TCP连接。
以客户端主动连接TCP连接为例,TCP连接建立过程如下:(1)客户端TCP发送一个SYN报文段。
该报文段包括源端口号、目的端口号、客户的初始序号、客户可接收的TCP报文段数据的最大长度(MSS)等信息。
(2)服务器端TCP收到客户端的SYN报文段后,返回一个SYN和ACK报文段。
该报文段使用ACK标志和确认号字段确认已经收到了客户端的SYN报文段,另外对服务器端的报文段进行初始化。
(3)客户端TCP收到服务器端的SYN和ACK报文段后,发送一个ACK报文段。
该报文段使用ACK标志和确认号字段确认已经收到了服务器端的SYN和ACK报文段。
TCP连接中的任何一方(客户或服务器)都可以关闭连接。
当一方的连接被终止时,另一方还可以继续向对方发送数据。
因此,要关闭双向的TCP连接就需要4个动作。
以客户端主动关闭TCP连接为例,TCP连接终止过程如下:(1)客户端TCP发送一个FIN报文段,宣布它要终止连接。
TCP_IP实验报告
+-------------------------------+
|
+---------------------------+
| Local Network Protocol | Network Level
+---------------------------+
while(true){
printf("请输入要登陆的IP:");
scanf("%s",&servername);
to.sin_addr.s_addr = inet_addr(servername);
printf("正在连接...\n");
result = connect(client,(struct sockaddr *)&to,sizeof(to));
if(SOCKET_ERROR==result)
{
//连接失败
printf("对不起,无法连接到目标主机!\n");
WSACleanup();
return 0;
} else{
cansend=false;
recv(client,receive,sizeof(receive),0);
printf("*******欢迎消息消息*******\n");
server = socket(AF_INET,SOCK_STREAM,0);
if(server==INVALID_SOCKET )
{
printf("无法创建套接字!\n");
TCP 实验三FTP中的TCP传输服务
电子科技大学实验报告学生姓名:学号:指导教师:日期:2013 年12 月 2 日实验项目名称:FTP中的TCP传输服务报告评分:教师签字:一、实验原理FTP协议是一个用于文件传输的应用层协议,采用客户/服务器模式实现文件传输功能,使用TCP 协议提供的面向连接的可靠传输服务。
FTP客户和服务器之间使用2条TCP连接来传输文件:控制连接(TCP端口21)和数据连接(TCP端口20)。
在整个FTP会话交互过程中,控制连接始终处于连接状态;数据连接则在每一次文件传送时使用PORT命令或PASV命令打开,文件传送完毕后关闭。
因此,整个FTP会话中如果传送多个文件,那么数据连接会打开和关闭多次。
TCP协议(RFC 793)是一个面向连接的、可靠的运输层协议,通过连接建立和连接终止这两个过程完成面向连接的传输。
TCP的连接建立通常被称为“三向握手”。
在建立TCP连接之前,服务器程序需要向它的TCP模块发出被动打开请求,表示该服务器已经准备好接受客户的连接。
客户程序则要向它的TCP模块发出主动打开请求,表示该客户需要连接特定的服务器。
然后即可开始建立TCP连接。
以客户端主动连接TCP连接为例,TCP连接建立过程如下:(1)客户端TCP发送一个SYN报文段。
该报文段包括源端口号、目的端口号、客户的初始序号、客户可接收的TCP报文段数据的最大长度(MSS)等信息。
(2)服务器端TCP收到客户端的SYN报文段后,返回一个SYN和ACK报文段。
该报文段使用ACK 标志和确认号字段确认已经收到了客户端的SYN报文段,另外对服务器端的报文段进行初始化。
(3)客户端TCP收到服务器端的SYN和ACK报文段后,发送一个ACK报文段。
该报文段使用ACK 标志和确认号字段确认已经收到了服务器端的SYN和ACK报文段。
TCP连接中的任何一方(客户或服务器)都可以关闭连接。
当一方的连接被终止时,另一方还可以继续向对方发送数据。
因此,要关闭双向的TCP连接就需要4个动作。
三次握手试验
一、实验目的●掌握TCP 协议建立连接的工作原理(包括TCP部中各字段的含义及作用,三次握手的过程)。
●能够分析TCP 协议的建立连接的过程,理解TCP会话的概念。
二、实验原理TCP 协议是面向连接的、端到端的可靠传输协议,它支持多种网络应用程序。
TCP 必须解决可靠性,流量控制的问题,能够为上层应用程序提供多个接口,同时为多个应用程序提供数据,TCP 也必须能够解决通信安全性的问题。
三、实验内容和要求用“网络协议仿真教学系统”仿真实现TCP建立连接的三次握手过程。
要求[1].在仿真机上浏览一个WEB服务器,用协议分析器查看TCP建立连接的三次握手会话;试验结果如下:要求[2].启动仿真编辑器的“TCP拦截”功能;要求[3].用仿真编辑器构造并发送与web服务器第一次握手TCP报文(SYN X),用协议分析器捕捉并查看该报文;此时将seq设置为1;syn设置为1;建立第一次握手连接;要求[4].用协议分析器捕捉并查看web服务器发回的第二次握手TCP 报文(ACK X+1,SYN Y);第二次握手连接建立后ack=1;syn=1,seq为系统自动生成的值2255574150;服务器确认仿真编译器的请求,并反向请求;要求[5].用仿真编辑器构造并发送与web服务器第三次握手TCP报文(ACK Y+1);用协议分析器捕捉并查看该报文;此时seq为第二次握手连接时的ack值,ack为第二次握手连接时的seq值2255574150+1=2255574151;syn为0;仿真编译器确认与服务器建立连接。
要求[6].停止仿真编辑器的“TCP拦截”功能,重新3、4、5步,记录结果。
在第二次握手后出现错误,产生RST复位。
四、思考题1、TCP、IP、以太网协议的依赖和封装关系。
TCP数据包封装在ip数据包中,ip数据包封装在Mac帧中发送;TCP数据包中包括序号和确认,IP层也把从TCP层接收来的数据包传送到更低的网络接口层。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实用文档电子科技大学实验报告名:学生姓号:学TCP/IP协议名课程称:教指导师:2016 年 11 日期:月 26 日OSPF实验项目名称:协议的多区域特性分:告报评教师签字:实用文档一、实验原理OSPF 协议(RFC 2328)是一个基于链路状态路由选择的内部网关协议:路由器仅在网络拓扑变化时使用洪泛法(flooding)将自己的链路状态更新信息扩散到整个自治系统中。
为了增强 OSPF 协议的可伸缩能力(Scalability),OSPF 协议引入了区域的概念来有效并及时的处理路由选择。
OSPF 区域是包含在 AS 中的一些网络、主机和路由器的集合,自治系统中所有 OSPF 区域必须连接到一个主干区域(Area 0)上。
区域内的 OSPF 路由器(内部路由器,IR)使用洪泛法(flooding)传送本区域内的链路状态信息,区域边界的 OSPF 路由器(区域边界路由器,ABR)将本区域的信息汇总发给其他区域,自治系统边界的 OSPF 路由器(自治系统边界路由器,ASBR)将自治系统外的路由(外部路由)发布在自治系统中。
主干区域中的 OSPF 路由器也称为“主干路由器”(BR)。
ABR 不能向 OSPF 残桩区域(Stub Area)通告外部路由。
在多址网络中,为了避免不必要的链路状态洪泛,需要选举 1 个指定路由器(DR)和 1 个备份指定路由器(BDR)。
OSPF 协议有 5 种类型的报文,它们被直接封装在 IP 分组中多播发送。
- 问候(Hello)报文:用来建立并维护 OSPF 邻接关系。
在建立了邻接关系后, OSPF 路由器会定期发送 Hello 报文,来测试邻站的可达性。
- 数据库描述(DBD)报文:描述 OSPF 路由器的链路状态数据库的概要信息,即数据库中每一行的标题,它在两台相邻路由器彼此建立邻接关系时发送的。
- 链路状态请求(LSR)报文:由需要若干条特定路由信息的路由器发送出的,它的回答是 LSU 报文。
新接入的路由器在收到 DBD 报文后,可以使用 LSR 报文请求关于某些路由的更多信息。
- 链路状态更新(LSU)报文:OSPF 的核心。
OSPF 路由器使用 LSU 报文通告链路状态更新信息(即链路状态通告,LSA)每一个 LSU 报文可包含几个 LSA。
, OSPF 协议的 LSA 有 5 种常用类型:路由器链路 LSA、网络链路 LSA、汇总链路到网络 LSA、汇总链路到 ASBR LSA 和外部链路 LSA。
5 种类型的 LSA这由不同类型的 OSPF 路由器产生,在特定类型的区域范围内扩散。
- 链路状态确认(LSAck)报文:用来确认每一个收到的 LSU 报文,使得 OSPF 协议的路由选择更加可靠。
二、实验目的1、掌握 OSPF 协议中区域的类型、特征和作用2、掌握 OSPF 路由器的类型、特征和作用实用文档3、掌握 OSPF LSA 分组的类型、特征和作用4、理解 OSPF 区域类型、路由器类型和 OSPF LSA 分组类型间的相互关系三、实验内容实验拓扑中Dynamips软件模拟实现的路由器R1~R6互联了2个自治系统(AS 10和AS 20),路由器之间使用OSPF协议进行路由选择。
AS 10中有5个子网,划分了3个区域:Area 0、Area 1和Area 2,其中Area 2是一个Stub区域。
AS 20中有1个子网,其路由信息将以OSPF的外部路由方式发布到AS 10的OSPF网络中。
实验者使用Dynamips软件捕获子网1、2、3上传送的OSPF报文,使用Wireshark软件查看捕获的OSPF报文,分析OSPF协议的路由更新过程,考察OSPF协议中不同类型的区域、路的特征和作用。
LSA由器和四、实验器材(设备、元器件)装有相关软件的机房电脑实用文档五、实验步骤1、启动Dynamips Server,然后运行,在Dynagen窗口中提示符“=>”后依次输入以下命令启动路由器R1~R6,并分别进入R1和R6的CLI:=> start R1=> start R2=> start R3=> start R4=> start R5=> start R6=> con R1=> con R62、分别在R1的CLI提示符“R1>”以及R4的CLI提示符“R4>”后输入“show ip route”命令查看两台路由器当前的路由表,确保实验网的OSPF协议已经收敛。
R1> show ip routeR4> show ip route3、在Dynagen窗口中提示符“=>”后输入以下命令捕获子网2、3、4和5中的分组:=> capture R2 s1/0 2.cap HDLC=> capture R3 s1/0 3.cap HDLC=> capture R4 f0/0 4.cap=> capture R5 f0/0 5.cap4、1分钟后,在路由器R1的CLI中输入以下命令断开R1与子网1的连接(如图B所示):en 对应的CLI提示符为“R1>”conf t 对应的CLI提示符为“R1#”int f0/1 对应的CLI提示符为“R1(config)#”shut 对应的CLI提示符为“R1(config-if)#”5、1分钟后,在路由器R1的CLI中输入以下命令恢复R1与子网1的连接,并在路由器R4的CLI 中输入以下命令将到AS 20中子网20.0.0.0/16的路由以外部路由的方式发布到AS 10的OSPF 网络中(如图C所示):R1:en 对应的CLI提示符为“R1>”实用文档conf t 对应的CLI提示符为“R1#”int f0/1 对应的CLI提示符为“R1(config)#”no shut 对应的CLI提示符为“R1(config-if)#”R4:en 对应的CLI提示符为“R4>”conf t 对应的CLI提示符为“R4#”router ospf 1 对应的CLI提示符为“R4(config)#”redis static sub 对应的CLI提示符为“R1(config-router)#”6、1分钟后,在Dynagen窗口中提示符“=>”后输入以下命令停止捕获:=> no capture R2 s1/0=> no capture R3 s1/0=> no capture R4 f0/0=> no capture R5 f0/07、用Wireshark软件查看并分析捕获的分组文件(2.cap、3.cap、4.cap和5.cap)中的OSPF 报文,查看过滤条件为“ospf”(在Wireshark主窗口界面“过滤工具栏”的“Filter:”域中输入)。
8、实验结束后,按照以下步骤关闭实验软件、上传实验数据、还原实验环境:(1)关闭R1、R4的CLI窗口,在Dynagen窗口中提示符“=>”后依次输入以下命令关闭Dynagen 窗口,然后再关闭Dynamips Server窗口:=> stop /all=> exit(2)运行所在目录下的“reset.bat”文件。
六、实验数据及结果分析1、步骤2中根据R1路由表和R4路由表中的哪些信息可以确保实验网中的OSPF 协议已经收敛?为什么?答:两个路由器的表项对应路径相符合。
因为OSPF是各个路由器将自己的路由信息广播给其他路由器,所以当R1和R4的表项信息相符的时候就能够确定其已经收敛了。
2、分析执行步骤4之前在4个子网上捕获的OSPF报文。
记录子网2、3、4和5上每一台路由器发送的1个OSPF Hello报文的如下信息:实用文档【分析】 OSPF hello间隔是多少秒?1)实验中的 10s。
答:信和BDR?为什么?根据记录中的DR和BDRDR)2 是否4个子网上都选举有。
在本实验的后续步骤中,和BDR中子网4上的DR息,用路由器编号写出图A 和DRBDR是否会改变?各子网上的就没有。
R3不是,因为指定路由接口不一定存在,如上表中路由器R2和答:。
AS2 不会,因为子网路由拓扑并没有改变,只是在R4外添加了按报文。
4个子网上捕获的OSPF之前在、分析从执行步骤34开始到执行步骤5个非类报文概要,要求:从第OSPF1报文的捕获顺序记录每个子网上捕获到的)报文,hello1OSPFhello1型(即报文)的报文开始记录,包括后续的类型(实用文档实用文档实用文档【分析】)224.0.0.5224.0.0.6和)为什么会在实验中捕获到两种不同目的IP地址(1 报文?的LSU发224.0.0.6 IP 地址在多路访问网络中,非DR/BDR 路由器只能以目的答:报文。
因发送LSU 224.0.0.5 DR/BDR 路由器则以目的IP 地址送 LSU 报文,LSU 报文。
此会在实验中捕获到两种不同目的IP 地址的报文进行确认。
为什,即对收到的每个LSU OSPF要求路由器确认收到的LSA2) 1个?报文,但LSAck 报文却只有么在子网4上捕获到了2个LSU报文进行确认的方式有两种:一种是发送包LSU OSPF 答:路由器对收到的另一种则是发报文进行显式确认,LSA 首部信息的LSAck 含收到的LSU 报文中中,1 在子网信息的LSU 报文中LSA LSU 报文进行隐式确认。
送包含收到的路OSPF LSA 洪泛给本子网上的所有,需要将收到的LSU 报文中携带的是R5DR不需要再次采取了隐式确认的方式。
R2 ,因此R3 对收到的LSA 由器,包括R3个1 R4 LSA,所以采取了显式确认的方式,发送了洪泛收到的LSU 报文中的报文。
LSAck个子网上捕45之前在、按报文捕获顺序,记录从执行步骤44开始到执行步骤实用文档实用文档【分析】R12上报文(例如:Area 1中子网1)同一Area内不同发送者发送的LSU内容是否完全一报文)中携带的LSA上R2发送的LSU发送的LSU报文和子网3首部中报文的OSPFLSA首部中的通告路由器、该LSU报文中,致?在LSU1个地址,它们指的是分组首部中的源IPOSPF报文的IP的路由器ID,以及封装该什么路由器?是否是同一台路由器?内报文中携带的LSA 1 个子网上捕获到的不同发送者发送的LSU 答:同通告的路由器,携带该LSA 的通告路由器指的是始发这条容完全一致。
LSA报文的OSPF 首部的路由器ID 和封装该LSA 通告的LSU报文中OSPF报文的路由器。
发送LSU 分组首部中的源IP 地址指的都是发送这个IP报文的路由器不一定是携带在该报文中的LSA 通告路由器。