实验7_北航研究生计算机网络实验
计算机网络实验 第7章 综合实验

任务二:观察PC0访问网站的过程,并综合运用所学到的计算机网络 知识,分析该访问过程所涉及的协议事件,理解各协议如何协同工作
01
step
02
step
观察DHCP动态主机配置过程 • 重新打开练习文件,并快速进入模拟模式; • 使用Inspect检查工具打开PC0的端口状态总表; • 运行模拟,并观察DHCP的交互过程; 观察ARP的执行情况 • 重新打开练习文件,进入模拟模式,并启用Router1的Se0/1接口; • 分别检查PC0、DNS服务器、Router0、Router1和Web服务器的 ARP表; • 打开PC0的Web浏览器,输入,单击 Capture/Forward按钮观察ARP的执行情况。可以发现在PC0请求网 页过程中先后总共执行3次ARP,分别是: • ① PC0查询DNS服务器192.168.1.253的MAC地址; • ② PC0查询网关192.168.1.254的MAC地址; • ③ Router2查询网站192.168.4.253的MAC地址。
图7-13 Cisco的三层分层模型
2.1
背景知识
其中每一层都有其特定的功能,详细说明如下: ①核心层(Core Layer)位于网络的最顶层,被视为主干网络,其主要 功能是实现快速而可靠的数据传输。核心层的性能和可靠性对整个网络的性 能和可靠性是至关重要的。因此在设计核心层时,只将高可靠性、高速的传 输作为其设计目标,而影响传输速度的数据处理不放在核心层实现。核心层 交换机需要具有较高的可靠性和性能。 ②汇聚层(Distribution Layer)位于核心层和接入层中间,负责连接接 入层和核心层,将众多的接入层接入点汇集起来,屏蔽接入层对核心层的影 响。汇聚层需要实现一些网络策略,包括提供路由、实现包过滤、网络安全、 创建 Vlan 并实现Vlan 间路由、分割广播域、 WAN 接入等。汇聚层交换机仍 需要较高性能和比较丰富的功能。 ③接入层(Access Layer)又称为桌面层,提供用户或工作站的网络接 入,用户可以通过接入层访问网络设备。接入层交换机的数量较多,在设备 选择上需要选择易于使用和维护、具有较高性价比和高端口密度的交换机。
计算机网络实验

计算机网络实验一、实验目的本次计算机网络实验的目的是通过在网络中的数据传输过程中,学习和熟悉 OSI七层模型及 TCP/IP 协议栈、掌握常见的网络诊断工具和指令,了解常用的网络安全攻防技术。
二、实验环境本次实验使用的是 Ubuntu 系统作为实验环境,操作使用 Linux 命令行模式。
需要安装的软件为 Wireshark、Nmap、Telnet、nc 等。
实验所需网络拓扑环境由实验教师提供。
三、实验内容1. 学习 OSI 七层模型和 TCP/IP 协议栈OSI 七层模型包括应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。
TCP/IP 协议栈包括应用层、传输层、网络层和数据链路层。
学完这些理论知识后,需要了解各层在传输过程中所承载的数据类型和主要协议。
2. 了解网络诊断工具和指令网络诊断工具主要包括 Wireshark、Nmap、Telnet、nc 等。
其中 Wireshark 是用于网络分析和诊断的工具,可以详细的分析网络中的流量;Nmap 是一款常用的网络扫描工具,可以检测出网络中存在的主机和开放的端口;Telnet 是一种基于 TCP/IP 协议的远程登录工具,可以通过它来连接远程主机;nc 命令可以快速建立 TCP 或 UDP 连接,并快速发送和接受数据。
3. 理解网络攻防技术中间人攻击等,能够让防范这些攻击变得更加有效。
此外,还需要掌握一些网络安全策略,如访问控制、加密、认证等。
四、实验步骤1. 使用 Wireshark 分析数据包Wireshark 是一款非常强大的网络流量分析软件。
首先需要从镜像端口或 TAP 端口捕获网络流量,并保存下来。
在Wireshark 软件中,打开该数据包文件,即可查看网络中的通信流量、查看数据包的详细信息,并进行一系列的过滤操作。
通过分析数据包,可以了解各层所承载的数据类型和通信细节。
2. 使用 Nmap 扫描主机和端口Nmap 是一款网络扫描工具,可以检测出网络中存在的主机和开放的端口。
计算机网络原理实验七实验报告

计算机⽹络原理实验七实验报告实验七、传输层可靠传输协GBN编程实验报告序号:姓名:学号:成绩指导⽼师:⼀、实验⽬的:1、通过编写实现⼀个简单可靠的数据传输协议GBN的发送和接收代码,模拟可靠数据传输2、理解TCP协议可靠传输的差错检测、重传、累计确认、定时器的可靠传输策略。
⼆、实验指导:参考教材。
三、实验要求:编程实现⼀个GBN传输协议的发送⽅和接收⽅两程序,采⽤编程语⾔不限,要求能将发送――接收流程以及处理⽅法表现出来.附源代码及注释通过本次实验,了解了GBN传输协议的相关知识,因为实验代码是由三部分组成,所以⽤Studio做实验时,要建⽴3个⽂件,⼀个是头⽂件,存放gbn.h, 另外2个是源⽂件,分别存放gbn.c 和 gbn-cs.c,然后再启动调试。
实验代码通过查阅资料很容易理解,但是怎么实现这个程序对我来说是个问题。
后来我把程序分了3部分,⼀个头⽂件和两个源⽂件,通过visual studio可以良好的运⾏,以下为⽼师附带代码的运⾏结果⼀、GBN.h#pragma once#include//基础功能模块的数据结构声明#define BIDIRECTIONAL 1 /* change to 1 if you're doing extra credit and write a routine called B_output *//* a "msg" is the data unit passed from layer 5 (teachers code) to layer4 (students' code). It contains the data (characters) to be delivered tolayer 5 via the students transport level protocol entities. */ struct msg{ char data[20];};/* a packet is the data unit passed from layer 4 (students code) to layer3 (teachers code). Note the pre-defined packet structure, which allstudents must follow. */struct pkt{int seqnum;int acknum;int checksum;char payload[20];};#define WINDOWSIZE 8#define MAXBUFSIZE 50#define RTT 15.0#define NOTUSED 0#define NACK -1#define TRUE 1#define FALSE 0#define A 0#define B 1//⽹络仿真部分数据结构声明***********************************************************struct event{float evtime; /* event time */int evtype; /* event type code */int eventity; /* entity where event occurs */struct pkt *pktptr; /* ptr to packet (if any) assoc w/ this event */ struct event *prev;struct event *next;};/* possible events: */#define TIMER_INTERRUPT 0#define FROM_LAYER5 1#define FROM_LAYER3 2#define OFF 0#define ON 1//基础功能模块的函数声明******************************************************************* void ComputeChecksum(struct pkt *packet);//计算校验和int CheckCorrupted(struct pkt packet);//检查数据是否出错void A_output( struct msg message);//A端向外发送数据void A_input(struct pkt packet);//A端接收数据void A_timerinterrupt();//A计时器超时void A_init();//A端初始化void B_output(struct msg message);void B_input(struct pkt packet);void B_timerinterrupt();void B_init();//⽹络仿真部分的函数声明**************************************************void init(); //初始化仿真器float jimsrand();//随机数发⽣器[0,1]//处理事件列表部分的函数声明*********************************************void generate_next_arrival();//产⽣下⼀个到达的分组void insertevent(struct event *p);//向事件列表中插⼊⼀条新的事件void printevlist();//打印事件列表//******************************************************************** //**********************计时器模块*********************************** void stoptimer(int);//停⽌计时器void starttimer(int,float);//启动计时器//******************************************************************** *//**************************⽹络各层之间传送模块***********************void tolayer3(int AorB,struct pkt packet);//向第3层发送信息void tolayer5(int AorB,char datasent[20]);//向第5层发送信息⼆、GBN.c#include "GBN.h"#include#include#includeextern int TRACE = 1; /* for my debugging */extern int nsim = 0; /* number of messages from 5 to 4 so far */extern int nsimmax = 0; /* number of msgs to generate, then stop */extern float time = 0.000;float lossprob; /* probability that a packet is dropped */ float corruptprob; /* probability that one bit is packet is flipped */ float lambda; /* arrival rate of messages from layer 5 */ int ntolayer3; /* number sent into layer 3 */static int nlost = 0; /* number lost in media */static int ncorrupt = 0; /* number corrupted by media*/static int expectedseqnum = 0; /* expected sequence number at receiver side */static int nextseqnum; /* next sequence number to use in sender side */static int base; /* the head of sender window */struct pkt winbuf[WINDOWSIZE]; /* window packets buffer */static int winfront,winrear; /* front and rear points of window buffer */static int pktnum; /* packet number of window buffer */struct msg buffer[MAXBUFSIZE]; /* sender message buffer */int buffront,bufrear; /* front and rear pointers of buffer */ static int msgnum; /* message number of buffer */int packet_lost =0;int packet_corrupt=0;int packet_sent =0;extern int packet_correct=0;extern int packet_resent =0;int packet_timeout=0;extern struct event *evlist = NULL; /* the event list *///计算校验和void ComputeChecksum( struct pkt *packet){int checksum;int i;checksum = packet->seqnum;checksum = checksum + packet->acknum;for ( i=0; i<20; i++ )checksum = checksum + (int)(packet->payload[i]);checksum = 0-checksum;packet->checksum = checksum;}//检查是否出错int CheckCorrupted(struct pkt packet){int checksum;int i;checksum = packet.seqnum;checksum = checksum + packet.acknum;for ( i=0; i<20; i++ )checksum = checksum + (int)(packet.payload[i]);if ( (packet.checksum+checksum) == 0 )return (FALSE);elsereturn (TRUE);}//A端向外发送数据/* called from layer 5, passed the data to be sent to other side */ void A_output(struct msg message){int i;struct pkt sendpkt;/* if window is not full */if ( nextseqnum < base+WINDOWSIZE ){printf("----A: New message arrives, send window is not full, send new messge to layer3!\n"); /* create packet */sendpkt.seqnum = nextseqnum;sendpkt.acknum = NOTUSED;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = message.data[i];/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet */tolayer3 (A, sendpkt);/* copy the packet to window packet buffer */winrear = (winrear+1)%WINDOWSIZE;pktnum ++;winbuf[winrear] = sendpkt;for (i=0; i<20; i++)winbuf[winrear].payload[i]= sendpkt.payload[i];/* update state variables */nextseqnum = nextseqnum+1;starttimer(A,RTT);B_input(sendpkt);A_input(sendpkt);}/* if window is full */else{printf("----A: New message arrives, send window is full,");/* if buffer full, give up and exit*/if ( msgnum == MAXBUFSIZE){printf (" Error: Sender buffer is full! \n");exit (1);}/* otherwise, buffer the message */else{printf("buffer new message!\n");bufrear = (bufrear+1) % MAXBUFSIZE;for (i=0; i<20; i++)buffer[bufrear].data[i] = message.data[i];msgnum ++;}}}//B端向外发送数据/* called from layer 5, passed the data to be sent to other side */ void B_output(struct msg message) {int i;struct pkt sendpkt;/* if window is not full */if ( nextseqnum < base+WINDOWSIZE ){printf("----A: New message arrives, send window is not full, send new messge to layer3!\n");/* create packet */sendpkt.seqnum = nextseqnum;sendpkt.acknum = NOTUSED;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = message.data[i];/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet */tolayer3 (A, sendpkt);A_input(sendpkt);/* copy the packet to window packet buffer */winrear = (winrear+1)%WINDOWSIZE;pktnum ++;winbuf[winrear] = sendpkt;for (i=0; i<20; i++)winbuf[winrear].payload[i]= sendpkt.payload[i];/* if it is the first packet in window, start timeout */ //if ( base == nextseqnum ) //{//starttimer(A,RTT);//printf("----A: start a new timer!\n");// }/* update state variables */nextseqnum = nextseqnum+1;}/* if window is full */else{printf("----A: New message arrives, send window is full,");/* if buffer full, give up and exit*/if ( msgnum == MAXBUFSIZE){printf (" Error: Sender buffer is full! \n");exit (1);}/* otherwise, buffer the message */else{printf("buffer new message!\n");bufrear = (bufrear+1) % MAXBUFSIZE;for (i=0; i<20; i++)buffer[bufrear].data[i] = message.data[i];msgnum ++;}}}//A端接收数据void A_input(struct pkt packet){struct pkt sendpkt;int i;/* if received packet is not corrupted and ACK is received */if ( (CheckCorrupted(packet) == FALSE) && (packet.acknum != NACK) ) {printf("----A: ACK %d is correctly received,",packet.acknum);packet_correct++;/* delete the acked packets from window buffer */winfront = (winfront+(packet.acknum+1-base)) % WINDOWSIZE; pktnum = pktnum - (packet.acknum+1-base); /* move window base */base = packet.acknum+1;stoptimer(A);if ( base < nextseqnum){//starttimer(A,RTT);printf ("\n\n\nsend new packets!");}/* if buffer is not empty, send new packets */while ( (msgnum!=0) && (nextseqnum/* create packet */sendpkt.seqnum = nextseqnum;sendpkt.acknum = NOTUSED;buffront = (buffront+1) % MAXBUFSIZE;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = buffer[buffront].data[i];/* computer checksum */ComputeChecksum (&sendpkt);/* if it is the first packet in window, start timeout */ if ( base == nextseqnum ){//starttimer(A,RTT);printf ("send new packets!\n");}/* send out packet */tolayer3 (A, sendpkt);/* copy the packet to window packet buffer */winrear = (winrear+1)%WINDOWSIZE;winbuf[winrear] = sendpkt;pktnum ++;/* update state variables */nextseqnum = nextseqnum+1;/* delete message from buffer */msgnum --;}}elseprintf ("----A: NACK is received, do nothing!\n");}//B端接收数据*****************************************************⼀定要调⽤这个/* Note that with simplex transfer from a-to-B, there is no B_output() */ /* called from layer 3, when a packet arrives for layer 4 at B*/void B_input(struct pkt packet){struct pkt sendpkt;int i;/* if not corrupted and received packet is in order */if ( (CheckCorrupted(packet) == FALSE) && (packet.seqnum == expectedseqnum)){printf("\n----B: packet %d is correctly received, send ACK!\n",packet.seqnum);/* send an ACK for the received packet *//* create packet */sendpkt.seqnum = NOTUSED;sendpkt.acknum = expectedseqnum;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = '0';/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet *///tolayer3 (B, sendpkt);/* update state variables */expectedseqnum = expectedseqnum+1;printf("----B:expectedseqnum = %d\n",expectedseqnum);/* deliver received packet to layer 5 *///tolayer5(B,packet.payload);}/* otherwise, discard the packet and send a NACK */else{printf("----B: packet %d is corrupted or not I expects, send NACK!\n",packet.seqnum); /* create packet */sendpkt.seqnum = NOTUSED;sendpkt.acknum = NACK;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = '0';/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet */tolayer3 (B, sendpkt);}}//A计时器超时/* called when A's timer goes off */void A_timerinterrupt(){int i;printf("----A: time out,resend packets!\n");/* start timer */starttimer(A,RTT);/* resend all packets not acked */for ( i=1; i<=pktnum; i++ ){packet_resent++;tolayer3(A,winbuf[(winfront+i)%WINDOWSIZE]);}}//B计时器超时/* called when B's timer goes off */void B_timerinterrupt(){int i;printf("----B: time out,resend packets!\n");/* start timer */starttimer(B,RTT);/* resend all packets not acked */for ( i=1; i<=pktnum; i++ ){packet_resent++;tolayer3(B,winbuf[(winfront+i)%WINDOWSIZE]);}}//A端初始化/* entity A routines are called. You can use it to do any initialization */ void A_init(){base = 0;nextseqnum = 0;buffront = 0;bufrear = 0;msgnum = 0;winfront = 0;winrear = 0;pktnum = 0;}//B端初始化/* entity B routines are called. You can use it to do any initialization */ void B_init(){expectedseqnum = 0;}//初始化仿真器void init() /* initialize the simulator */{int i;float sum, avg;float jimsrand();FILE *fp;fp = fopen ("parameter.txt","r");printf("----- Stop and Wait Network Simulator Version 1.1 -------- \n\n");printf("Enter the number of messages to simulate: ");//fscanf(fp,"%d",&nsimmax);scanf("%d",&nsimmax);printf("\nEnter packet loss probability [enter 0.0 for no loss]: "); //fscanf(fp, "%f",&lossprob);scanf("%f",&lossprob);printf("\nEnter packet corruption probability [0.0 for no corruption]: "); //fscanf(fp,"%f",&corruptprob);scanf("%f",&corruptprob);printf("\nEnter average time between messages from sender's layer5 [ > 0.0]: ");//fscanf(fp,"%f",&lambda);scanf("%f",&lambda);printf("\nEnter TRACE: ");//fscanf(fp,"%d",&TRACE);scanf("%d",&TRACE);printf("\n\n");srand(9999); /* init random number generator */sum = 0.0; /* test random number generator for students */for (i=0; i<1000; i++)sum=sum+jimsrand(); /* jimsrand() should be uniform in [0,1] */avg = sum/1000.0;/*if(avg < 0.25 || avg > 0.75){printf("It is likely that random number generation on your machine\n" ); printf("is different from what this emulator expects. Please take\n"); printf("a look at the routine jimsrand() in the emulator code. Sorry. \n");exit(0);}*/printf("%f",avg);ntolayer3 = 0;nlost = 0;ncorrupt = 0;time=0.0; /* initialize time to 0.0 */generate_next_arrival(); /* initialize event list */}//随机数发⽣器float jimsrand(){double mmm = 2147483647; /* largest int - MACHINE DEPENDENT */ float x; /* individual students may need to change mmm */x = rand()/mmm; /* x should be uniform in [0,1] */return(x);}//**************************************************************************************//*******************************事件处理部分*******************************************void generate_next_arrival(){double x,log(),ceil();struct event *evptr;float ttime;int tempint;//if (TRACE>2)//printf("-----------------GENERATE NEXT ARRIVAL: creating new arrival\n"); x = lambda*jimsrand()*2; /* x is uniform on [0,2*lambda] *//* having mean of lambda */evptr = (struct event *)malloc(sizeof(struct event));evptr->evtime = time + x;evptr->evtype = FROM_LAYER5;if (jimsrand()<0.5){evptr->eventity = A;}elseevptr->eventity = B;insertevent(evptr);}//向事件列表中插⼊⼀条新的事件void insertevent(struct event *p){struct event *q,*qold;if (TRACE>2){//printf(" INSERTEVENT: time is %lf\n",time);//printf(" INSERTEVENT: future time will be %lf\n",p->evtime);}q = evlist; /* q points to front of list in which p struct inserted */if (q==NULL)/* list is empty */{evlist=p;p->next=NULL;p->prev=NULL;}else{for (qold = q; q !=NULL && p->evtime > q->evtime; q=q->next) qold=q; if (q==NULL)/* end of list */{qold->next = p;p->prev = qold;p->next = NULL;}else if (q==evlist)/* front of list */{p->next=evlist;p->prev=NULL;p->next->prev=p;evlist = p;}else /* middle of list */{p->next=q;p->prev=q->prev;q->prev->next=p;q->prev=p;}}}//打印事件列表void printevlist(){struct event *q;int i;printf("--------------\nEvent List Follows:\n");for(q = evlist; q!=NULL; q=q->next){printf("Event time: %f, type: %d entity: %d\n",q->evtime,q->evtype,q->eventity); }printf("--------------\n");}//启动计时器void starttimer(int AorB,float increment){struct event *q;struct event *evptr;。
《计算机网络实验》实验报告-软件实验7

《计算机网络实验》实验报告-软件实验7浙江大学城市学院实验报告课程名称计算机网络实验实验项目名称实验七应用层网络编程(一)学生姓名专业班级学号实验成绩指导老师(签名)日期一. 实验目的和要求1. 通过实现使用Java应用层客户端和服务器来获得关于使用Java Socket网络编程的经验(SMTP、POP3)。
二. 实验内容、原理及实验结果与分析1. SMTP编程(参考电子讲义“网络编程参考资料-应用层.pdf”及教材“第2章 Socket编程”)阅读“网络编程参考资料-应用层.pdf”中 8.3.1部分,实现“SMTP客户机实现”的源代码(SMTPClientDemo.java),并在机器上编译运行通过。
(注:可输入城院SMTP邮件服务器或其他邮件服务器作为SMTP服务器)【程序源代码】【实验结果与分析】2. POP3编程(参考电子讲义“网络编程参考资料-应用层.pdf”及教材“第2章 Socket编程”)阅读“网络编程参考资料-应用层.pdf”中 8.3.2部分,实现“POP3客户实现”的源代码(Pop3ClientDemo.java),并在机器上编译运行通过。
(注:可输入城院POP3邮件服务器或其他邮件服务器作为POP3服务器)【程序源代码】【实验结果与分析】3. Ethereal抓包分析用Ethereal软件截获上面两个程序运行时客户机和服务器之间发送的数据包,并且根据截获的数据包内容进行分析。
【实验结果与分析】三. 讨论、心得记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等。
感谢您的阅读,祝您生活愉快。
实验4_北航研究生计算机网络实验

实验4_北航研究生计算机网络实验第一部分:实验目的本实验旨在帮助研究生理解和掌握计算机网络的基本概念和原理,通过实际操作加深对计算机网络的理解。
通过完成实验,研究生将能够熟练地使用各种网络工具和协议进行网络配置和故障排除,提高其网络管理和维护的能力。
第二部分:实验原理本实验有三个主要的实验内容。
首先,研究生将使用Wireshark软件捕获并分析TCP/IP协议的传输过程,以加深对协议的了解。
然后,研究生将配置并测试一个简单的局域网,了解网络拓扑和设备间的通信方式。
最后,研究生将使用路由器和交换机的配置命令进行网络配置和故障排除。
第三部分:实验步骤2. 在捕获窗口中,选择“Start”按钮开始捕获数据包。
3. 打开一个浏览器窗口,输入一个网址并访问。
在Wireshark软件中可以看到捕获到的数据包。
4. 在Wireshark软件中的数据包列表中,选择一条数据包并点击右键,然后选择“Follow TCP Stream”选项,可以查看这个TCP流的内容。
5.配置一个简单的局域网,使用至少两台计算机和一个交换机。
连接计算机和交换机,并使用交换机上的端口连接计算机。
6. 配置计算机的IP地址和子网掩码,确保两台计算机在同一子网中。
测试两台计算机是否能够互相ping通,以验证配置的正确性。
7. 配置一个路由器,将两个子网连接起来。
配置路由器的IP地址、子网掩码和默认网关。
测试两个子网的计算机是否能够互相ping通,以验证配置的正确性。
8. 配置一个交换机,将多个子网连接起来。
使用交换机的端口连接路由器和各个子网的计算机。
测试各个子网的计算机是否能够互相ping 通,以验证配置的正确性。
第四部分:实验总结通过完成本实验,研究生将对计算机网络的基本原理和概念有更深入的了解。
研究生能够熟练地使用Wireshark软件进行数据包捕获与分析,了解TCP/IP协议的传输过程。
研究生还能够独立配置和维护一个简单的局域网,使用路由器和交换机的命令进行网络配置和故障排除。
实验2_北航研究生计算机网络实验

实验2_北航研究生计算机网络实验引言:计算机网络实验是计算机网络课程中非常重要的一部分。
通过实验,可以加深对计算机网络原理和协议的理解,并且提高实践能力。
在北航研究生计算机网络实验中,实验2是一个关于网络通信的实验,本文将对该实验进行详细描述和分析。
一、实验目的1.通过实验深入了解网络通信原理和实现;2.熟悉并掌握网络通信调试工具的使用方法;3.通过实验提高网络故障排查和修复的能力。
二、实验内容本次实验的内容是使用网络通信技术完成一个具体任务。
实验使用的工具是Wireshark,这是一款常用的网络抓包分析软件。
学生需要在虚拟机上模拟网络环境,并且使用Wireshark工具对网络通信进行抓包和分析。
实验的具体步骤如下:1.准备实验环境:使用虚拟机软件搭建网络环境,一般使用VMware Workstation或VirtualBox软件;2.配置网络参数:为虚拟机配置IP地址、网关地址、子网掩码等网络参数;3.设置Wireshark:在虚拟机上安装Wireshark软件,并进行基础的配置;4.抓包分析:使用Wireshark对网络通信进行抓包,并对抓包结果进行分析;5.故障排查和修复:根据抓包结果分析,定位网络故障的原因,并进行相应的修复。
三、实验结果与分析进行实验后,我们得到了一份Wireshark的抓包结果。
通过对抓包结果的分析,我们可以得到以下结论:1.网络通信存在问题,通信过程中有大量的丢包和重传;2.网络延迟较高,造成通信速度较慢;3.一些数据包在传输过程中被篡改。
根据以上结论,我们可以推断网络通信存在以下问题:1.网络链路质量差,导致数据包丢失和重传;2.网络带宽不足,导致通信速度较慢;3.网络安全问题,导致数据包被篡改。
为了解决以上问题,我们可以尝试以下解决方案:1.改善网络链路质量,可以通过替换网线、调整网络设备位置等方式改善网络信号质量;2.增加网络带宽,可以通过升级网络设备或增加网络带宽来提高通信速度;3.加强网络安全防护,可以使用防火墙软件、数据包加密等方式来防止数据包被篡改。
实验2_北航研究生计算机网络实验

实验2_北航研究⽣计算机⽹络实验实验⼆数据链路层在线实验1.在⽹络课程学习中,802.3和ETHERNETII规定了以太⽹MAC层的报⽂格式分为7字节的前导符、1字节的起始符、6字节的⽬的MAC地址、6字节的源MAC地址、2字节的类型、数据字段和4字节的数据校验字段。
对于选中的报⽂,缺少哪些字段,为什么?答:缺少前导符和起始符,和数据校验字段,这两个字段和校验字段在⽹卡接收MAC帧时被去掉了,因此实验抓包软件的报⽂中没有这些字段。
2.查看交换机的MAC地址表,结果为:答:MAC ADDR VLAN ID STATE PORT INDEX AGING TIME000c-2919-8388 1 Learned Ethernet0/1 99B499-bab9-1336 1 Learned Ethernet0/1 292000c-2940-2cbe 1 Learned Ethernet0/2 281B499-bab9-1338 1 Learned Ethernet0/2 301)、解释MAC地址表中各字段的含义?答:MAC ADDR为设备的MAC 地址VLAN ID为端⼝所在的VLAN编号PORT INDEXT 表⽰源MAC地址为由该端⼝号学习来的STATE 表⽰该记录怎么得来的(学习/配置)AGING TIME 表⽰该记录的⽣命时间2)、这个实验能够说明MAC地址表的学习是来源于数据帧的源MAC地址⽽⾮⽬的MAC地址吗?如果能,为什么?如果不能,试给出⼀个验证⽅法。
答:不能。
⽅法:清空交换机的MAC地址表,断开交换机与PCB的连线,然后ping PCB,查看交换机的MAC地址表,这时MAC 中只有PCA的MAC地址学习记录。
3.在VLAN实验中,实验中的计算机能否通讯,请将结果填⼊下表:4.交换机在没有配置VLAN时,冲突域和⼴播域各有哪些端⼝?配置了VLAN以后呢?答:没有配置VLAN时⼴播域:交换机所有的端⼝是⼀个⼴播域冲突域:每个端⼝是⼀个冲突域配置VLAN:⼴播域:同⼀个VLAN属于⼀个⼴播域冲突域:每个端⼝是⼀个冲突域【本⽂档内容可以⾃由复制内容或⾃由编辑修改内容期待你的好评和关注,我们将会做得更好】。
北航专业综合实验报告

实验名称:网络安全综合实验实验时间: 2023年11月15日实验地点:北京航空航天大学计算机学院实验室实验人员: [姓名]一、实验目的1. 深入理解网络安全的基本概念和原理。
2. 掌握网络安全设备的配置与调试方法。
3. 熟悉网络安全攻防技术,提高安全意识。
4. 培养动手实践能力和团队合作精神。
二、实验内容本次实验主要包括以下内容:1. 路由器配置实验:学习路由器的基本配置,包括IP地址、子网掩码、默认网关等,并实现网络的互连互通。
2. APP欺骗攻击与防御实验:学习APP欺骗攻击的原理,并尝试防御此类攻击。
3. 源IP地址欺骗攻击防御实验:学习源IP地址欺骗攻击的原理,并尝试防御此类攻击。
4. DHCP欺骗攻击与防御实验:学习DHCP欺骗攻击的原理,并尝试防御此类攻击。
5. 密码实验:学习密码学的基本原理,并尝试破解简单的密码。
6. MD5编程实验:学习MD5算法的原理,并实现MD5加密程序。
7. 数字签名综合实验:学习数字签名的原理,并尝试实现数字签名程序。
8. RIP路由项欺骗攻击实验:学习RIP路由项欺骗攻击的原理,并尝试防御此类攻击。
9. 流量管制实验:学习流量管制的原理,并尝试实现流量控制。
10. 网络地址转换实验:学习网络地址转换的原理,并尝试实现NAT功能。
11. 防火墙实验:学习防火墙的配置与调试方法,并尝试设置防火墙规则。
12. 入侵检测实验:学习入侵检测的原理,并尝试实现入侵检测系统。
13. WEP配置实验:学习WEP加密协议的配置方法,并尝试破解WEP加密。
14. 点对点IP隧道实验:学习点对点IP隧道的配置方法,并尝试实现VPN功能。
三、实验步骤1. 路由器配置实验:- 搭建实验环境,连接路由器。
- 配置路由器的IP地址、子网掩码、默认网关等。
- 通过ping命令测试网络连通性。
2. APP欺骗攻击与防御实验:- 利用欺骗软件模拟APP欺骗攻击。
- 分析欺骗攻击的原理,并尝试防御此类攻击。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验九 IPv6实验
1. 3.5节步骤2中,请思考下面问题:
主机加入到组播组中的过程是什么?
答:1. 主机通过地址自动配置,获得多播组地址;
2. 主机发送MLD多播侦听报文给本地链路的路由器;
3. 路由器根据报文中的信息,向多播转发表中添加表项,以记录多播组的成员身份。
4. 3.5节步骤3中,仔细观察PC1与RT1之间的交互报文,回答下述问题:
1) 为什么报文中的“next header”采用hop-by-hop的选项?
答: 因为hop-by-hop选项规定该报文的传送路径上每台中间节点都要读取并处理该拓展报
头,起到提醒路由器对MLD报文进行深入检查的作用。
2) 为什么跳数被限制为1?
答: 为了将此报文限制在链路本地上。
3) 在“Hop-by-Hop”选项中,有一个“Padn”,它的作用是什么?
答: 为了使字段符合对齐要求。
5. 3.5节步骤4中,仔细观察Router Solicitation的报文,回答下述问题:
1) 在前面的multicast listener report报文中,报文的跳数限制为1,而在这里,
同样是主机发给路由器的报文,为什么跳数却采用255?
答: 因为节点只接受跳数限制为Cur Hop Limit字段的RA报文,所以主机无须担心接收到
链路外的RA报文,所以主机在发送RS报文时无须担心RS报文传递到本地链路外。
2) 报文中的ICMP选项中的“source link-layer address”的作用是什么?
答: 表示发送该RS报文的接口的链路层地址,这样路由器在接收到RS报文后无须进行地
址解析就可以返回单播的RA报文。
6. 3.5节步骤6中,仔细观察Router Advertisement的报文,回答下述问题:
1) “Cur hop limit”的含义是什么?
答:主机发送普通报文时使用的默认跳数限制。
2) 报文中“lifetime”的含义是什么?
答: 发送该RA报文的路由器作为缺省路由器的生命周期。
3) “reachable time”的含义是什么?
答:本链路上所有节点的“可达”状态保持时间。
4) “retransmit time”的含义是什么?
答: 重传NS报文的时间间隔,用于邻居不可达检测和地址解析。
5) 这里为什么会有“source link-layer”地址呢?
答: 为了表示路由器发送RA报文的接口的链路层地址。