网络原理上机实验报告
书院:
班级:
学号:
姓名:
日期:2013.6.3
实验一基于Boson Netsim软件的路由器配置实验
1.实验目的:掌握路由器等设备的配置,掌握简单的组网技术。
2.实验要求:本实验要求学生自行构建一个网络拓扑,要求包括3个以上路由器,用于连接两个以太网,每个以太网至少包括1台主机;完成路由器、主机等设备的配置;使用RIP或OSPF来维护路由器的路由表。
(1)了解路由器、交换机等网络常用设备的配置方法;
(2)掌握CLI方式(命令行)下IOS命令的使用;
(3)掌握静态路由和动态路由(RIP、OSPF)的配置方法。
3.实验原理:
3.1 VLAN
VLAN(Virtual Local Area Network)即虚拟局域网,是为解决以太网的广播问题和安全性而提出的一种协议。VLAN 可以不考虑用户的物理位置,根据功能、应用等因素将用户从逻辑上划分为一个个功能相对独立的工作组。每个交换机端口只能被分配在一个VLAN 上。同一个VLAN 中的各端口将共享广播,而不在同一VLAN 上的端口间不共享广播。这样一个VLAN 内部的广播和单播流量都不会转发到其他VLAN 中,从而有助于控制流量、减少设备投资、简化网络管理、提高网络的安全性。VLAN的划分有四类:基于端口划分,基于MAC地址划分,基于网络层划分和根据IP组播划分。较常使用的是基于端口划分的VLAN,这种方法根据以太网交换机的端口来划分。
3.2 路由信息协议RIP
RIP是以跳数作为度量的距离向量协议,广泛用于因特网,是一种内部网关协议IGP,在自治系统AS内部执行路由功能。RIP规定,路由器每30s向外广播一个路由更新报文,接到广播的路由器将收到的信息添加到路由表中。每个路由器如此广播,最终网络上所有的路由器都会得知全部的路由信息。同时RIP规定从源到目的路径的最大跳数为15,跳数根据所经过的路由器个数来度量,也就是说网络中的路由器个数最多15个,如果超过15,则认为该目的网络不可达。所以RIP只适用于网络规模较小的环境。
4.实验步骤:
4.1 网络拓扑图:
4.2 配置路由实现网络的联通
设置路由1的以太网端口地址为192.168.1.2,和路由2的连接端口地址为192.176.2.1;路由2同路由1相连端口4地址设为192.176.2.2,另一端口同路由3连接地址为202.117.14.2;路由3同路由2相连端口地址为202.117.14.3,同PC2相连以太网端口地址为202.117.15.1;PC1的IP地址:192.168.1.223;PC2的IP地址为:202.117.15.14。使用动态Rip协议构建路由表,实现IP分组的转发。
4.2.1 Router 1:
其中:
表示配置r1路由端口地址4.2.2 Router 2
其中:
表示配置r2路由端口地址4.2.3 Router 3:
其中:
4.2.4 PC1的地址:
PC2的地址:
4.3 Ping的过程:
先使用PC2逐层ping路由端口,建立路由表,再直接ping PC1;然后PC1 ping PC2得出结果。成功ping通,实现了PC1和PC2通过3个路由器(使用rip协议)的通讯。实验成功。
5.实验总结:
在实验中由于对软件的不了解,使得输入命令时总是打错了命令导致出错,后来打顺了才好些。实验中,总是要考虑接口问题,这需要在配置之前,好好考虑一番。通过这次实验使我加深对路由器在实际工作中的配置的了解,能够在模拟状态下利用所学知识在相关软件配置一个网络,实现主机之间的通讯,学会了学以致用,,接触到了路由表的建立,对数据在网络中的传输有了清醒的认识,为以后在网络方面运用相关知识提供了锻炼机会。
实验二利用分组嗅探器(ethereal)分析协议HTTP 1.实验目的:实验目的:利用ethereal软件分析HTTP及其下层协议(TCP协议、IP协议等),了解网络中数据封装的概念,并掌握HTTP及TCP协议的工作过程。
2.实验要求:从ethereal截获的报文中提取并分析HTTP请求报文和HTTP应答报文;综合分析截获的报文,概括HTTP协议的工作过程;从截获报文中选择TCP建立连接和释放
连接的报文,分析各个字段的值并概括TCP协议的工作过程;从截获报文中分析IP协议的
工作过程和IP分组的格式。
(1)掌握计算机网络中数据封装的概念;
(2)掌握HTTP协议的基本原理及数据包格式;
(3)掌握TCP协议的连接建立、数据传输、连接释放的过程;
(4)掌握IP协议的基本原理和IP分组的格式。
3.实验原理:
Ethereal是一款免费的网络协议分析程序,支持Unix、Windows。借助这个程序,你既可以直接从网络上抓取数据进行分析,也可以对由其他嗅探器抓取后保存在硬盘上的数据进行分析。你能交互式地浏览抓取到的数据包,查看每一个数据包的摘要和详细信息。Ethereal 有多种强大的特征,如支持几乎所有的协议、丰富的过滤语言、易于查看TCP会话经重构后的数据流等。
要深入理解网络协议,需要仔细观察协议实体之间交换的报文序列。为探究协议操作细节,可使协议实体执行某些动作,观察这些动作及其影响。这些任务可以在仿真环境下或在如因特网这样的真实网络环境中完成。观察在正在运行协议实体间交换报文的基本工具被称为分组嗅探器(packet sniffer)。顾名思义,一个分组嗅探器捕获(嗅探)计算机发送和接收的报文。一般情况下,分组嗅探器将存储和显示出被捕获报文的各协议头部字段内容。图1为一个分组嗅探器的结构。
图1右边是计算机上正常运行的协议(在这里是因特网协议)和应用程序(如:web浏览器和ftp客户端)。分组嗅探器(虚线框中的部分)是附加计算机普通软件上的,主要有两部分组成。分组捕获库接收计算机发送和接收的每一个链路层帧的拷贝。高层协议(如:HTTP、FTP、TCP、UDP、DNS、IP等)交换的报文都被封装在链路层帧(Frame)中,并沿着物理介质(如以太网的电缆)传输。图1假设所使用的物理媒体是以太网,上层协议的报文最终封装在以太网帧中。
分组嗅探器的第二个组成部分是分析器。分析器用来显示协议报文所有字段的内容。为此,分析器必须能够理解协议所交换的所有报文的结构。例如:我们要显示图1中HTTP 协议所交换的报文的各个字段。分组分析器理解以太网帧格式,能够识别包含在帧中的IP 数据报。分组分析器也要理解IP数据报的格式,并能从IP数据报中提取出TCP报文段。然后,它需要理解TCP报文段,并能够从中提取出HTTP消息。最后,它需要理解HTTP 消息。
4.实验步骤:
4.1 启动Ethereal分组俘获器。选择正确的NIC,进行报文的捕获
4.2 开始进行抓包
4.3 点击stop停止抓包
4.4 切换到报文浏览的主界面进行分析操作
4.5 截图:
5.实验分析:
(第一行,第二行):IP为119.188.15.241的客户端向IP为115.154.87.104的服务端发送请求建立TCP 连接,服务端响应并发出响应信号。(第三行,第四行,第五行):客户端未收到响应信号而出错,使得TCP连接不成功。(第六行,第七行):重新建立TCP连接。(第11行,第17行):IP为123.125.65.210的客户端向IP为115.154.87.104的服务端发送请求下载数据的连接,服务器响应,同时客户端下载数据。(第21,行,第22行,第23行):数据传输成功后,TCP协议通过三次握手来断开TCP连接。
6.实验总结:
通过这次实验,学会了分析HTTP协议的连接并判断是否成功并掌握了它的基本原理;加深了对TCP协议的连接建立、数据传输、连接释放的过程的了解;掌握IP协议的基本原理和IP分组的格式。
实验三基于Socket的网络编程实验
1.实验目的:了解FTP协议的工作原理,掌握基于socket的网络编程的基本原理。
2.实验要求:基于Socket网络编程技术实现FTP客户端,能完成对FTP服务器的访问,并可执行上传和下载操作。
(1)掌握基于socket网络编程的基本知识;
(2)掌握FTP客户端和服务器端数据交换的方式和数据包格式。
3.实验原理:
通过模仿FTP协议,利用基于TCP或者基于UDP的Socket,实现客户端与服务端的请求响应和数据传输。服务端接收客户端发出的请求命令后做出响应,完成上传下载及其他文件操作功能。
4.实验步骤:
流程如下:
(1)服务端启动,等待用户连接
(2)客户端启动,请求与服务端连接
(3)服务端应答,与用户建立连接
(4)用户输入目录操作、文件上传下载等指令,服务端接收到指令后进行解析,作出相应的响应
(5)重复(4)的过程,直至用户输入quit指令要求离开,服务结束
5.实验结果:
6.实验总结:
通过这次实验,对socket的网络编程有了更清楚的认识,懂得了它怎么联网并对ftp 上的文件的上传,下载等操作,知道了怎么把书上的知识在实际中的运用。
7.实验代码:
#pragma comment(lib,"ws2_32")
#include
#include
#include
#include
#include
#include
#include"ftpClient.h"
using namespace std;
#define MENU "Welcome To The FTP Server,Please Input The Command And Enter!Such as: LIST,CWD,RETR,STOR,DELE,RMD,MKD"
//定义了在ftp服务器上能进行的操作
int main()
{
char Dir[256];
memset(Dir,NULL,256);
int returnNum;
char ip[16];
int port;
char test;
char userName[50];
memset(userName,NULL,50);
strncpy(userName,"anonymous",strlen("anonymous"));
char PWD[50];
char temp[512];
char Command[4];
//char Parameter[256];
cout<<"Please input the ip of the FTP server::";
cin>>ip;
cout<<"Do you want to change the port,Now the port is 21 :[Y/N]";
//使用命令端口21来连接到ftp服务器,在ftp协议下不用更改
cin>>test;
if(test=='Y'||test=='y')//连接到ftp服务器
{
cout<<"Please input the num of the port::";
cin>>temp;
port =(temp[0] - '0')*100+(temp[1] - '0')*10+(temp[2] - '0'); //将字符型转化为数值型
memset(temp,NULL,2);
}
else if (test=='N'||test=='n')
port = 21;
else
cout<<"Error"</************************************
用户登录模块
************************************/
ftpClient* client = new ftpClient(ip,port);
cout<<"Do you want to change USERNAME,Now is anonymous:[Y/N]"; //不更改时默认的是匿名登录
cin>>test;
if(test=='Y'||test=='y')
{
cout<<"UserName::";
cin>>userName;//输入登录名
}
else if (test=='N'||test=='n')
cout<<"UserName::anonymous"<else
cout<<"Error Check input!"<client->setCommand("USER",userName);//验证登录名
cout<client->sendCommand(); //向ftp服务器发送用户名
returnNum = client->receiveCommand(); //从ftp服务器接收到的响应码,正确时应为331
if(returnNum == 331)
{
cout<<"PassWord::";
cin>>PWD;//输入密码
client->setCommand("PASS",PWD);
client->sendCommand();
returnNum = client->receiveCommand(); //从ftp服务器接收响应码,正确时应返回230
if(returnNum == 230) //用户已经正确登录到了ftp服务器
{
while(1)
{
cout<