第一篇:计算机网络实验报告(路由算法、Socket编程)
计算机网络实验报告
班级: 姓名: 学号:
实验一
一. 实验目的及要求
编写程序,模拟距离矢量路由算法的路由表交换过程,演示交换后的路由表的变化。
二. 实验原理
距离矢量路由算法是这样工作的:每个路由器维护一张路由表(即一个矢量),它以网络中的每个路由器为索引,表中列出了当前已知的路由器到每个目标路由器的最佳距离,以及所使用的线路。通过在邻居之间相互交换信息,路由器不断地更新他们的内部路由表。
举例来说,假定使用延迟作为“距离”的度量标准,并且该路由器发送一个列表,其中包含了他到每一个目标路由器的延时估计值;同时,他也从每个邻居路由器接收到一个类似的列表。假设一个路由器接收到来自邻居x的一个列表,其中x(i)表示x估计的到达路由器i所需要的时间。如果该路由器知道他到x的延时为m毫秒,那么他也知道在x(i)+m毫秒之间内经过x可以到达路由器i。一个路由器针对每个邻居都执行这样的计算,就可以发现最佳的估计值,然后在新的路由器表中使用这个最佳的估计值以及对应的输出路线。
三.源程序:
#include “stdio.h” #include “stdlib.h” #include “malloc.h” #include “graphics.h” #include “dos.h” #define VERNUM 7
typedef struct {
int dis;
int flag;
int flag2;}RoutNode;
char tmp[10];RoutNode data[VERNUM][VERNUM];
void welcome();
void InitRoutData(FILE* pfile);
void PrintRoutData();
void SendInf(int recv, int send);
void Exchange();
int main(){
int start, end, i, j, m, n;
FILE *pfile;
welcome();
pfile = fopen(“1.txt”, “r”);
if(pfile == NULL)
{
printf(“the file wrong,press any key to come back.n”);
getch();
return;
}
else
InitRoutData(pfile);
fclose(pfile);
printf(“nthe original route table:n”);
for(i = 0;i { printf(“%c||”, i + 65); for(j = 0;j < VERNUM;j++) if(data[i][j].dis > 0) printf(“<%c %d> ”, j + 65, data[i][j].dis); printf(“n”); } PrintRoutData(); getch(); for(i = 0;i < VERNUM;i++) { for(m = 0;m < VERNUM;m++) for(n = 0;n < VERNUM;n++) data[m][n].flag = 0; Exchange(); PrintRoutData(); getch(); } printf(“nexchange the route table:n”); return 0;} void welcome(){ int gdriver=DETECT,gmode; registerbgidriver(EGAVGA_driver); initgraph(&gdriver, &gmode,“C:Win-TC”); cleardevice(); setbkcolor(CYAN); setviewport(0,0,639,479,1); clearviewport(); setbkcolor(BLUE); setcolor(14); rectangle(200,200,440,280); setfillstyle(1,5); floodfill(300,240,14); settextstyle(0,0,2); outtextxy(50,30,“Distance Vector Routing Algorithm”); setcolor(15); settextstyle(1,0,4); outtextxy(260,214,“Welcome to use!”); line(0,80,640,80); getch(); delay(300); cleardevice();} void InitRoutData(FILE* pfile){ char num[10]; int i = 0; char c; int m, n; fseek(pfile, 0, 0); for(m = 0;!feof(pfile)&& m < 7;m++) { for(n = 0;!feof(pfile)&& n < 7;n++) { while(!feof(pfile)) { c = fgetc(pfile); if(c == ',') { num[i] = ' '; data[m][n].dis = atoi(num); data[m][n].flag = 0; data[m][n].flag = 0; i = 0; break; } /*end of if*/ else if((c >= '0' && c <= '9')|| c == '-') { num[i++] = c; } /*end of else if*/ } /*end of while*/ } /*end of for(n = 0*/ } /*end of for(m = 0*/ } void PrintRoutData(){ int i, j; for(i = 0;i < VERNUM;i++) { settextstyle(1,0,3); sprintf(tmp,“ %c”,i + 65); outtextxy(i*80+50,130,tmp); outtextxy(10,160+i*40,tmp); } for(j = 0;j< VERNUM;j++) { for(i = 0;i < VERNUM;i++) { if(data[i][j].dis <= 0&&i!=j) { if(data[i][j].flag2 ==1) { setfillstyle(SOLID_FILL,5); bar(80*i+50,40*j+155,80*i+120,40*j+185); delay(50000); data[i][j].flag2 =0; } setfillstyle(SOLID_FILL,3); bar(80*i+50,40*j+155,80*i+120,40*j+185); settextstyle(1,0,2); sprintf(tmp,“-”); outtextxy(80*i+65,40*j+165,tmp); } else if(data[i][j].dis >=0) { if(data[i][j].flag2 ==1) { setfillstyle(SOLID_FILL,5); bar(80*i+50,40*j+155,80*i+120,40*j+185); delay(50000); data[i][j].flag2 =0; } setfillstyle(SOLID_FILL,3); bar(80*i+50,40*j+155,80*i+120,40*j+185); settextstyle(1,0,2); sprintf(tmp,“%d”,data[i][j].dis); outtextxy(80*i+65,40*j+165,tmp); } } /*end of for(j = 0*/ } /*end of for(i = 0*/ } void SendInf(int recv, int send){ int i; for(i = 0;i < VERNUM;i++) { if(data[send][i].dis > 0&& data[send][i].flag!=1) { if(data[recv][i].dis <= 0&&recv!=i) { data[recv][i].dis = data[send][i].dis + data[recv][send].dis; data[recv][i].flag =1; data[recv][i].flag2 =1; } else if(data[recv][i].dis > data[send][i].dis + data[recv][send].dis) { data[recv][i].dis = data[send][i].dis + data[recv][send].dis; data[recv][i].flag =1; data[recv][i].flag2 =1; } } /*end of if*/ } /*end of for*/ } void Exchange(){ int i, j; for(i = 0;i < VERNUM;i++) { for(j = 0;j < VERNUM;j++) { if(data[i][j].dis > 0&& data[i][j].flag!=1) { SendInf(i, j); } /*end of if*/ } /*end of for(j = 0*/ } /*end of for(i = 0*/ } 四、实验心得体会 通过本次实验训练,我了解了距离矢量路由算法的基本原理,复习了C语言编程的内容,通过对路由算法的实现,加深了对路由表交换的理解。 实验二 一、实验目的及要求 编写程序,联系Socket编程和TCP/IP协议的应用,要求实现Server端和Client端的信息通信。 二、实验原理 在TCP/IP编程中,为客户端和服务器端提供相同的端口号和IP地址号,实现Server端和Client端互联,运用Java文件流的知识,实现两端的信息传递。 三、源程序 /********************ChatClient*********************/ import java.awt.*;import java.awt.event.*;import java.io.*;import java.io.IOException;import java.net.*; public class ChatClient extends Frame{ Socket s = null;DataOutputStream dos = null;TextField tf = new TextField();TextArea ta = new TextArea(); public static void main(String[] args){ new ChatClient().launchFrame();} public void launchFrame(){ setLocation(400,300);this.setSize(300,300);add(tf,BorderLayout.SOUTH);add(ta,BorderLayout.NORTH);pack();tf.addActionListener(new tfListener());this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ disconn(); System.exit(0); } });setVisible(true);conn();} public void conn(){ try { s = new Socket(“127.0.0.1”,5555); dos = new DataOutputStream(s.getOutputStream()); System.out.println(“客户端连接成功!”);} catch(UnknownHostException e){ e.printStackTrace();} catch(IOException e){ e.printStackTrace();} } public void disconn(){ try { dos.close(); s.close();} catch(IOException e){ e.printStackTrace();} } private class tfListener implements ActionListener { public void actionPerformed(ActionEvent e){ String str = tf.getText().trim(); ta.setText(str); tf.setText(“"); try { dos.writeUTF(str); dos.flush(); } catch(IOException e1){ e1.printStackTrace(); } } } } /********************ChatServer******************/ import java.io.IOException;import java.net.*;import java.io.*; public class ChatServer { public static void main(String[] args){ boolean started = false; try { ServerSocket ss = new ServerSocket(5555); started = true; while(started){ boolean bConn = false; Socket s = ss.accept(); bConn = true; System.out.println(”一个客户端已连接"); DataInputStream dis = new DataInputStream(s.getInputStream()); while(bConn){ String str = dis.readUTF(); System.out.println(str); } } } dis.close();} } catch(IOException e){ e.printStackTrace();} 四、实验心得体会 通过本次实验的练习,熟悉了TCP/IP协议,对套接字等概念有了深入的了解,对用Java语言实现Socket编程并实现客户端和服务器端的信息交互有了一定的了解。 实验心得体会 在本次实验中,我通过对网络课上所学知识的应用,学到了很多实践中的知识。并且加深了我对课本知识的理解和认识,在实验过程中,更容易记忆和深入理解各种协议的工作以及在网络编程中应该注意的一系列问题。 我们的第一个实验是对ARP、ICMP、FTP和HTTP协议的分析和验证。在利用软件Etherpeek抓取在主机通信中的报文,得到了很多的关于这些协议的具体参数。在课程学习过程中,书本和老师给我的感觉就是太枯燥,通过课本的学习根本没有办法理解各种协议的工作细节。有很多的细微之处是想不通的。但是,在本次实验中,我就通过各种报文的分析,看到了网络中不同层次协议之间的协做过程。对应不同层之间就是通过协议来使用,我对整个网路的大体架构有了一个统筹的了解,虽然对很多的更深入的知识不是很了解,但是比我在课上学的东西要更有趣,而且容易学习,更能够我学习的兴趣。 第二个实验是Socket编程实验。在编写网络程序之前,我对网路通信可以说一无所知,根本不知道那些网路上的程序是怎么通过网路进行通信的。在本次实验中,终于揭开了他们神秘的面纱。当然在实验中出现了很多的插曲,我是在Linux环境下编写的程序,很多技术方面的问题都无法解决。查阅书籍和网上咨询才弄懂了他们的来龙去脉,最终是将我的程序编写完了。开始接触网路编程时,那是一头雾水,根本不知从何下手。在看了辅导教员给我们程序之后才有了很多的起色,才能够自己编写程序。在网络编程中,我最深的体会就是对具体的内部细节不熟悉,导致在调试的过程中感觉到很无力。在很多函数的作用下,经常就是一团乱麻。之后,我每次编写之前就是将用到的函数的用法温习一下,最后还是能够解决很多的问题的。 本次试验是我们学习网路的第一次。以前的课程从来没有接触到网路方面的知识。这次的新知识对我们的挑战还算不是太大,通过我们的努力,所有的困难时被克服掉了。其实,实验应该是我们的重点,在以后的工作中要的就是我们的实际的动手能力,如果我们在学习期间就是只学了书本上的知识,那样对理论的了解是不够深刻的,只有通过实验才能激发我们的学习兴趣。总之,我觉得实验才是检验理论的唯一标准。 《算法设计与分析》 实验报告 班级 姓名 学号 ****年**月**日 目录 实验一 二分查找程序实现…………………………………………………………………03页 实验二 棋盘覆盖问题(分治法).…………………………………………………………08页 实验三 0-1背包问题的动态规划算法设计……………………………………………….11页 实验四 背包问题的贪心算法………………………………………………………………14页 实验五 最小重量机器设计问题(回溯法)………………………………………………17页 实验六 最小重量机器设计问题(分支限界法)…………………………………………20页 指导教师对实验报告的评语 成绩: 指导教师签字: ****年**月**日 实验一:二分查找程序实现 一、实验时间:2013年10月8日,星期二,第一、二节地点:J13#328 二、实验目的及要求 目的: 建立算法复杂度的理论分析与实验分析的联系,深刻体会算法复杂度作为算法的好坏评价指标的本质含义。要求: 1、用c/c++语言实现二分搜索算法。 2、通过随机产生有序表的方法,测出在平均意义下算法比较次数随问题规模的变化曲线,并作图。 三、实验环境 平台:Win7 32位操作系统 开发工具:Codeblocks10.05 四、实验内容 对已经排好序的n个元素a[0:n-1],现在要在这n个元素中找出一特定元素x。 五、算法描述及实验步骤 算法描述: 折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果xa[n/2],则我们只要在数组a的右半部继续搜索x。二分搜索法的应用极其广泛,而且它的思想易于理解。确定算法复杂度基本步骤: 1、首先设定问题规模n; 2、随即产生递增数列; 3、在n个有序数中随机取一个作为待查找量,搜索之; 4、记录查找过程中的比较次数,再次生成新的有序表并查找,记录查找次数,每个数组重复10次; 5、改变问题规模n重复上述步骤2~4,n取100、200……1000; 6、依实验数据作图,并与理论图作比较; 7、二分搜索算法平均查找次数: 问题规模为n时,平均查找次数为: A(n)=Int(logn)+ 1/2 // Int()函数为向下取整 即二分搜索算法对于含有n个数据的有序表L平均作了约Int(logn)+1/2次的查找操作。 实验步骤: 1.初始化生成递增随机数列: for(int j=100;j <=1000;j+=100){ array[0]=10+rand()%15; for(int i=1;i array[i]=array[i-1]+1+rand()%3+rand()%10; } } 2.定义二分查找算法: int BinarySearch(const int b[], int searchKey, int low, int high);其中,返回值为int类型,数组b[]为待查递增序列,searchKey为所查数据,low为数组b[]左下标,hight为数组b[]右下标。该算法实现过程为: 将数组b[]的n个元素分成个数大致相同的两半,取b[n/2]与searchKey作比较。如果searchKey=b[n/2],则找到searchKey,算法终止;如果searchKeyb[n/2],则只要在数组b的右半部继续搜索searchKey。 3.实现主函数并完成所有代码。4.算法复杂性分析: 容易看出,没执行一次算法的while循环,待搜索数组的大小减少一半。因此,在最坏情况下,while循环被执行了O(logn)次。循环体内运算需要O(1)时间,因此整个算法在最坏情况下的计算时间复杂性为O(logn)。 六、调试过程及实验结果 输出结果为: Every array repeat search times: 10 Number of Elements 理论平均查找次数 实际平均查找次数 6.5 6.1 200 7.5 7.3 300 8.5 7.4 400 8.5 7.4 500 8.5 7.5 600 9.5 8.2 700 9.5 8.8 800 9.5 8.7 900 9.5 8.8 1000 9.5 9.4 七、总结 二分查找在搜索有序表时,效率比较高。通过这次实验我对二分查找算法的认识又有了新的提高。本想写个图形界面,但由于种种原因,没有实现,下次做加密算法时,要写一个图形化界面。 指导教师对实验报告的评语 成绩: 指导教师签字: ****年**月**日 实验二:分治法解决棋盘问题 一、实验时间:2013年10月22日,星期二,第一、二节地点:J13#328 二、实验目的及要求 1、用c/c++语言实现分治法解决棋盘问题算法。 2、实现棋盘化以及棋盘覆盖 三、实验环境 Windows 2007 操作系统 以及code blocks软件 四、实验内容 在一个2^k*2^k的方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为一个特殊方格。用分治法将整个棋盘除特殊方格以外的方格覆盖。 五、算法描述及实验步骤 将2^k x 2^k的棋盘,先分成相等的四块子棋盘,其中特殊方格位于四个中的一个,构造剩下没特殊方格三个子棋盘,将他们中的也假一个方格设为特殊方格。如果是: 左上的子棋盘(若不存在特殊方格)----则将该子棋盘右下角的那个方格假设为特殊方格 右上的子棋盘(若不存在特殊方格)----则将该子棋盘左下角的那个方格假设为特殊方格 左下的子棋盘(若不存在特殊方格)----则将该子棋盘右上角的那个方格假设为特殊方格 右下的子棋盘(若不存在特殊方格)----则将该子棋盘左上角的那个方格假设为特殊方格 当然上面四种,只可能且必定只有三个成立,那三个假设的特殊方格刚好构成一个L型骨架,我们可以给它们作上相同的标记。这样四个子棋盘就分别都和原来的大棋盘类似,我们就可以用递归算法解决。 六、调试过程及实验结果 七、总结 由于覆盖一个2k*2k棋盘所需的L型骨牌个数为(4k-1)/3,故此算法是一个在渐近意义下最优的算法。 指导教师对实验报告的评语 成绩: 指导教师签字: ****年**月**日 实验三:0-1背包问题的动态规划算法设计 一、实验目的及要求 1.了解并掌握动态规划算法的设计思想。 2.利用动态规划算法的设计思想实现0-1背包问题的算法设计。 二、实验环境 使用C++语言; 在windows环境下使用CodeBlocks调试并运行。 三、实验内容 1.了解并掌握动态规划的设计思想。 2.利用动态规划算法的思想解决0-1背包问题。 四、算法描述及实验步骤 每种物品一件,可以选择放1或不放0。 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是: f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} “将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”,价值为f[i-1][v];如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为v-c[i]的背包中”,此时能获得的最大价值就是f[i-1][v-c[i]]再加上通过放入第i件物品获得的价值w[i]。 五、调试过程及实验结果 六、总结 0-1背包问题是最基本的背包问题,它包含了背包问题中设计状态、方程的最基本思想,另外,别的类型的背包问题往往也可以转换成0-1背包问题求解。通过这次实验我对动态规划算法的认识又有了新的提高。 指导教师对实验报告的评语 成绩: 指导教师签字: ****年**月**日 实验四:背包问题的贪心算法 一、实验目的: 运用贪心算法思想,设计解决上述问题的算法,找出最大背包价值的装法。 二、实验要求 1.用c++语言实现背包问题的贪心算法。 2.掌握贪心思想的应用。 三、实验原理 在贪心算法中采用逐步构造最优解的办法,在每个阶段,都做出一个看上去最优的决策(在一定的标准下),决策一旦做出就不可更改。 四、实验过程(步骤)1.定义背包结构体: struct stone { int name;int weight;//物品的剩余重量 int weight_t;//物品的重量 float benefit;//物品的价值 //float b;};2.定义函数void sort(stone *data,int num)//计算物品的单位重量的价值,并进行排序 3.定义主函数并完成贪心选择。4.分析算法复杂性分析: 该算法的主要计算时间在于将各种物品依其单位重量的价值从大到小排序。因此,算法的计算时间上界为O(n*logn)。 与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,可以选择物品i 可以选择物品 的一部分,而不一定要全部装入背包,1≤i≤n。这2类问题都具有最优子结构,最优子结构性质,极为相似,但 最优子结构 背包问题可以用贪心算法求解,而0-1背包问题却不能用贪心算法求解。 五、运行结果 六、实验分析与讨论 贪心法的基本思路: ——从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。该算法存在问题: 1.不能保证求得的最后解是最佳的; 2.不能用来求最大或最小解问题; 3.只能求满足某些约束条件的可行解的范围。实现该算法的过程: 1.Begin 从问题的某一初始解出发; 2.while 能朝给定总目标前进一步 do 3.求出可行解的一个解元素; 4.由所有解元素组合成问题的一个可行解 七、实验心得 贪心算法通过一系列的选择来得知问题的解,它所做的每一个选择都是当前状态下局部最好选择,即贪心选择。通过背包问题的解决,进一步掌握了贪心算法的思想,并能在解问题时灵活运用。 指导教师对实验报告的评语 成绩: 指导教师签字: ****年**月**日 实验五:最小重量机器设计问题(回溯法) 一、实验目的 建立算法复杂度的理论分析与实验分析的联系,深刻体会算法复杂度作为算法的好坏评价指标的本质含义。 二、实验要求 1、用c++语言实现最小重量机器设计的回溯算法。 2、分析算法的计算复杂性 三、实验原理 首先,应该明确的确定问题的解空间。确定了解空间的组织结构后,发从开始节点(根节点)出发,以深度优先方式搜索整个解空间。这个开始结点成为活结点,同时也成为当前的扩展结点。在当前的扩展结点处,向纵深方向搜索移至一个新的结点。这个新结点成为新的活结点,并成为新的扩展结点。如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点成为死结点。此时,应往回移动(回溯)至最近的活结点,并使这个活结点成为当前的扩展结点。回溯以这种工作方式递归的在解空间中搜索,直至找到所要求的解或解空间中已无活结点为止。 四、实验过程(步骤)由于题目已经给出总价格的上限,因此算法通过使用回溯来选择合适的机器使得在总价格不超过d时得到的机器重量最小。首先初始化当前价格cp=0,当前重量cw=0,此外,还要设置一个变量sum表示选择机器的总重量,初始化其为每个部件从1号供应商购买的重量。在循环选择i号机器时,判断从j号供应商购买机器后的价格是否大于总价格,如果不大于则选择,否则不选,继续选择下一供应商进行判断。在得到一个合适的供应商后,继续选择下一机器的供应商,从第一个选到最后一个供应商。当所有机器选择结束后,判断得到的总重量是否比之前的sum小,如果小就赋给sum,然后从这一步开始,回溯到上一机器,选择下一合适供应商,继续搜索可行解,直到将整个排列树搜索完毕。这样,最终得到的sum即为最优解。 数据说明: N:零件数量 m:不同的零件商 W[][]:是从供应商j处购得的部件i的重量 c[][]:相应的价值 算法设计: a.部件有n个,供应商有m个,分别用w[i][j]和c[i][j]存储从供应商j 处购得的部件i的重量和相应价格,d为总价格的上限。 b.用递归函数backtrack(i)来实现回溯法搜索排列树(形式参数i表示递归深度)。 ① 若cp>d,则为不可行解,剪去相应子树,返回到i-1层继续执行。 ② 若cw>=sum,则不是最优解,剪去相应子树,返回到i-1层继续执行。 ③ 若i>n,则算法搜索到一个叶结点,用sum对最优解进行记录,返回到i-1层继续执行; ④ 用for循环对部件i从m个不同的供应商购得的情况进行选择(1≤j≤m)。 c.主函数调用一次Knapsack(1)即可完成整个回溯搜索过程,最终得到的sum即为所求最小总重量。 五、运行结果 六、实验心得 通过这次试验我明白了回溯法的思想,回溯法借助想象出来的树的结构,把问题简单化,使得解问题更方便。通过剪枝函数和约束函数对于求问题的解有很大的帮助,但要把一些限制条件把剪枝函数抽象化。 指导教师对实验报告的评语 成绩: 指导教师签字: ****年**月**日 实验六:最小重量机器设计问题(分支限界法) 一、实验时间:2013年11月12日,星期二,第一、二节地点:J13#328 二、实验目的及要求 1、了解分支限界法的基本思想。 2、运用分支限界法解决最小重量机器设计问题。 三、实验环境 平台:win7操作系统 开发工具:codeblocks10.05 四、实验内容 最小重量机器设计问题:设某一机器由n个部件组成,每一种部件可以从m个不同的供应商处购得。设wij是从供应商j处购得的部件i的重量,cij是相应的价格。试设计一个算法,给出总价格不超过c的最小重量机器设计 五、算法描述及实验步骤 算法描述: 解空间为一棵排列树,采用优先队列式分支限界法找出所给的最小重量机器设计,开始时,将排列树的根节点置为当前扩展结点。在初始扩展结点处还设有选定部件是哪个供应商提供的,故cv=0,cw=0,position=0,peer=0,1≤i≤n。x[1:n]记录供应商的选择while完成对排列树内部结点的有序扩展。循环体内依次从活结点优先队列中取出具有最小重量的结点,依次为当前扩展结点。并且花费不超过c并加以扩展,队列为空时则结束循环。当peer=n时,此时扩展结点是叶节点,得到当前的最小重量和最优解数组x。若peer 实验步骤: 1.定义一个优先队列LinkQueue: void InitQueue(LinkQueue &Q);//创建一个队列-----首尾结点 void DestroyQueue(LinkQueue &Q);//销毁一个队列 void ClearQueue(LinkQueue &Q);//清空队列 int QueueEmpty(LinkQueue &Q);//判断队列是否为空,空则返回TURE,否则返回FLASE int QueueLength(LinkQueue &Q);//求队列的长度 void EnQueue(LinkQueue &Q,QElemType &e);//拆入e为新的队尾元素 void DeQueue(LinkQueue &Q,QElemType &e);//用e返回队列的对头元素 bool IsEmpty(LinkQueue &Q)//判断队列是否为空 2.定义类MinWeight,实现函数有: void Add(int wt,int ct,int i);//往队列插入节点 int FindBest();//实现最小重量机器的查找 void setMW();//函数初始化 void printMW();//打印输出结果 3 实现主函数并完成所有代码。 六、调试过程及实验结果 七、总结 利用分支限界法解决最小重量机器问题,就是构造一个优先队列,按照规定的优先级按最大效益优先的方式查找解空间树,找出满足要求的最优解。通过利用分支限界法解决最小重量机器问题,熟练了对分支限界法的使用。 指导教师对实验报告的评语 成绩: 指导教师签字: ****年**月**日 计算机网络实验报告 姓 名 学 号 专 业 班 级 指导教师毛绪纹 2017.12 实验2-1 PPP 与 PPPoE 学习 实验配置说明 该实验主要用于观察PPPoE和PPP的数据封装格式。其中,PC1到ISP1段的链路使用PPPoE,ISP1已经配置为PPPoE服务器。ISP1和ISP2之间的链路使用PPP。实验目的 了解PPP协议的封装格式。 了解PPPoE协议的封装格式。实验步骤 任务:观察PPP协议和PPPoE协议的数据封装格式 步骤1:准备工作 单击主窗口右下角 Realtime 和 Simulation 模式切换按钮数次,直至交换机指示灯呈绿色 步骤2:建立PPPoE连接 单击拓扑图中的 PC1,在弹出窗口中单击 Desktop 选项卡,选择桌面上 的 Command 工具,在其中输入 ipconfig 命令查看 PC1 的 IP 地址信息,PC1 在初始状态下并未配置 IP 地址。选择 PPPoE 拨号工具,在弹出窗口中输入拨号 信息,即用户名(User Name)和密码(Password):ISP1 预设了两个用户 名,分别为 user 和 admin,密码与用户名相同。输入拨号信息后单击 Connect 按钮,建立 PPPoE 连接。关闭 PPPoE 拨号窗口,重新打开 Command 工具,输入 ipconfig 命令查 看 PC1 是否获取到 IP 地址。如已获取到 ISP1 预设的地址池范围内的 IP 地 址,则表示 PPPoE 拨号成功。 步骤3:添加并捕获数据包 进入 Simulation(模拟)模式。设置 Event List Filters(事件列表过滤器)只显示 ICMP 事件。单击 Add Simple PDU(添加简单PDU)按钮,在拓扑图中添加PC1 向 PC2 发送的数据包。单击 Auto Capture/Play(自动捕获/播放)按钮捕获数据。此时PC1 上出现信封图标,并在信封图标上闪烁“√”图标。此时可再次单击 Auto Capture/Play(自动捕获/播放)按钮停止捕获数据包。 步骤4:观察PPPoE协议封装格式 选择事件列表中PC1 到Switch0 或者 Switch0 到 ISP1 的数据包,即事件 列表中的第二或第三个数据包。单击其 Info 项上的色块,在弹出的 PDU 信 息窗口中选择 Inbound PDU Details 选项卡。 步骤5:观察PPP协议的封装格式 选择事件列表中 ISP1 到 ISP2 的数据包,即事件列表中第四个数据包。单击其 Info 项上的色块,在弹出的 PDU 信息窗口中选择 Inbound PDU Details 选项卡。观察 PPP 的封装,将鼠标焦点置于协议某字段内,按住鼠 标左键并上下或左右拖动鼠标可以观察到该字段完整的取值。 思考题: 1.ADSL 接入采用 PPPoE 的优点有哪些? 答:PPPoE具有较高的性能价格比。实用方便,实际组网方式也很简单,大大降低了网络的复杂程度。2.PPPoE 中,PPP 帧和 Ethernet 帧的封装关系是什么? 答:PPPOE的封装层次:IP->PPP->PPPOE->Ethernet.实验2-以太网帧的封装实验 实验目的 观察以太网帧的封装格式。 对比单播以太网帧和广播以太网帧的目标MAC地址。实验步骤 (1)任务一:观察单播以太网帧的封装 步骤1:准备工作 单击主窗口右下角 Realtime 和 Simulation 模式切换按钮数次,直至交换机指示灯呈绿色。 步骤2:捕获数据包 进入 Simulation(模拟)模式。设置 Event List Filters(事件列表过滤器)只显示 ICMP 事件。单击 Add Simple PDU(添加简单 PDU)按钮,在拓扑图中添加 PC0 向 PC2 发送的数据包。单击 Auto Capture/Play(自动捕获/执行)按钮,捕获数据包。当 PC2 发送的响应包返回 PC0 后通信结束,再次单击 Auto Capture/Play(自动捕获/执行)按钮,停止数据包的捕获。 步骤3:观察以太网帧的封装格式 选择事件列表中第二个数据包(即 PC0 到 Switch0 的数据包),单击其 右端 Info 项中的色块。注意弹出窗口顶端的窗口信息:PDU Information at Device:Switch0,即当前查看的是交换机 Switch0 上的 PDU 信息。在弹出 窗口中选择 Inbound PDU Details 选项卡。观察其中 Ethernet(以太网)对应的封装格式。 步骤4:观察交换机是否会修改以太网帧各字段取值 选择事件列表中第三个数据包(即 Switch0 到 PC2 的数据包),单击其 右端 Info 项中的色块。注意弹出窗口顶端的窗口信息: PDU Information at Device:PC2,即当前查看的是 PC2 接收到的 PDU 信息。在弹出窗口中选择 Inboud PDU Details 选项卡。仔细观察其中 Ehternet 各字段取值,与步骤 2 中观察的各字段取值进行 对比,哪些字段取值发生了变化?重点观察 DEST MAC 和 SRC MAC。 (2)任务二:观察广播以太网帧的封装 步骤1:捕获数据包 单击 Add Complex PDU(添加复杂 PDU)按钮,单击 PC0,在弹出 的对话框中设置参数:Destination IP Address(目标 IP 地址)设置为 255.255.255.255(这是一个广播地址,表示该数据包发送给源站点所在广 播域内的所有站点),Source IP Address(源 IP 地址)设置为 192.168.1.1(该实验拓扑中预设的 PC0 的 IP 地址),Sequence Number(序列号)设置 为 1,Size 设置为 0,Simulation Settings(模拟设置)选中 One Shot,其 对应的 Time 设置为 1,然后单击该对话框下方的 Create PDU 按钮,创建数据包单击 Auto Capture/Play(自动捕获/执行)按钮,捕获数据包。 步骤2:观察该广播包的以太网封装 选择事件列表中第二个数据包(即 PC0 到 Switch0 的数据包),单击其 右端 Info 项中的色块。在弹出窗口中选择 Inboud PDU Details 选项卡。观察其 Ethernet 的封装,重点观察其 DEST MAC 字段的取值并进行记 录。结合背景知识中 MAC 地址的类型,思考 DEST MAC 字段取值的含义。 思考题 1.任务一中,观察到的以太网帧封装格式中前导码字段的取值是什 么?阐述其在数据帧传输过程中的作用。 答:任务一中,前导码字段取值为10101010···1010; 作用:以太网使用曼彻斯特编码传输数据,其特征是每个码元中间有一次电压的跳变,用于接收方提取同步信号,实现与发送方的时钟同步。 2.任务一中,Switch0 在转发数据帧时是否修改其源 MAC 地址和目标 MAC 地址? 答:switch0转发给pc2地数据帧中源MAC地址和目标MAC地址并未进行修改。 3.交换机接收数据帧后,依据什么判断该数据帧是单播还是广播?或 依据什么判断向哪个目标结点转发? 答:交换机工作在数据链路层,依据数据帧中的目标MAC地址的取值判断数据帧是单播还是广播,依据目标MAC地址判断向哪个目标节点转发。 实验2-3 集线器与交换机的对比实验 实验配置说明 该实验用到4个拓扑图。其中拓扑图1和拓扑图2是以集线器为中心的共享式以太网;拓扑图3和拓扑图4是以交换机为中心的交换式以太网。其中拓扑图1和拓扑图2主要用于观察集线器的运行及理解冲突域的概念;拓扑图3和拓扑图4主要用于观察交换机的运行及理解交换机隔离冲突域但不隔离广播域的特性。在对应的实验步骤中,我们需要将拓扑图1和拓扑图2使用交叉双绞线连接起来,将拓扑图3和拓扑图4使用交叉双绞线连接起来,从而观察使用集线器和交换机进行以太网扩展时对冲突域和广播域的影响,从而理解两类设备在扩展以太网时的作用和局限性。实验目的 了解集线器和交换机的如何转发数据。 理解冲突域和广播域的概念。 理解集线器和交换机在扩大网络规模中的作用和局限性。实验步骤 (1)任务一:观察集线器和交换机的运行 步骤1:准备工作 单击主窗口右下角 Realtime 和 Simulation 模式切换按钮数次,直至交换机指示灯呈绿色。在 Realtime(实时模 式)下,当拓扑图中集线器及交换机各端口均呈绿色后,鼠标双击右下角 处事件列表中 Fire 项下的暗红色椭圆图标,至 Last Status 均为 Successful 状态。若单击后 Last Status 不是 Successful,则重新双击该事件对应的暗红色椭圆图标。单击下方 Delete 按钮,删除所有场景。步骤2:观察集线器对单播包的处理 进入 Simulation(模拟模式),设置 Event List Filters(事件列表过滤器)只显示ICMP事件。单击 Add Simple PDU(添加简单 PDU)按钮,添加一个PC0向PC2发送的数据包。单击Auto Capture/Play(自动捕获/播放)按 钮捕获数据,仔细观察数据包发送过程中,集线器向哪些 PC 转发该单播包,以及各 PC 接收到数据包后如何处理该数据包。记录观察结果,以便后续实 验进行对比分析。 步骤3.观察交换机对单播包的处理 单击下方 Delete 按钮,删除所有场景。进入 Simulation(模拟模式),设置 Event List Filters(事件列表过滤器)只显示 ICMP 事件。单击 Add Simple PDU(添加简单 PDU)按钮,添加一个 PC6 向 PC8 发送的数据包。单击 Auto Capture/Play(自动捕获/播放)按钮,仔细观察数据包发送 过程中,交换机向哪些 PC 转发该单播包,以及各 PC 接收到数据包后如何 处理该数据包。记录观察结果并与步骤 2 进行对比分析。 步骤 4.观察集线器对广播包的处理 单击下方 Delete 按钮,删除所有场景。进入 Simulation(模拟模式),设置 Event List Filters(事件列表过滤器)只显示 ICMP 事件。单击 Add Complex PDU(添加复杂 PDU)按钮,单击 PC0,在弹出 的对话框中设置参数:Destination IP Address(目标 IP 地址)设置为 255.255.255.255(这是一个广播地址,表示该数据包发送给源站点所在广 播域内的所有站点),Source IP Address(源 IP 地址)设置为 192.168.1.1(该实验拓扑中预设的 PC0 的 IP 地址),Sequence Number(序列号)设置 为 1,Size 设置为 0,Simulation Settings(模拟设置)选中 One Shot,其 对应的 Time 设置为 1,然后单击该对话框中下方的 Create PDU 按钮,创建数据包。单击 Capture/Forward(捕获/转发)按钮,数据包到达集线器,再次单 击 Capture/Forward(捕获/转发)按钮,集线器向与源站点 PC0 在同一广播域的所有站点转发数据包。 步骤5.观察交换机对广播包的处理 单击下方 Delete 按钮,删除所有场景。参照步骤 4 的方法,在 PC6 上 添加一个复杂的 PDU,参数设置与步骤 4 相同(PC6 的预设 IP 地址也是 192.168.1.1)。单击 Capture/Forward(捕获/转发)按钮,数据包到达交换机,再次单 击 Capture/Forward(捕获/转发)按钮,交换机向与源站点 PC6 在同一广播 域的所有站点转发数据包。仔细观察这一过程中,交换机如何处理广播包,进而观察以交换机为中心的以太网的广播域的范围。 (2)任务二:分别观察以集线器和以交换机为中心的以太网中,多个站点同时发送数据的情况,理解冲突域的概念。 步骤1.观察以集线器为中心的以太网中多个站点同时发送数据的情况 单击下方 Delete 按钮,删除所有场景。进入 Simulation(模拟)模式。设置 Event List Filters(事件列表过滤器)只显示 ICMP 事件。单击 Add Simple PDU(添加简单 PDU)按钮,在拓扑图 1 中添加 PC0 向 PC2 发送的数据包;再次单击 Add Simple PDU(添加简单 PDU)按钮,添加 PC1 向 PC3 发送的数据包。单击 Auto Capture/Play(自动捕获/播放)按钮,在此过程中仔细观察 数据包到达各个结点的情况,集线器及主机对数据包的处理。注 注: :设备上出现信封图标表示数据包到达该设备,信封上闪烁“ √” 表示通信成功完成,信封上闪烁“ Χ” 表示设备丢弃数据包,信封上 出现闪烁的火苗表示数据冲突。 步骤2.观察以交换机为中心的以太网中多个站点同时发送数据的情况 单击下方 Delete 按钮,删除所有场景。进入 Simulation(模拟)模式。设置 Event List Filters(事件列表过滤器)只显示 ICMP 事件。单击 Add Simple PDU(添加简单 PDU)按钮,在拓扑图 3 中添加 PC6 向 PC8 发送的数据包;再次单击 Add Simple PDU(添加简单 PDU)按钮,添加 PC7 向 PC9 发送的数据包。单击 Auto Capture/Play(自动捕获/播放)按钮,在此过程中仔细观察 数据包到达各个结点的情况,交换机及主机对数据包的处理。 (3)任务三:观察集线器和交换机在扩展以太网覆盖范围的同时,对冲突域和广播域范围的影响 步骤1.观察集线器扩展以太网时对冲突域范围的影响 单击下方 Delete 按钮,删除所有场景。单击左下方 Connections(连接)图标,选中 Copper Cross-Over(交叉线),在拓扑图 1 中单击集线器 1,在 弹出菜单中选中 port4;拖动鼠标,单击集线器 2,在弹出菜单中选中 port2。至此,我们得到一个由两台集线器互连起来的以太网。进入 Simulation(模拟)模式。设置 Event List Filters(事件列表过滤器)只显示 ICMP 事件。单击 Add Simple PDU(添加简单 PDU)按钮,在拓扑图中添加 PC0 向 PC2 发送的数据包;再次单击 Add Simple PDU(添加简单 PDU)按钮,添 加 PC4 向 PC5 发送的数据包。依次单击 Capture/Forward(捕获/转发)按钮,直至此次通信结束。在 此过程中仔细观察并思考每一步骤数据包是被如何处理的。在这一过程中,由于延迟的存在,在 PC4 发送的数据到达集线器 1 冲突之前,PC0 发送的 数据包已经到达 PC2,而在 PC2 发送应答包时,与到达集线器 1 的数据冲 突。间隔一定时间后。PC2 重新发送数据包,最终数据到达 PC0。PC4 与 PC5 的情况类似。 步骤2.观察集线器扩展以太网时对广播域范围的影响 单击下方 Delete 按钮,删除所有场景。参照任务一中的步骤4的操作方法,在PC0向其所在广播域内所有结点发送广播包。依次单击 Capture/Forward(捕获/转发)按钮,观察广播包的发送范围。 步骤3.观察交换机扩展以太网时对冲突域及广播域的影响 单击下方 Delete 按钮,删除所有场景。参照步骤1和步骤 2,观察交换机扩展以太网时对冲突域和广播域范围的影响。 思考题 ① 集线器在接收到发送给某结点的单播包时是如何转发数据的?交换机又是如何处理单播包的? 答:集线器是把数据发往全部端口,交换机把数据发往相应端口。 ② 在以集线器/交换机为中心的以太网中,当多个站点同时发送数据时,是否会发生冲突?为什么? 答:集线器会发生冲突,交换机不会发生冲突。 ③ 使用集线器扩大以太网规模时,有没有可能会使以太网的性能下降? 答:不会。 ④ 使用交换机扩大以太网规模时,有没有可能会使以太网的性能下降?为什么 答:有可能。使用交换机解决了冲突域的问题,但是交换机并不隔离广播域,使用交换机扩大网络规模的同时也扩大了广播域。这将使以太网中广播包的数量增加,当广播包的数据量达到一定数量时,网络性能下降。 2.4 实验四:交换机工作原理 实验配置说明 该拓扑图用于对交换机工作原理的观察和理解。在数据包的发送过程中,观察交换机地址转发表的变化情况以及其根据地址转发表的不同情况 采用不同的方式处理数据包的过程,从而理解交换机通过逆向自学习建立 地址转发表及其对数据包的转发规则。实验目的 ① 理解交换机通过逆向自学习算法建立地址转发表的过程。② 理解交换机转发数据帧的规则。③ 理解交换机的工作原理。 实验步骤 1.任务一:准备工作 步骤 1:拓扑训练 打开该实验对应的练习文件“2-4 交换机工作原理.pka”。若此时交换 机端口指示灯呈橙色,则单击主窗口右下角 Realtime 和 Simulation 模式切 换按钮数次,直至交换机指示灯呈绿色。在 Realtime(实时模式)下,当拓 扑图中交换机各端口均呈绿色后,鼠标双击右下角处事件列表中 Fire 项下 的暗红色椭圆图标,至 Last Status 均为 Successful 状态。若单击后 Last Status 不是 Successful,则重新双击该事件对应的暗红色椭圆图标。单击下方 Delete 按钮,删除所有场景。 步骤 2:删除交换机地址转发表 参照上文给出的删除 Switch1 上地址转发表的操作方法,分别删除 Switch0、Switch1 和 Switch2 上的地址转发表。 2.任务二:观察交换机的工作原理 步骤 1:查看并记录 PC0 和 PC2 的 MAC 地址 鼠标左键单击 PC0,在弹出窗口中选择Config 选项卡,选择 FastEthernet0,查看并记录其 MAC 地址(图 2-13)。同样的方法,查看并记 录 PC2 的 MAC 地址。 步骤 2:添加 PC0到PC2的数据包进入Simulation(模拟)模式。设置 Event List Filters(事件列表过滤器)只显示 ICMP 事件。单击Add Simple PDU(添加简单 PDU)按钮,在拓扑图中添加 PC0 向 PC2 发送的数据包。 步骤 3:分别查看三台交换机在发送数据前的地址转发表选中拓扑工作区工具条上的 Inspect 工具,鼠标移至拓扑工作区单击 Switch0,在弹出菜单中选择 MAC Table 菜单项,弹出窗口中显示 Switch0 当前的地址转发表,如图 2-14 所示(注:下图仅为说明地址转发表的含义,并不是该步骤的查询结果,实验者需要自行查看并记录结果)。 其中,Mac Adddress 是 PC 的 MAC 地址,Port 是该 PC 与交换机相连 的端口号或者 PC 与通过此端口与该交换机相连的交换机相连,例如,PC4 与 Switch2 相连,Switch2 与 Switch1 相连,Switch1 与 Switch0 的 Fa0/3 相 连,PC4 的 MAC 地址在 Switch0 的地址转发表中将对应 Fa0/3 口。该步骤重点观察并记录源端主机 PC0 和目标主机 PC2 的 MAC 地址是 否存在于 Switch0 的地址转发表中。参照上述步骤查看并记录 Switch1 和 Switch2 的地址转发表。 步骤 4:查看 Switch0 的学习和转发过程 单击 Capture/Forward(捕获/前进)按钮一次,在 Switch0 的图标上出 现信封图标后,查看 Switch0 的地址转发表,与步骤 3 的结果进行对比,观 察并记录增加的地址转发表项。查看地址转发表的方法可参照步骤 3。单击 Capture/Forward(捕获/转发)按钮一次,观察并记录 Switch0 是 如何处理该数据包的(转发,通过特定端口转发;洪泛转发,向所有除接 收端口外的其它端口转发;丢弃,不转发数据)。结合当前状态下 Switch0 的地址转发表,思考为什么 Switch0 如此处理该数据包。 步骤 5:观察 Switch1 和 Switch2 的学习和转发过程 参照步骤 4 的操作方法,分别针对 Switch1 和 Switch2 完成上述操作,在这个过程中对比Switch1 和Switch2 在接收到数据包前和接收到数据包后地址转发表的变化情况,以及观察其对数据包的处理方式。结合当前状态 下地址转发表,对结果进行思考和分析。单击下方 Delete 按钮,删除所有场景。参照上述操作步骤,完成 PC1 向 PC0 发送数据、删除 Switch1 的地址 转发表后 PC1 向 PC0 发送数据的实验操作。 思考题 ① 在实验过程中,将观察结果填入下表。转发表栏内填写交换机接收 到数据后 MAC 地址转发表中增加的项,如无增加或该交换机未收到该数据 帧则用横线表示。对数据的处理填写转发、洪泛或丢弃,如交换机未收到 该数据帧则用横线表示。 ② Switch0 收到 PC0 向 PC2 发送的数据帧后,其地址转发表是否有变 化?如有给出增加的条目并解释原因。 答:地址转换表增加了一条:00E0.F966.5625 F0/1 ③ Swtich1 收到 PC0 向 PC2 发送的数据帧后,是如何处理的?说明其 如此处理的原因。答:向除接收端口之外的所有其他端口转发,即洪泛转发。 ④ 在删除 Switch1 上的地址转发表前后,PC1 向 PC0 发送数据时 Swtch2 是如何处理的?说明其如此处理的原因。 答:向除接收端口之外的所有其他端口转发,即洪泛转发。 2.5 实验五:生成树协议(STP)分析 实验配置说明 在该实验对应的练习文件中包含两个拓扑图,其中拓扑图 1 中关闭了4台交换机的生成树协议,拓扑图2中开启了4台交换机的生成树协议。实验过程中,任务一在拓扑图 1 中完成,任务二和任务三在拓扑图2中完成。拓扑图1和拓扑图2的其它配置完全相同。实验目的 ① 理解链路中的环路问题。② 理解生成树协议的工作原理。实验步骤 1.任务一:观察无生成树协议的以太网环路中广播帧的传播 步骤 1:准备工作 打开该实验对应的练习文件“2-5 生成树协议(STP)分析.pka”。若此 时拓扑图 1 中交换机端口指示灯呈橙色,则单击主窗口右下角 Realtime 和 Simulation 模式切换按钮数次,直至交换机指示灯呈绿色。否则,略过此步骤。 步骤 2:在拓扑图 1 中添加广播包 进入 Simulation(模拟)模式。设置 Event List Filters(事件列表过滤器)只显示 ICMP 事件。单击 Add Complex PDU(添加复杂 PDU)按钮,单击拓扑图 1 中的 PC0,在弹出的对话框中设置参数:Destination IP Address(目标 IP 地址)设置为 255.255.255.255(广播地址),Source IP Address(源 IP 地址)设置为 192.168.1.1(该实验拓扑中预设的 PC0 的 IP 地址),Sequence Number(序 列号)设置为 1,Size 设置为 0,Simulation Settings(模拟设置)选中 One Shot,其对应的 Time 设置为 1,然后单击该对话框中下方的 Create PDU 按钮,创建数据包。 步骤 3:捕获数据包,观察广播包的传播 单击 Auto Capture/Play(自动捕获/播放)按钮,捕获数据包。观察拓 扑图 1 中广播包的传播动画。此时,我们会注意到每台交换机在接收到数据包后都会通过其它所有 端口转发出去。因此,交换机不停地接收来自其它交换机转发的数据包,不停地向其它交换机转发数据包,导致该广播包无休止地在四台交换机形 成的环路中传播。 注 注: :此过程不会停止,完成步骤 3 后单击 Realtime(实时模式)按钮 切换到实时模式,进行步骤 4 的操作。 步骤 4:在实时模式下,测试网络是否正常 进入 Realtime(实时模式),单击 PC0,在打开的窗口中选择 Desktop(桌面)选项卡,选择其中的 Command Prompt 工具,在操作界面中输入 ping 192.168.1.2(测试 PC0 与 PC1 是否能够连通)并回车,实验结果如图所示。 如图所示,PC0 到 PC1 的连通测试失败,反馈结果为 Request timed out,即请求超时。这是因为上述操作步骤中的广播包仍然在网络中不停转 发(切换到实时模式拓扑图中不再显示数据包传输动画),形成了广播风暴,耗尽网络资源导致 PC0 发往 PC1 的请求包无法到达 PC1。单击下方 Delete(删除)按钮删除所有场景,为下一任务实验做好准备。 2.任务二:观察启用生成树协议的以太网环路中广播帧的传播 步骤 1:观察拓扑图 2 中启用生成树协议后的逻辑拓扑图 观察拓扑图 2 中各端口指示灯的颜色。端口指示灯为绿色表示该端口 可以接收和转发数据帧,端口指示灯颜色为橙色表示该端口不能接收和转 发数据帧。在网络正常运行情况下,生成树协议会将以太网环路中一些端口屏蔽,禁止其接收和转发数据帧,形成无环的树形逻辑拓扑(即实际转发数据的 拓扑图),从而避免广播帧无休止地在环路中传播。拓扑图中指示灯为橙色 的端口即为生成树协议屏蔽的端口。根据观察结果,画出拓扑图 2 对应的 树形逻辑拓扑图。步骤 2:在拓扑图 2 中添加广播包 进入 Simulation(模拟)模式,在拓扑图 2 中添加广播包。具体操作可 参照任务一中的步骤 2。 步骤 3:捕获数据包,观察广播包的传播 连续单击 Capture/Forward(捕获/前进)按钮捕获数据包,直至该过程 结束不再产生新的数据包。在此过程中仔细观察广播包的转发情况,并记 录每台交换机的哪些端口丢弃该广播包,哪些端口转发该广播包。与步骤 1 记录的树形拓扑图进行对比,观察数据包是否沿树形拓扑中的链路转发。 步骤 4:在实时模式下,测试网络是否正常 进入 Realtime(实时模式),单击 PC0,在打开的窗口中选择 Desktop(桌面)选项卡,选择其中的 Command Prompt 工具,在操作界面中输入 ping 192.168.1.2 并回车,如图 2-18 所示。测试结果为 Reply from 192.168.1.2:„„此结果表示 PC0 发送了请求包后,接收到来自 192.168.1.2 的响应,即 PC0 和 PC1 之间 可以正常通信。对比任务一和任务二中连通性测试结果,理解生成树协议的作用。单击下方 Delete(删除)按钮删除所有场景,为下一任务实验做好准备。 3.任务三:观察链路故障时生成树协议启用冗余链路的情况 步骤 1:制造故障链路 单击拓扑图 2 中的 Switch3,在其配置窗口中选择 Config 选项卡,在 INTERFACE 列表下单击 FastEthernet0/1 端口。在右端 FastEthernet0/1 的配 置界面中,单击 Port Status 项对应的复选框,取消勾选,即关闭该端口。此时,观察拓扑图 2 中 Switch3 和 Switch2 连接的链路上两个端口指示 灯为红色,表示端口关闭,即该链路已经中断。 步骤 2:观察生成树协议启用冗余链路 当树形逻辑拓扑图中出现链路故障时,生成树协议将自动启用屏蔽端 口形成新的树形拓扑,保证网络的连通性。为了加快这一过程,可单击主 窗口右下角 Realtime 和 Simulation 模式切换按钮数次,直至原来橙色指示 灯变为绿色。 注:因为生成树协议需要重新交换数据,重新计算生成树,在 Packet Tracer 6.0中这一过程耗时较长,可能持续数十秒甚至 1、2 分钟时间。 重复执行任务二中的步骤 2、步骤 3 和步骤 4,观察数据包转发路径的变化并确认链路故障时网络的连通性。 步骤 3:恢复故障端口,并观察生成树的变化 参照步骤 1 的操作方法,重新打开FastEthernet0/1。参照步骤 2,观察拓扑图中各端口指示灯颜色的变化,即生成树屏蔽端口的变化。在新的生成树计算完成后,重复执行任务二中的步骤 2、步骤3和步骤4,观察数据 包转发的路径。 思考题 ① 任务一中,为什么 PC0 无法 ping 通 PC1? 答:因为上述操作步骤中的广播包仍然在网络中不停转发(切换到实时模式拓扑图中不再显示数据包传输动画),形成了广播风暴,耗尽网络资源导致 PC0 发往 PC1 的请求包无法到达 PC1。 ② 结合任务二实验情况,简述生成树协议是如何解决环路问题的。 答:生成树协议会将以太网环路中一些端口屏蔽,禁止其接收和转发数据帧,形成无环的树形逻辑拓扑。 ③ 任务三中,当网络中出现链路故障时,PC0和PC1是否能通信? 答:不能。 2.6 实验六:虚拟局域网(VLAN)工作原理 实验配置说明 该实验用到的拓扑图已经预先按任务一的需求进行配置了。在实验 过程中,任务二也在该拓扑图的基础上完成,即 VLAN 的创建和划分。而任务三必须在任务二的基础上完成,因此实验过程中不能跳过任务二。实验目的 ① 理解虚拟局域网 VLAN 的概念。 ② 了解 VLAN 技术在交换式以太网中的使用。 ③ 理解 VLAN 技术在数据链路层隔离广播域的作用。实验步骤 步骤 1:准备工作 打开该实验对应的练习文件“2-6 虚拟局域网(VLAN)工作原理.pka”。若此时交换机端口指示灯呈橙色,则单击主窗口右下角 Realtime 和 Simulation 模式切换按钮数次,直至交换机指示灯呈绿色。 步骤 2:查看交换机上的 VLAN 信息 选中拓扑工作区工具条中的 Inspect 工具,鼠标移至拓扑工作区,鼠标 左键单击 Switch0,在弹出菜单中选择“Port Status Summary Table”选项卡,打开端口状态信息窗口。如图 2-21 所示,当前 Switch0 上所有端口均属于 VLAN1(VLAN1 为交换机默认 VLAN),即未划分 VLAN。用同样的方法 查看 Switch1 的 VLAN 信息。 步骤 3:观察在未划分 VLAN 的情况下,交换机对广播包的转发方法 进入Simulation(模拟)模式。设置 Event List Filters(事件列表过滤器)只显示 ARP和ICMP 事件。单击Add Simple PDU(添加简单 PDU)按钮,在拓扑图中添加 PC0向PC2发送的数据包。此时,在Event List(事件列表中),会出现两个事件,第一个是 ICMP 类型,第二个是ARP类型(这两个协议将在第 3 章中详述)。双击ARP右端的色块,弹出ARP包的详细封装信息,我们会观察到其 目标 MAC 地址为 FFFF.FFFF.FFFF,是一个广播地址,所以这个 ARP 包是 一个广播包。单击Auto Capture/Play(自动捕获/播放)按钮,观察数据发送过程。重点观察交换机向哪些站点发送 ARP 广播包,记录该广播包的传播范围。单击下方 Delete(删除)按钮删除所有场景,为下一任务实验做好准备。 2.任务二:创建两个 VLAN,并将端口划分到不同 VLAN 内 步骤 1:创建 VLAN 单击拓扑图中 Switch0,在弹出窗口中选择 Config 选项卡,如图 2-22 所示。单击左端配置列表区中的 SWITCH(交换机)项下的 VLAN Database(VLAN 数据库)按钮,在右端配置区将显示 VLAN Configuration(VLAN 配置)界面。如图 2-22 所示,在 VLAN Number(VLAN 编号)栏内输入 VLAN 编号“2”;在 VLAN Name 栏内输入 VLAN 名“vlan2” ;单击 Add(添加)按钮,此时在下方 VLAN 列表区中将会增加 VLAN 2 的信息,即表示 VLAN 2 创建成功。若须删除某个 VLAN,则在 VLAN 列表区中选中要删除的 VLAN,然 后单击 Remove(移除)按钮即可。参照上述步骤,在 Switch0 上创建 VLAN 3。单击 Switch1,在其配置窗口中参照上述步骤,创建VLAN 2 和 VLAN 3。 步骤 2:设置 Switch0 和 Switch1 之间的中继连接 在 Switch0 的配置窗口中选择 Config 选项卡,单击其左端配置列表中 的 INTERFACE(接口)项下的 FastEthernet0/1(Switch0 用来连接 Switch1 的端口),在右端配置区内,如图 2-23 所示,单击左端的下拉按钮,在下拉 菜单中选择 Trunk 选项。该选项表示将端口设置为 Trunk 模式(中继连接模 式)。参照上述操作步骤,将 Swtich1 的 FastEthernet0/1 设置为 Trunk 模式。步骤 3:将端口划分到不同 VLAN 内 在 Switch0 的配置窗口中选择 Config 选项卡,单击其左端配置列表中 的 INTERFACE(接口)项下的 FastEthernet0/2。如图 2-24 所示,保持其端口模式为 Access 不变,单击右端 VLAN 项对应的下拉按钮,在下拉菜单中 勾选对应的 VLAN,对于 FastEthernet0/2 端口,勾选 vlan2。 将 Switch0 和 Switch1 上连接了主机的端 口划分到不同的 VLAN 内。 表 步骤 4:修改 PC IP 地址 步骤 3 中将 PC 划分到不同的 VLAN 内,因此需要按照表 2-7 重新规划 PC 的 IP 地址。单击 PC,选择其配置窗口的 Desktop 选项卡,单击 IP Configuration 工 具,在配置窗口中 IP Address 和 Subnet Mask 栏内分别对照表 2-7 列出的 PC 的 IP 地址和子网掩码信息,完成 PC 机 IP 地址的配置。若此时交换机端口指示灯呈橙色,则单击主窗口右下角 Realtime 和 Simulation 模式切换按钮数次,直至交换机指示灯呈绿色。 3.任务三:观察划分 VLAN 后,交换机对广播包的处理 步骤 1:查看交换机上的 VLAN 信息 在任务二中,我们已经在两台交换机上创建了两个 VLAN:VLAN2 和 VLAN3,并将 PC 机分别划分到两个 VLAN 内,从而得到两个广播域(在 此拓扑中,没有接入默认的VLAN1的PC机,所以只存在VLAN2和VLAN3 两个广播域)。选中拓扑工作区工具条中的 Inspect 工具,鼠标移至拓扑工作区,单击 Switch0,在弹出菜单中选择“Port Status Summary Table”选项,打开端口 状态信息窗口。如图2-25所示,当前Switch0上FastEthernet0/2属于VLAN2,FastEthernet0/3 和 FastEthernet0/4 属于 VLAN3。其他端口未接 PC,仍属于 默认的 VLAN1。用同样的方法查看 Switch1 的 VLAN 信息。 步骤 2:观察交换机对广播包的处理,理解划分 VLAN 情况下,广播 域的范围 进入 Simulation(模拟)模式。设置 Event List Filters(事件列表过滤器)只显示 ARP 和 ICMP 事件。单击 Add Simple PDU(添加简单 PDU)按钮,在拓扑图中添加 PC0 向 PC3 发送的数据包。双击 ARP 右端的色块,弹出 ARP 包的详细封装信息,我们会观察到其 目标 MAC 地址为 FFFF.FFFF.FFFF,是一个广播地址,所以这个 ARP 包是 一个广播包。单击 Auto Capture/Play(自动捕获/播放)按钮,观察数据发送过程。 重点观察两台交换机转发该广播包的范围,即哪些 PC 机最终接收到了该广 播包,哪些 PC 机最终没有接收到该广播包。结合步骤 1 查看的 VLAN 信 息,对结果进行分析。按照上述步骤,在拓扑图中添加 PC1 向 PC2 发送的数据包,观察其 ARP 广播包发送的情况并记录其结果。 思考题 ① 在任务一,两台交换机分别如何处理广播包?其广播包的传播范围 有多大? ② 在任务三中,当一台 PC 发送广播包时,与之连接在同一台交换机 上的其它 PC 机是否一定能接收到该广播包?根据实验结果举例说明。 ③ 通过分析任务一和任务三的实验结果,说明划分 VLAN 的作用。 第三章 网络层协议实验 实验一:IP分析 实验配置说明 实验目的 熟悉 IP 的报文格式以及关键字段的含义。 掌握 IP 地址的分配方法。 理解路由器转发 IP 数据报的流程。实验步骤 任务一:观察数据包的封装以及字段变化 步骤1:初始化所有设备的 ARP 表信息 步骤2:观察IP数据报的转发 任务二:观察路由器转发 IP 数据报的方式 步骤1:初始化并观察各路由器的路由表 删除所有场景,打开 Router0、Router1 和 Router2 的路由表并比较三个路由表。 步骤2:观察 PC0 到 PC2 的往返过程 单击 Add Simple PDU 按钮,然后分别单击 PC0 和 PC2。单击 Capture/Forward 按钮传送数据包。分别检查在At Device(在设备)显示为Router0和Router2的数据包信息。在Out Layers中选择第三层。 步骤3:观察 PC2 到 PC1 的往返过程 任务三:观察IP分片原理 步骤1: 步骤2:观察IP数据包分片情况 思考题: 1.一个IP分组经路由器转发后,有哪些字段会发生变化? TTL会发生改变,源MAC 地址和目的MAC 地址 2.为什么任务3中的两个分片的长度分别是1500和48? 因为发送的包的大小是1500,封装它的 IP 数据报超出了以太网帧的负载上限,因此该 IP 报文被分拆为两个 ID一样的分片,一个长度为 1500 字节,另一个为 48 字节。 实验二:IP地址分配实验 实验配置说明 实验目的 掌握主机和路由器的 IP 地址配置。 熟悉 CIDR 的 IP 地址编址方法。理解 CIDR 的路由聚合功能。实验步骤 任务一:练习主机和路由器的IP地址配置 步骤1:选择适当的IP地址,掩码和网关 PC0IP地址选 192.168.1.1子网掩码选255.255.255.0 网关选182.168.1.254 Router0 seial0/0 IP选192.168.4.1 子网掩码选255.255.255.0 步骤2:为主机分配所选的信息 步骤3:为Rounter0 的se0/0/0接口分配所选的信息 步骤2:测试连通性 任务二:练习CIDR地址规划 步骤1:为Router1接口选择合适的IP地址和掩码 步骤2:为路由器分配所选的信息 步骤3:在路由器上进行路由聚合 步骤4:测试连通性 思考题 1.与分类的 IP 编址方法相比,CIDR 编址方案具有什么优点? 2.路由器的不同接口能否使用相同的网络号? 不可以。 实验三:APR 分析 实验配置说明 实验目的 掌握基本的 ARP 命令。 熟悉 ARP 报文格式和数据封装方式。理解 ARP 的工作原理。实验步骤 任务1:在Packet Tracer中熟悉arp命令 步骤1:熟悉 arp 命令 步骤2:观察ARP缓存中条目的动态增减 任务2:观察ARP工作原理 步骤1: 捕获并观察 ARP 数据包的转发 步骤2:研究ARP报文格式和封装方式 步骤3: 研究不同广播域内主机互访时的ARP执行过程 没有ARP 思考题: 1.任务一完成后,哪些pc的ARP缓存拥有pc0的MAC地址记录?哪些PC新添加了PC1的MAC地址记录? PC2 2.ARP缓存的作用是什么?缓存中记录的保存时间是否越长越好?解释理由。 用于存放其他设备的 IP 地址到物理地址的映射表。当主机欲向本局域网上其他主机发送IP 包时,先在本地 ARP 缓存中查看是否有对方的 MAC 地址信息。如果没有,则 ARP 会在网络中广播一个 ARP 请求,拥有该目的 IP 地址的设备将自动发回一个 ARP 回应,对应的 MAC 地址将记录到主机的 ARP 缓存中。 记录的保存时间不是越长越好。网络可能经常有设备动态加入或者撤出,并且更换设备的网卡或 IP 地址也都会引起主机地址映射发生变化 3.主机使用ARP能查询到其他的网段的MAc地址吗?为什么? 不能,不同网段的通信需要依靠网关,需要在IP协议的层面实现,而ARP只能帮助主机寻找同段的主机MAC地址。 4.在任务二的步骤3中,ARP被执行了几次? 0次。 实验四:ICMP 分析 实验配置说明 实验目的 熟悉 ICMP 报文格式和数据单元的封装方式。 利用 ping 程序和 tracert 命令,熟悉 ICMP 的工作原理。 进一步理解 ICMP 的作用。实验步骤 任务一:使用 Ping 命令观察 ICMP 步骤1:捕获并观察 ping 程序发送和回应的 ICMP 报文 请在其中 At Device显示为 PC0 的下一个事件中,这是第一条应答报文。单击 Inbound PDU Details查看 ICMP 报文的内容。 步骤2:观察主机无法达到的 ICMP 回应报文 任务二:使用 tracert 命令观察 ICMP 步骤1:使用 tracert 命令观察一个 IP 数据包从源点到终点的转发路径 在 PC0 的命令行窗口中输入命令: tracert 200.1.2.1,观察IP 数据包从 PC0 到 PC1 的转发路径。将命令的输出结果与网络图及设备的IP 地址进行比对。 步骤2:在 Simulation 模式中观察学习tracert 命令的工作原理 进入 Simulation 模式。设置 Event List Filters 只显示 ICMP 事件,并重复步骤 1。最小化 PC0 的配置窗口,运行模拟并捕获事件和数据包。 在 Event List中,分别找到其中 At Device 显示为 Router1和 PC2 的下一个事件,单击其彩色正方形。这分别是第一条 ICMP 超时错误报告报文和应答报告报文。单击 Inbound PDU Details查看 ICMP 报文的内容。 思考题 1.在 traert 命令中,为什么源主机对于每个 TTL 值都要重复进行多次探测? 2.ICMP 是否会给 Internet 带来安全隐患? 4-1 运输层端口观察实验 实验目的: 理解运输层的端口与应用层的进程之间的关系; 了解端口号的划分和分配。实验步骤: 任务一:通过捕获的DNS事件查看并分析UDP的端口号 步骤1:捕获DNS事件 步骤2:查看并分析UDP用户数据报中的端口号 请求包的与应答包的源、目的端口号是相反的。 步骤3:分析端口号的变化规律 重新回到PC机的浏览器窗口单击Go(转到)按钮再次请求相同的网页,从新捕获的DNS事件中观察DNS客户端与DNS服务器端的端口号是否发生变化。如果没有,分析其原因;如果有,分析其变化的规律。 PC端的端口发生了改变,而服务器的端口号没有改变。服务器的端口号是固定的,而客户端的端口不固定。 任务二:通过捕获的HTTP事件查看并分析TCP的端口号 步骤1:捕获HTTP事件 步骤2:查看并分析TCP报文中的端口号 PC端的端口号是1028,服务器端的端口号是80. 任务三:分析运输层端口号 步骤1:分析运输层端口号与应用进程之间的关系 不一样,任务一服务器端口号是53,任务二中是80. 步骤2:分析运输层动态端口号的分配规律 前后两次客户端的端口号都改变了,而服务器的端口号没有改变。思考: 运输层如何区分应用层的不同进程? 通过数据包的源端口号。 若使用Reset Simulation(重置模拟)按钮后再重新进行捕获,端口号如何变化?新的值与重置前有关吗? 端口号会改变,和之前的没有关系。 4-2 UDP协议与TCP协议的对比分析 实验目的: 熟悉UDP与TCP协议的主要特点及支持的应用协议; 理解UDP的无连接通信与TCP的面向连接通信; 熟悉TCP报文段和UDP报文的数据封装格式。实验步骤: 任务一:观察UDP无连接的工作模式 步骤1:捕获UDP事件 步骤2:分析UDP无连接的工作过程 没有建立连接,直接由服务器发送数据包过来。 LENGTH长为35。首部占用8字节,数据部分为23字节。 任务二:观察TCP面向连接的工作模式 步骤1:捕获TCP事件 步骤2:分析TCP面向连接的工作过程 在捕获到的第一个HTTP事件之前及最后一个HTTP事件之后是否有TCP事件; 都有TCP事件。 第一个以及最后一个HTTP事件对应的TCP报文中的sequence number(序号)、ACK number(确认号)的值以及它们与data length(数据长度)的关系; sequence number(序号)、ACK number(确认号)的值两次的都不一样。data langth都是20。 思考: TCP报文首部中的序号和确认号有什么作用? 序号是:当前所携带的数据的第一个字节的顺序号(如:本次连接共要发送1000个字节,已发出了100个字节,现在发送下一个报文,假设每个报文携带的数据为100字节,则这个报文的头结构中的序号是100【注:从0开始编号】)。 确认序号是:接收端期望接收的下一个报文的序号,如上例中那个报文已被正确接收,则接收端会发送一个ACK=1且确认序号=200的应答报文给发送方。 无连接的UDP和面向连接的TCP各有什么优缺点? 1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接 2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付 3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的 UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等) 4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信 5、TCP首部开销20字节;UDP的首部开销小,只有8个字节 6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道 4-3 TCP的连接管理 实验目的: 熟悉TCP通信的三个阶段; 理解TCP连接建立过程和TCP连接释放过程。实验步骤: 任务一:捕获TCP事件 任务二:分析TCP连接建立阶段的三次握手 任务三:分析TCP连接释放阶段的四次握手、、思考: 连接建立阶段的第一次握手是否需要消耗一个序号?其SYN报文段是否携带数据?为什么?第二次握手呢? 第一次要消耗一个序号,SYN没有携带数据。因为TCP规定,SYN不能携带数据。第二次握手,也需要消耗一个序号,同样也不能携带信息。 本实验中连接释放过程的第二、三次握手是同时进行的还是分开进行的?这两次握手何时需要分开进行? 是同时进行的,当双方均有数据需要发送时,而只有一方数据发送完毕而关闭单方向的TCP连接时,第二第三次握手才需要分开进行。 本实验中连接释放阶段的第四次握手,PC向Server发送最后一个TCP确认报文段后,为什么不是直接进入CLOSED(已关闭)连接状态,而是进入CLOSING(正在关闭)连接状态? 因为此时PC还需要进入TIME-WAIT状态,以保证PC发送的最后一个ACK保温能够到达Server,同时还可以防止失效的连接请求报文段出现在本连接中。 本实验中TCP连接建立后的数据通信阶段,PC向Server发送的了多少数据? Server向PC发送的数据呢? PC向Server发送了107B数据,Server向PC发送了333B的数据。 5-1 DNS解析实验 实验目的: 理解DNS系统的工作原理; 熟悉DNS服务器的工作过程; 熟悉DNS报文格式; 理解DNS缓存的作用。实验步骤: 任务一:观察本地域名解析过程 步骤1:在PC的浏览器窗口请求内部Web服务器的网页 步骤2:捕获DNS事件并分析本地域名解析过程 任务二:观察外网域名解析过程 步骤1:在PC的浏览器窗口请求外部Web服务器的网页 步骤2:捕获DNS事件并分析外网域名解析过程 任务三:观察缓存的作用 步骤1:查看本地域名服务器cn_dns的缓存 步骤2:在PC的浏览器窗口请求外部Web服务器的网页 思考: DNS协议使用运输层的什么协议? UDP协议 DNS缓存有什么作用?在Packet Tracer中如何清空DNS缓存? DNS缓存用来存放最近解析过的域名等信息,因此可以提高解析 效率。若需要在Packet Tracer中清空某个DNS服务器的缓存,可以进入该 DNS服务器的配置窗口,单击窗口下方的DNS Cache按钮,在弹出的窗口 中单击下方的Clear Cache按钮即可把DNS缓存清空。 本实验中PC与本地域名服务器cn_dns之间的解析是递归还是迭代?本地域名服务器cn_dns与根域名服务器root_dns之间呢?若后者用另一种解析方法,则域名服务器之间DNS的请求和应答的交互过程应如何? 本实验中PC与本地域名服务器cn_dns之间的解析是递归查询,本地域名服务器cn_dns与根域名服务器root_dns之间也是递归查询。若后 者用的是迭代查询,则当cn_dns向根域名服务器root_dns请求解析而 root_dns无法解析出结果时,不是由root_dns全权帮助cn_dns直接解析出结果并将解析结果告知cn_dns而是root_dns会告诉cn_dns应该向哪一个域名服务器进行查询,剩下的解析由cn_dns自己进行。 5-2 DHCP分析 实验目的: 了解DHCP协议的作用; 熟悉DHCP的工作过程; 熟悉DHCP的报文格式。实验步骤: 任务一:DHCP服务器为内网主机PC1动态分配IP地址 步骤1:捕获DHCP事件 步骤2:分析DHCP的工作过程及报文格式 本步骤注意观察并完成以下几项内容: 分析DHCP协议的工作过程; DHCP客户端发送Discover包 PC0接收DHCP发来的DHCP offerpacket DHCP服务器接收到来自PC0的DHCP requestedpacket PC0接收DHCP发来的DHCP ACK packet 回到静态配置IP状态PC给DHCP发送releasepacket DHCP报文类型; 是UDP报文类型 丢弃 路由器Router1对DHCP报文的处理方式; 判断DHCP报文的发送方式(单播/广播); 广播的形式,交换机将数据包转发给了所有连接的主机 DHCP报文格式中各字段的值及其含义; PC1分配到的IP地址。最后IP为192.168.2.6 任务二:DHCP服务器为外网主机PC2动态分配IP地址 步骤1:捕获DHCP事件 步骤2:配置DHCP中继后重新捕获DHCP事件 步骤3:分析DHCP的工作过程 PC2分配到的IP地址。 完成后单击Reset Simulation(重置模拟)按钮,将原有的事件全部清空;同时关闭PC1的配置窗口。 思考: 如何判断报文的发送方式是单播还是广播? 查看报文的目的IP地址。 任务二中为何需要在路由器Router2中配置DHCP中继?DHCP中继有何作用? 分析DHCP服务器在分配IP地址时的规律。 若有多个DHCP服务器,DHCP协议的工作过程会有变化吗?为什么? 5-3 HTTP分析 实验目的: 熟悉HTTP协议的工作过程; 理解HTTP报文的封装格式。实验步骤: 任务一:PC请求较小的页面文档 步骤1:捕获PC与Web1之间的HTTP事件 步骤2:理解HTTP协议的工作过程并分析HTTP报文格式 任务二:PC请求较大的页面文档并与任务一对比 步骤1:捕获PC与Web2之间的HTTP事件 步骤2:与任务一进行对比 本任务中PC请求的页面文档长度比任务一中更大,Web2回发的HTTP 响应报文中需要使用多个TCP报文段。 思考: HTTP响应报文使用的TCP报文段的个数由什么值决定?该值在什么时候确定?本实验中该值为多少? HTTP响应报文使用的TCP报文段的个数由MSS决定,该值在 TCP连接建立阶段确定。本实验中该值在TCP连接建立阶段确定为536B。 若PC请求的页面文档长度超过66000字节,HTTP的整个通信过程如何? 若在PC的Web浏览器中输入的域名有误,是否能捕获到HTTP事件?为什么? 若在PC的Web浏览器中输入的域名有误,将无法捕获到HTTP 事件。因为无法从域名中解析出相应的IP地址,因而也就无法找到正确的 Web服务器并向其发送HTTP请求。 在PC机的浏览器窗口向Web1请求网页math.fjnu.edu.cn并收到Web1返回的页面后,TCP的连接会保持还是断开?若进一步点击页面中的超链接,是否需要重新建立一条TCP连接? 在PC的浏览器窗口向Web 1请求网页math.Qnu.edu.cn并收到Web 1 返回的页面后,TCP的连接将会断开。因此,当进一步点击页面中的超链接时,将需要重新建立一条TCP连接。 5-4 电子邮件协议分析 实验目的: 了解邮件服务器的配置以及邮件客户端账号的设置; 熟悉Packet Tracer中收发电子邮件的操作方法; 观察发送和接收邮件时的报文交换,从而更好的理解发送邮件和接收邮件的工作过程。实验步骤: 任务一:分析用SMTP发送邮件的工作过程 步骤1:在PC0设备发邮件并捕获SMTP事件 步骤2:理解SMTP发送邮件的工作过程 PC0建立SMTP数据包,然后通过Switch1发送给MAIL_SEV_1,MAIL_Sev_1,在给PC0发送确认。之后MAIL_Sev_1通过Switch1,Switch0,Switch2发送给MAIL_Sev_2, MAIL_Sev_2再给MALI_Sev_1发送确认消息。 当PC0向本地邮件服务器MAIL_Serv_1发送邮件时,PC0使用的端口号是1027,MAIL_Sev_1使用的是25.当MAIL_Serv_1作为SMTP客户端向接收方邮件服务器MAIL_Serv_2发送邮件时,MAIL_Serv_1使用的是1027,MAIL_Serv_2使用的端口号是25。 任务二:分析用POP3接收邮件的工作过程 步骤1:在PC1设备收邮件并捕获POP3事件 步骤2:理解POP3的工作过程 POP3接收邮件的完整过程; PC1给MAIL_Sev_2发送接受邮件请求,MAIL_Sev_2收到后,发送右键给PC1。 当PC1作为POP3客户端向接收方邮件服务器MAIL_Serv_2读取邮件时,PC1及MAIL_Serv_2使用的端口号。 PC1使用的是1026端口号,MAIL_Serv_2使用的是110。 思考: (1)若希望同时捕获SMTP和POP3事件,应该如何操作? 先给PC1发送一封邮件,MAIL_Sev_2收到后,再发送一封,同时PC2点击接受邮件,就可以同时捕获到SMTPA和POP3。 (2)若电子邮件的发送方与接收方不在同一个网段,则本实验需要如何修改? 将发送发接受方设置同一网关。 5-5 文件传送协议分析 实验目的: 了解FTP协议的作用; 熟悉Packet Tracert 中FTP常用命令的使用并进行验证; 实验步骤: 任务一:PC登录FTP Server 步骤1:PC登录FTP服务器端并捕获相关的FTP事件 步骤2:分析登录过程中FTP协议的工作过程 通过分析报文交互的过程观察FTP登录时PC和FTP Server之间FTP协议的工作过程。注意观察并分析FTP登录过程中各类报文的内容及含义。 服务器向PC请求用户名 pc向服务器发送用户名。 服务器向PC请求密码。 计算机网络实验报告 专业: 学号: 姓名: 时间: 实验一 常用网络命令的使用 一、实验目的 1.掌握几种常用的网络命令,通过使用这些命令能检测常见网络故障 2.理解各命令的含义,并能解释其显示内容的意义 二、实验内容 1.运行 Windows 常用的网络命令,ipconfig、ping、netstat、nbtstat、arp、route、net、tracert 2.利用子网掩码、实现子网的划分 3.了解 VRP 的各种视图及各视图下的常用命令 三、实验原理、方法、手段 该实验通过执行一些常用的网络命令,来了解网络的状况、性能,并对一些网络协议能 更好的理解。下面介绍一下实验中用到的网络命令: 1.ipconfig 命令 1)ipconfig /all 显示所有的有关IP 地址的配置信息; 2)ipconfig /renew_all 重试所有网络适配器; 3)ipconfig /release_all 释放所有网络适配器。 2.ping 命令 1)ping 127.0.0.1用于测试本机的TCP/IP 协议设置是否正确。 3.netstat 命令 该命令用于检验网络连接情况,它可以显示当前正在活动的网络连接的详细信息。 1)netstat/s 按照各个协议分别显示其统计数据 2)netstat/e 用于显示关于以太网的统计数据 3)netstat/a 显示所有有效连接信息列表 4.nbtstat 命令 该命令用于查看本地计算机或远程计算机上的NetBIOS 的统计数据,显示协议统计情况以及当前TCP/IP 的连接所使用NETBIOS 情况,运用NETBIOS,可以查看本地计算机或远程计算机上的NETBIOS 名字列表。 1)nbtstat/ n 显示寄存在本地的名字和服务程序; 5.arp 命令 该命令可显示、修改IP 地址到物理地址转换表。1)nbtstat/a 查看高速缓存中所有项目 6.route 命令 ROUTE 命令用于显示、人工添加和修改路由表项目。1)route print 用于显示路由表中的当前项目; 2)route add 用于将新路由项目添加给路由表 7.net 命令 net 命令是WIN 系列里面最有用的网络方面的命令之一,它不是一个命令,而是一组 命令。 1)net use 用于将计算机与共享的资源相连接,或者切断计算机与共享资源的连接。当不带选项使用本命令时,会列出计算机的连接。 8.tracert 命令 Tracert 一般用来检测故障的位置,可以用tracert IP 在哪个环节上出了问题。 实验二 二层以太网组网 一、实验目的 1.理解二层交换产品的组网方式和方法,掌握二层以太网组网的动手能力 2.进行 PC 机与交换机的组网 3.进行服务器与 PC 机的组网 4.进行服务器、PC 机与交换机的组网 二、实验内容 1.连接 PC 机、服务器、网络设备 2.配置以太网交换机的基本功能 三、实验原理、方法和手段 将PC 机、服务器、交换机成如图的网络图谱。注意,同类型设备之间需要使用交叉网线,非同类型设备使用直连网线。 由于所有的PC 机和服务器在同一个LAN 中,并且在IP 寻址设计上在同一个子网。因此,设置PC 机和服务器的IP 地址,地址的前缀一样,主机号不能冲突。 通过ping 命令测试PC 机及服务器之间的连通性。 实验三 网络协议分析 一、实验目的 1.掌握利用网络协议的分析、检测软件对实际网络中的各种协议进行分析的方法; 2.通过各协议的分析,进一步理解各协议的工作原理及其相应的报文格式 二、实验内容 1.使用 Wireshark 在网络上对数据报进行搜集 2.对搜集到的数据包进行分析,重点分析 ARP、IP、ICMP、TCP、UDP 等协议数据单元。 三、实验原理、方法、和手段 Wireshark 是一个网络数据包分析软件,它能够抓获网络数据包,并尽量显示数据包的所有细节。利用Wireshark,网络管理员可以找出网络故障的根源,网络安全工程师可以找出安全隐患,开发人员可以调试所写的协议,而更多人可以了解网络协议的内部。Wireshark 最基本的功能就是从网络上抓获实时的数据包,通过选择菜 单“Capture‐>Interface”,将出现Capture Interface 对话框,如图3‐1。 图3‐ 1 Wireshark 的Capture Interface 对话框 通过点击某个接口的Option 按钮,可以设置该接口在抓获数据包时的相关参数,如图3‐2。注意,如果是以太网接口,通常可以选择工作在混杂promiscuous 模式,但如果是在一些其它类型的接口上,则必须不能工作在该模式下,如Wifi 接口。 通过设置好相关参数后,便可以点击Start 按钮,开始抓获数据包,通过双击数据包列表中所感兴趣的某个具体的数据包,可以查看该数据包的PDU 信息。 除此以外,Wireshark 还有一些高级特性,如跟踪指定的TCP 数据流、将相关的数据包进行组合、将数字地址解析为名字等。利用Wireshark 的统计特性,可以显示抓获的数据包总体信息、协议层次分布图、特定对话信息、端点信息、IO 图等。 实验四 常用应用层协议 一、实验目的 1.了解常用应用层协议(DNS、FTP、TELNET、SMTP、POP、HTTP 等)的基本原理、工作过程等; 2.熟悉 FTP、TELNET、OUTLOOK 使用方法 二、实验内容 1.了解常用应用层协议的工作原理 2.熟悉 Windows 环境下FTP、Telnet、OUTLOOK 的使用 三、实验原理、方法、和手段 1)布局 2)自动为PC分配IP地址 3)设置DNS 基本参数,提供DNS 服务。 4)生成DNS 分组,查看DNS 解析过程。 5)设置FTP 服务参数,启动FTP 服务。 6)设置STMP 和POP3 参数,启动EMAIL 服务。 7)生成SMTP 消息,查看邮件发送过程。 8)设置HTTP 参数,启动WWW 服务。 9)设置收发人信息,进行通信测试 实验总结: 通过几节课的网络上机实验,我学会了如何运行 Windows 常用的网络命令,利用子网掩码、实现子网的划分,了解 VRP 的各种视图及各视图下的常用命令。理解了二层交换产品的组网方式和方法,掌握二层以太网组网的动手能力。知道如何进行 PC 机与交换机的组网,如何进行服务器与 PC 机的组网,如何进行服务器、PC 机与交换机的组网。掌握了利用网络协议的分析、检测软件对实际网络中的各种协议进行分析的方法,通过各协议的分析,理解了各协议的工作原理及其相应的报文格式。了解了常用应用层协议的基本原理、工作过程等,熟悉 FTP、TELNET、OUTLOOK 使用方法。虽然,在实际操作中会遇到很多不懂的问题和难题,但是在不断地尝试和试验后,最终找到了解决问题的方法,使得实验成功运行。在此期间,多亏了老师的耐心提点和同学间的相互帮助才能顺利的进行此实验。综合操作实验,把所有零碎的知识都串起来了,体会到计算机网络强大功能。其实每次的实验都离不开探索与合作,每次的实验任务都比较艰巨,在学习到知识的同时我也更加认识到探索精神的重要性。实验过程中培养了我在实践中研究问题,分析问题和解决问题的能力以及培养了良好的工程素质和科学道德,例如团队精神、交流能力、独立思考、测试前沿信息的捕获能力等;提高了自己动手能力,培养理论联系实际的作风,增强创新意识。第二篇:socket编程实验心得体会
第三篇:算法实验报告
第四篇:计算机网络实验报告
第五篇:计算机网络实验报告