热门搜索 :
考研考公
您的当前位置:首页正文

实验1 网络协议分析与仿真

来源:伴沃教育
计算机网络协议仿真实验

协议分析实验

在此部分,设计了14个网络协议分析实验,基本涵盖了前面网络原理中介绍的各种协议。学生使用附带的网络协议仿真教学系统完成这些实验,可以对网络协议有更深入的理解。这些实验可以根据教学具体情况选做。

实验一 以太网帧的构成

【实验目的】

掌握以太网帧的构成模式,能够识别不同的MAC地址并理解MAC地址的作用,了解网络故障分析仪的基本使用方法。

【实验学时】 4学时

【实验类型】 综合型

【实验要求】

1、了解协议仿真编辑器的五个组成部分及其功能 2、了解网络协议分析仪的各组成部分及其功能

3、学会使用协议仿真编辑器编辑以太网帧,包括单帧和多帧的编辑 4、学会观察并分析地址本中的MAC地址 5、学会分析以太网帧的MAC首部 6、理解MAC地址的作用

7、理解MAC首部中的LLC-PDU长度/类型字段 【实验原理】 (1) 以太网首部 以太网目的地址 以太网源地址 帧类型 6 6 2 帧类型字段:表示后面数据类型。例如0x0806表示ARP请求或应答。 (2) 太网帧的构成 46----1500字节 以太网首部 14

IP首部 20-60

协议(例TCP)首部 根据协议而定(TCP20-60)

应用数据

以太网尾部 4

(3) 其他原理请参考教材:

计算机网络协议仿真实验

第一章:计算机网络的基本概念 第二章:局域网技术

【实验步骤】 一 仿真机端

练习一:运行ipconfig命令

1、启动网络协议仿真编辑器,选择“工具”菜单栏中的IPCONFIG项,观察 ipconfig /all 命令下的运行结果,获得本机的主机名及以太网地址 2、在地址本中找到本机的信息

练习二:单帧编辑并发送

1、打开协议仿真编辑器,在界面初始状态下,程序会自动新建一个单帧。可以利用协议仿真编辑器打开时默认的以太网帧进行编辑。此时在协议仿真编辑器的各部分会显示出该新帧的信息:

(a)多帧编辑器中显示:新帧的序号(为1)、概要信息 (b)协议树中显示以太网MAC层协议

(c)单帧编辑器中显示新帧各字段的默认值

(d)十六进制对照表中显示新帧对应的十六进制信息 2、编辑以太网帧;

在单帧编辑器中编辑该帧,具体步骤为: (a)填写“目的MAC地址”字段; 方法一:手工填写。

方法二:选择地址本某主机的MAC地址,复制并粘贴到目的MAC地址栏中,替换掉默认值。

(b)填写源MAC地址字段,方法同上; 注意:仿真机可以仿真本机发送的MAC帧,也可以仿真另一台机器发送MAC帧,所以,源MAC地址字段可以填写本机MAC地址,也可以填写其他机器的MAC地址。

(c)填写“类型或长度”字段;

方法一:双击该字段,更改默认设置,填写上一层协议类型值(十六进制表示);

方法二:单击“类型或长度”字段,右端会出现一个下拉键头,点击该键头,出现下拉菜单,其中列出可选的上层协议类型,单击其中一个进行选择,该协议对应的十六进制值会自动填写;

3、单帧编辑器与十六进制对照表是联动的,观察十六进制对照表中该帧的信息; 4、选中单帧编辑器中的某一字段,该字段对应的十六进制值会相应地改变颜色; 5、点击工具栏或菜单栏中的“发送”,在弹出菜单上选择“按范围发送”或“自定义发送”,正确填写发送的范围后,选择“发送”按钮,发送该帧;

6、在监控机一端捕获新发送的帧并分析(捕获数据的方法参考本实验后半部分:监控机端的实验步骤);

7、重新回到步骤(2)类型和长度字段分别填写以下十六进制值:

计算机网络协议仿真实验

(a) 0800 :对应的上层协议是什么? (b) 0806 :对应的上层协议是什么? (c) 0100 :对应的上层协议是什么? 该值的具体含义是什么?

在监控机端捕获该帧,捕获到帧的长度是多少?分析原因。 (d) 0001 :对应的上层协议是什么? 这样填写是否正确?分析原因。

练习三:编辑并发送帧序列

1、按照单帧编辑的步骤编辑多个帧; 2、对每一帧可以重新设置发送的时间间隔和发送的重复次数,如不设置,则采用默认值; 方法为:点击某一帧左边的“+”,即可展开为两行,在第一行内填写此帧与其上一帧的发送时间间隔(单位:ms 默认值:1000),展开项的第二行为设置此帧的重复发送次数(默认值为1)。

3、编辑好以后,发送帧序列;

点击菜单栏或工具栏中的“发送”按钮,选择弹出菜单上的“按范围发送”并编辑起始帧序号和结束帧序号

如果选择“自定义发送”则在“发送序号”面板中选择要发送的单帧序号,并根据需要修改发送时间和发送次数。编辑完成后点击“发送”按钮,即完成帧的发送。

4、观察主界面底部“状态”栏中的各数据信息; 5、在监控机一端捕获数据并分析。

练习四:编辑并发送mac广播帧

请同学们考虑mac广播帧的目的mac地址应该如何填写。 二 监控机端

练习一:捕获数据并分析。

切换数据采集器的按钮,将监控机通过主控设备接在局域网中。 1、启动协议详细解析功能,获得若干以太网帧。 对其中的5-10个帧的以太网首部进行观察和分析;

分析的内容为:源MAC地址 目的MAC地址 上层协议类型。 2、以MAC地址为过滤条件捕获若干以太网帧。

如:捕获源MAC地址为:00-09-74-A5-6F-4C(选择地址本中的一个MAC地址)的帧 对每一帧的以太网首部进行观察分析; 分析的内容为: 源MAC地址; 目的MAC地址; 上层协议类型。

计算机网络协议仿真实验

3、以本机MAC地址为过滤条件捕获相应的以太网帧(多个); 对其中目的MAC地址为本机MAC地址的以太网帧进行观察分析: (a) 这些帧的源MAC地址都是什么?

(b) 对照地址本观察这些MAC地址对应的IP地址有何特点? (c) 说明:为什么能收到来自这些源MAC地址的帧?

(d) 将捕获到的以太网帧保存到文件中,文件名为:实验一.zdt。 练习二:学习监控机端其他的协议分析功能。 1、点击主机状况,观察分析结果信息。 2、点击会话状况,观察分析结果信息。 3、点击协议统计,观察分析结果信息。 4、点击性能状况,观察分析结果信息。 5、察看地址本。

【思考问题】

结合实验过程中的实验结果,回答下列问题:

1、在网络的分层体系结构中,MAC层的作用是什么?

2、帧在传送过程中每经过一个网络节点,MAC地址是否要发生变化?为什么?

【实验结论】

实验二 IP地址分类与数据包的组成

【实验目的】

理解IP层的作用以及IP地址的分类方式,掌握IP数据包的组成,理解子网掩码的作用 【实验学时】 4学时

【实验类型】 综合型

【实验要求】

1、学会根据IP地址的分类方式区分各类IP地址 2、掌握IP数据报的格式、长度以及各字段的功能

3、学会利用子网掩码确定IP地址的网络号、子网号和主机号 4、学会分析给定数据包的IP首部信息 5、学会手工计算IP校验和的方法

【实验原理】

计算机网络协议仿真实验

(1) IP地址的分类: A类 0 B类 10 C类 110 D类 1110 E类 11110

(2) 各类IP地址的范围

类型 A B C D E

(3) IP数据报格式:

范围 0.0.0.0 到 127.255.255.255 128.0.0.0 到 191.255.255.255 192.0.0.0 到 223.255.255.255 224.0.0.0 到 239.255.255.255 240.0.0.0 到 247.255.255.255 27位 保留 28位 多播组号 21位 网络号 8位 主机号 14位 网络号 16位 主机号 7位 网络号 24位 主机号 1 4位 版本号 16位标识 8位生存时间(TTL) 4位首部长度 TOS 16 17 8位服务类型 16位总长度(字节数) 32 3位标志 13位片偏移 8位协议标识 32位源IP地址 32位目的IP地址 16位首部校验和 客户

计算机网络协议仿真实验

IP选项 数据 图3-3-1 IP数据报格式及首部中的各字段

(4) 其他原理请参考教材: 第三章 IP网络协议及技术

【实验步骤】

练习一:运行ipconfig命令 1、启动网络协议仿真编辑器,选择“工具”菜单栏中的“IPCONFIG”项,观察ipcofig /all命令下运行的结果,获得本机的IP地址及子网掩码:

2、分析本主机属于哪一类IP地址,网络号和子网号分别是什么。

3、利用本机的IP地址及子网掩码,找到地址本中与本机属于同一子网的主机。

练习二:运行netstat命令

Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

1、在DOS命令行方式下运行:netstat –r 显示本机路由表。记录本机的缺省网关的IP地址。

2、在DOS环境下运行netstat–s,观察IP协议部分,查看本机已经接收和发送的IP报文个数。

练习三:运行Ping命令

A:在地址本中选择与本主机在同一子网中的另一主机的IP地址(假设为:X.X.X.X); 1、在DOS命令行方式下运行:ping X.X.X.X 2、在监控机端捕获数据,观察记录每一帧的MAC层的源、目的MAC地址和IP层的源、目的IP地址。

3、对照地址本中的记录,分析捕获数据的MAC地址与IP地址的对应关系。 B:这个实验要求不同网段的两个小组密切配合。在地址本中选择与本主机属于不同子网的另一主机的IP地址(假设为:Y.Y.Y.Y);

1、在不同网段的两台主机的DOS命令行方式下运行arp –d分别清除ARP高速缓存中的内容。然后运行ping 命令:ping Y.Y.Y.Y

2、在监控机端捕获数据,观察记录每一帧的MAC层的源、目的MAC地址和IP层的源、目的IP地址。

3、对照地址本中的记录,分析捕获数据的MAC地址与IP地址是否具有对应关系。 C:比较A、B两个实验的实验结果,分析二者有何不同,为什么?

练习四:编辑并发送IP数据包 1、打开协议仿真编辑器。

计算机网络协议仿真实验

2、填写该帧的“源MAC地址”和“目的MAC地址”字段;

注意:当目的主机与本机不在同一子网中时,目的MAC地址字段该如何填写,才能保证帧能够到达目的地?

3、填写该帧的以太网协议首部:“类型或长度”字段值为:0800(即IP协议的类型值)或者选择下拉菜单中的IP协议, 此时:

(a) 协议树上将显示上层协议类型为“IPV4”,点击左端的“+”将该层协议展开,会看到IP协议的各个字段;

(b) 点击协议树上的“IP”协议或者点击单帧编辑器右下方的“下一步”,在单帧编辑器中会出现IP层各个字段及其默认值; 4、写IP协议头信息: (a) 源IP地址;

注意:仿真机可以仿真本机发送的IP数据包,也可以仿真另一台机器发送IP数据包,所以,源IP地址字段可以填写本机IP地址,也可以填写其他机器的IP地址。

(b) 目的IP地址:从地址本中选择一主机的IP地址并填写; (c) 填写“版本号”(正常值:4);

(d) 首部长度(无可选项的情况下为5,即20个字节); (e) 服务类型;

(f) 总长度字段(该值为IP首部长度加上数据部分的长度); (g) 标识字段; (h) 标志字段; (i) 生存时间;

(j) 协议字段,即上层协议类型(6为TCP,17为UDP,1为ICMP);

(k) 首部检查和,当上述各字段值均填写完毕,可以通过两种方法计算首部检查和的值:

方法一:手工计算。

首先把“首部校验和”字段置为0;然后,对IP协议头中的每个16比特进行反码求和(整个首部看成是由若干个16比特的字组成),然后取反,结果即为该字段的值。

方法二:利用协议仿真编辑器计算,其步骤如下:

①首先把该字段置为0;

②在十六进制对照表中找到IP协议头对应的部分(通过点击IP协议的第一个字段和最后一个有效字段来确定范围),并把该部分选中;

③点击鼠标右键,选择弹出菜单中的“计算校验和”; ④将得到的值填入单帧编辑器中首部检查和字段。

5、要发送多个IP数据包,可重复上述步骤,并可在多帧编辑器中设置每一帧的发送次数和发送每帧的时间间隔;

6、工具栏或菜单栏中的“发送”,在弹出菜单上选择“发送”按钮,发送帧序列; 7、控机一端截获数据包并分析。

练习五:观查分析IP会话状况。

计算机网络协议仿真实验

1、在监控机端选择“会话状况”,察看其中的IP会话状况统计结果。 2、捕获大量IP数据包,分析其中的IP会话状况。 步骤为:

(a) 切换数据采集器上的按钮,将监控机连接到主控设备上。

(b) 以IP协议为过滤条件,显示捕获的IP数据包,分析其中的IP会话状况。 (c) 将捕获的IP数据包保存到文件:实验二.zdt。 【思考问题】

结合实验过程中的实验结果,回答下列问题

1、实验所用仿真机的IP地址是什么?子网掩码是什么?该机器属于哪类IP地址?网络号和子网号、主机名分别是什么?

2、分析地址本中所有的IP地址,说明实验环境中所有机器(除服务器外)的子网划分情况。

3、IP数据包在从源主机出发到达目的主机的过程中,IP首部中的IP源地址和目的地址字段是否发生变化?

4、打开浏览器IE,访问国外某站点,如在地址栏中写入:http://www.microsoft.com(美国的微软主页地址,IP地址为216.65.41.184),并回车。在监控机一端截获这一过程仿真机发送的数据包,然后进行分析:

(a) 所发送数据包的目的IP地址是否为216.65.41.184? (b) 如果不是,是什么?分析产生这种情况原因。

【实验结论】

实验三 IP地址转换协议:ARP

【实验目的】

1、理解IP地址与MAC地址的对应关系 2、掌握ARP协议的作用和格式 【实验学时】 4学时

【实验类型】 综合型

【实验要求】

1、理解IP地址与MAC地址的对应关系 2、掌握ARP协议的作用 3、掌握ARP协议的工作原理 【实验原理】

计算机网络协议仿真实验

1、ARP请求或应答的分组格式

硬件类型 硬件长度 协议长度 协议类型 操作 发送方IP地址(八位组0-1) 目标首部(八位组0-1) 发送方首部(八位组0-3) 发送方首部(八位组4-5) 发送方IP地址(八位组2-3) 目标首部(八位组2-5) 目标IP地址(八位组0-3)

字段说明:

硬件类型字段:表示硬件地址类型,例如:1表示以太网。

协议类型字段:表示要映射的协议类型,例如 0x0800表示IP地址,0x0806表示ARP请求或应答。

操作字段:共有四种操作类型,1表示ARP请求,2表示ARP应答,3表示RARP请求,4表示RARP应答

2、其他原理请参考教材:

第三章 IP网络协议及技术

【实验步骤】

注意:在没有强调在‘监控机’一端操作时,以下操作均是在仿真机上进行的

练习一:仿真发送ARP请求报文

1、在命令提示符下运行arp –d命令,清空ARP高速缓存 2、编辑并发送ARP请求帧

(1) 打开协议仿真编辑器。

(2) 填写该帧的“源MAC地址”和“目的MAC地址”字段;

(a) 源 MAC地址可以为本机的MAC地址,也可以仿真其他主机发送ARP请求报文,此时填写的MAC地址为另一台主机的MAC地址,MAC地址可根据主机名在地址本中获得;

(b) 目的MAC地址:这里要注意分析对于ARP请求来说,目的MAC地址应该是什么?

(3) 填写“类型或长度”字段值为:0806(即: ARP协议类型值)或者选择细下拉菜单中的“ARP”协议, 此时:

(a) 协议树上将显示上层协议类型为“APR”,点击左端的“+”将该层协议展开,会看到ARP协议的各个字段

(b) 单击协议树上的“ARP”协议或者点击单帧编辑器右下方的“下一步”,在单帧编辑器中会出现ARP层各个字段及其默认值

计算机网络协议仿真实验

(4) 填写ARP协议头信息:

(a) 硬件类型:(以太网地址) (b) 协议类型:(要映射的协议地址类型为IP地址类型) (c) 硬件地址长度: (d) 协议地址长度:

(e) 操作字段(APR请求为1,ARP应答为2,RARP请求为3,RARP应答为4) (f) 发送方MAC地址:

(g) 发送方IP地址:为所选择源主机的IP地址; (h) 目的MAC地址:

(i) 目的IP地址:为所选择源目的主机的IP地址。 (5) 点击工具栏或菜单栏中的“发送”,在弹出菜单上选择“发送”按钮,发送ARP帧;

(6) 在监控机一端捕获该报文及ARP响应报文并分析。

3、在命令提示符下运行arp –a命令,检查ARP高速缓存中的内容。

练习二:运行Ping命令(同一子网内两台机器间的ARP) 1、在命令提示符下运行arp –d命令,清空ARP高速缓存 2、在命令提示符下运行arp –a命令,检查ARP高速缓存

3、从地址本中选择与本机属于同一子网的一主机的IP地址(X.X.X.X)作为Ping命令的参数,然后在命令提示符下运行:

Ping X.X.X.X

在监控机一端捕获数据报文并分析:

(a) 其中是否有ARP请求及应答报文? (b) 分析各ARP报文:

源、目的mac地址都是什么? 源、目的IP地址都是什么? (c) 为什么产生这样的报文?

4、在命令提示符下运行arp –a命令,检查ARP高速缓存中的内容是否发生变化,分析原因。

练习三:运行Ping命令(经网关连接的不同子网上的两台机器间的ARP) 1、在命令提示符下运行arp –d命令,清空ARP高速缓存 2、在命令提示符下运行arp –a命令,检查ARP高速缓存

3、从地址本中选择与本机属于不同子网的一主机的IP地址(Y.Y.Y.Y), 然后在命令提示符下运行: Ping Y.Y.Y.Y

在监控机一端捕获数据报文并分析:

(a) 其中是否有ARP请求及应答报文? (b) 分析各ARP报文:

计算机网络协议仿真实验

源、目的以太网地址都是什么? 源、目的IP地址都是什么? (c) 为什么产生这样的报文?

4、在命令提示符下运行arp –a命令,检查ARP高速缓存中的内容是否发生变化,分析原因。

5、比较练习二和练习三两实验中得到的ARP报文,有何不同? 分析产生二者区别的原因是什么?

【思考问题】

结合实验过程中的实验结果,回答下列问题

1、观察实验过程中捕获网络上的多个ARP请求帧,观察这些帧的以太网目的地址是否相同,分析其原因。

2、观察实验过程中捕获网络上的多个ARP应答帧,观察这些帧的以太网目的地址是否相同,分析其原因。

【实验结论】

实验四 IP控制管理协议:ICMP

【实验目的】

1、了解ICMP的格式和响应方式及作用 2、了解常见的网络故障 【实验学时】 4学时

【实验类型】 综合型

【实验要求】

1、理解和掌握ICMP协议的基本作用 2、知道ICMP报文的格式

3、理解ICMP协议与IP协议的封装关系

4、学会根据各种响应信息进行出错分析的方法 5、学会使用ping命令 【实验原理】 请参考教材:

第三章 IP网络协议及技术 包括:

ICMP协议;报文格式;报文类型;时间戳请求和应答报文格式;不可达报文格式;ICMP

计算机网络协议仿真实验

回显请求和应答报文格式等

【实验步骤】

练习一:仿真发送各种ICMP报文

1、从地址本中选择一台主机,向该主机仿真发送ICMP回显请求报文。 (a) 打开协议仿真编辑器。

(b) 填写该帧的以太网协议首部:

①“源MAC地址”和“目的MAC地址”字段:注意:当选择的目的主机与本机不在同一子网的情况,目的MAC地址该怎样填写

②注意填写“类型或长度”字段值为:0800(即IP协议的类型值) (c) 填写IP协议头信息:

注意协议字段,即上层协议类型应为1(ICMP协议的类型为1),可手工填写也可选择下拉菜单中的“ICMP”协议; 2、填写ICMP协议头信息: (a) 类型字段值为:8; (b) 代码字段值为:0;

(c) 标识符:任选16位二进制数(如0x1234); (d) 序列号:任选16位二进制数(如0x5677); (e) 数据字段:任选;

(f) 校验和:首先把该字段置为0,接下来计算ICMP首部的校验和。ICMP协议校验和字段覆盖整个ICMP报文,包括数据部分。 3、击工具栏或菜单栏中的“发送”,在弹出菜单上选择“发送”按钮,发送ICMP报文; 4、在监控机一端截获相应的请求报文及应答报文并分析,注意当源MAC与源IP属于另一台主机的时候,响应报文的情况。

5、从地址本中选择一台主机,向该主机仿真发送ICMP时间戳请求报文。

(a) 步骤同上。注意对于ICMP时间戳请求报文,类型字段值为13,代码字段值为0。 (b) 在监控机一端截获相应的请求报文及应答报文并分析。 6、编辑IP数据包并主动引入一些错误:

(a) 向目标主机发送一个只有IP头的IP数据包;

(b) 向目标主机发送一个数据包,版本号字段填入7; (c) 向目标主机发送一个数据包,协议类型字段填入120; (d) 向目标主机发送一个数据包,填写不正确的IP报头长度; 向另一台主机发送上述数据包; 在监控机一端捕获响应报文并分析。

练习二:运行ping命令 选择菜单栏中的“工具”,运行下拉菜单中的ping命令

1、从地址本中选择与本机属于同一子网的一主机的主机名或IP地址,作为ping命令的参数;

计算机网络协议仿真实验

2、从地址本中选择与本机属于不同子网的一主机的主机名或IP地址,作为ping命令的参数;

对于上述两种情况,在仿真机和监控机端分别进行观察和分析: 在仿真机端观察:

(a) 是否收到响应包?

(b) 如果收到,观察响应包的个数,并对每个响应包的各信息字段进行分析。 (c) 比较两种次实验中TTL字段值是否相同,为什么? 监控机一端捕获数据并分析: (a) 是否捕获到响应包?

(b) 如果捕获到,观察并分析每个响应包的ICMP协议头部分。

(c) 比较两次实验中监控机一端捕获到的响应包的个数是否相同,为什么? 3、同时打开多个DOS命令提示符窗口,在每个窗口中运行一个ping程序 在监控机一端捕获数据,分析各程序如何识别属于自己的返回信息?

练习三:运行netstat命令

在Dos环境下运行netstat–s,观察ICMP协议部分,查看本机已经接收和发送的ICMP报文类型及报文个数。

练习四:运行tracert命令

在命令提示符下运行类似以下的命令: tracert oa.jlu.edu.cn tracert yahoo.com.cn 观察运行结果并分析。

【思考问题】

结合实验过程中的实验结果,回答下列问题:

1、根据练习一的实验结果说明:

实验室环境所使用操作系统默认的TTL最大值是多少?

2、运行ping 127.0.0.1,再运行ping 本机名(或本机IP地址)。在监控机端是否捕获到相应的ICMP回显请求报文?为什么?

【实验结论】

实验五 UDP数据报的传送

【实验目的】

计算机网络协议仿真实验

1、理解UDP协议的工作原理及工作过程 2、了解基本的端口分配 3、理解DNS的工作原理 【实验学时】 4学时

【实验类型】 综合型

【实验要求】

1、理解UDP协议的通信过程 2、学会手工计算UDP校验和 3、理解DNS的作用及原理

4、初步学会应用C语言与WinSock2进行网络程序设计 【实验原理】

请参考教材第三章 IP网络协议及技术。主要包括

UDP的封装,UDP首部格式,以及UDP校验和的计算方法。

尽管UDP校验和的基本计算方法与IP首部校验和的计算方法类似(16bit字的二进制反码和),但是它们之间存在不同的地方。

首先,UDP数据报长度可以为奇数字节,但是校验和的算法是把若干个16bit字相加。解决方法是必要时在最后增加填充字节0,这只是为了校验和的计算(也就是说,可能增加的填充字节不被传送)。

其次,UDP数据报和TCP段都包含一个12字节长的伪首部,它是为了计算校验和而设置的。伪首部包含IP首部一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地(例如,IP有没有接受地址不是本主机的数据报,以及IP有没有把应传给另一高层的数据报传送给UDP)。

UDP数据报中的伪首部格式如图:

0 15 16 32位源IP地址 32位目的IP地址 0 UDP伪16位UDP长度 16位目的端口号 16UDP检查和 UDP伪8位协议16位源端口号 16位UDP长度 数据 数据 填充字节计算机网络协议仿真实验

【实验步骤】

练习一:编辑并发送UDP数据包 1、打开协议仿真编辑器。

2、填写该帧的以太网协议首部:

(a) 源MAC地址”和“目的MAC地址”字段,注意:当选择的目的主机与本机不在同一子网的情况,目的MAC地址该怎样填写

(b) “类型或长度”字段值应为:0800(即IP协议的类型值) 3、填写IP协议头信息:

注意协议字段,即上层协议类型应为17(UDP协议的类型为17); 4、填写UDP协议信息: (a) 16位源端口号:自选 (b) 16位目的端口号:自选 (c) 数据字段:可有可无

(d) 16位UDP长度:UDP报头长度与UDP数据长度之和

(e) 校验和:覆盖UDP首部(含伪首部)和数据两部分。请先根据参考原理的内容进行手工计算,然后利用协议仿真编辑器来计算(方法二),比较二者的结果,检验手工计算结果的正确性。

方法一:手工计算。

按照参考原理(3)中介绍的内容,计算好UDP伪首部和首部中的各项值,然后按16bit进行反码求和(方法同计算IP校验和),将结果填入相应字段。

方法二:利用协议仿真编辑器来计算。步骤为:

①将UDP长度填写到16位UDP校验和字段中作为伪首部中UDP长度字段值; ②选中IP首部中的32位源IP地址和32位目的IP地址作为UDP伪首部中的32位源IP地址和32位目的IP地址;

③选中IP首部中8位的协议字段作为UDP伪首部中的8位的协议字段; ④在8位的协议字段之前选择一个8位的0作为UDP伪首部中的8位0; ⑤再选中UDP首部的及数据各字段; ⑥点击鼠标右键,选择“计算校验和”;

⑦将得到的校验和值填写到16位UDP校验和字段。

下面是一个计算UDP校验和的一个例子:

一个不含数据部分的UDP数据报的十六进制对照表如下: 00 01 02 03 04 05 06 07 08 09 0A 0B 08 00 45 00 00 4F 94 48 40 00 80 11 E4 9D C0 A8 00 20 C0 A8 00 52 00 00 00 00 00 08 00 08 其中黑体部分为用来计算校验和的UDP伪首部和UDP首部,其中: 00 11(十进制的17):为UDP伪首部中8位的0和8位的协议字段;

计算机网络协议仿真实验

C0 A8 00 20:为UDP伪首部中32位源IP地址; C0 A8 00 52:为UDP伪首部中32位目的IP地址; 00 00 00 00 00 08 00 08:为8字节的UDP首部;

由于缺少伪首部中16位UDP长度,故该值暂时存放在16位UDP校验和字段中,在本例中该值为00 08;

对上述选中部分计算校验和即可。

5、如果要发送多个UDP数据报,可重复上述步骤,并可在多帧编辑器中设置每一帧的发送次数和发送每帧的时间间隔;

6、点击工具栏或菜单栏中的“发送”,在弹出菜单上选择“发送”按钮,发送UDP报文; 7、在监控机一端截获相应的报文并分析。

练习二:编辑并发送UDP广播包 1、实验步骤同上; 注意:以太网协议首部中的目的MAC地址应怎样填写? IP首部中的目的IP地址该怎样填写? 2、在监控机一端截获相应的报文并分析。

练习三:运行netstat命令

点击编辑器菜单栏中“工具”项的IPCONFIG,在DOS命令行方式下运行:netstat –s 显示每个协议的使用状态,观察UDP协议的使用情况。

练习四:运行ipconfig命令

1、在DOS命令提示符下运行: ipcofig /displaydns 2、 观察运行结果。

练习五:运行Winsock网络程序

设计一个简单的Winsock网络程序,模拟UDP数据报,加深对DNS作用的理解。 按照以下步骤完成该练习:

1、启动Visual C++,进入集成开发环境;

2、建立一个“Win32 Consol Application”类型的工程,工程名自拟; 3、在该工程下,新建一个源程序文件,即选择“C++ Source File”,文件名自拟; 4、输入以下源程序(注释部分不必输入):

//////////////////////////////////////////////////////////////

//本程序的功能为: // //(1)获取本机名(gethostname()); // //(2)获得给定主机名的IP地址(gethostbyname()) // //(3)获得给定IP地址的主机名(gethostbyaddr()). //

计算机网络协议仿真实验

////////////////////////////////////////////////////////////// /*头文件*/

#include #include #include

int main() {

/*初始化 windows sockets API*/

WORD wVersionRequested = MAKEWORD(1, 1); WSADATA wsaData;

if (WSAStartup(wVersionRequested, &wsaData)) { printf(\"WSAStartup failed %s\\n\ return -1; }

/* 获得本主机名*/

char hostname[256];

int res = gethostname(hostname, sizeof(hostname));

/*错误处理*/ if (res != 0) { printf(\"Error: %u\\n\ return -1; }

/*打印本主机名字*/

printf(\"本主机名为:%s\\n\

/*输入一个主机的域名,可以为本机也可以为其他主机*/ printf(\"请输入一个主机域名:\"); scanf(\"%s\

/* 利用主机名获得主机的地址信息 */

hostent* pHostent = gethostbyname(hostname);

/*错误处理*/ if (pHostent==NULL) { printf(\"Error: %u\\n\ return -1; }

计算机网络协议仿真实验

/* 解析返回的主机地址信息:别名、地址类型、地址长度,并打印*/ hostent& he = *pHostent;

printf(\"name=%s\\naliases=%s\\naddrtype=%d\\nlength=%d\\n\ he.h_name, he.h_aliases, he.h_addrtype, he.h_length);

/*打印主机每一个网卡的IP地址*/

sockaddr_in sa;

for (int nAdapter=0; he.h_addr_list[nAdapter]; nAdapter++) { memcpy ( &sa.sin_addr.s_addr, he.h_addr_list[nAdapter],he.h_length); }

/* 输出机器的 IP地址并以字符 串的形式显示出来.*/

printf(\"Address: %s\\n\

printf(\"\\n\");

/*输入一个服务器的IP地址*/ unsigned long addr; char hostaddr[50];

printf(\"请输入服务器IP地址:\"); scanf(\"%s\/*将IP地址转化为网络字节序*/ addr=inet_addr(hostaddr);

/*利用IP地址获得主机名*/

pHostent=gethostbyaddr((char *)&addr,4,AF_INET); /*错误处理*/

if (pHostent==NULL) { printf(\"Error: %u\\n\ return -1; }

hostent& he1 = *pHostent;

/*打印返回的地址信息,注意主机名字信息*/

printf(\"主机名为:%s\\naliases=%s\\naddrtype=%d\\nlength=%d\\n\

计算机网络协议仿真实验

}

he.h_name, he.h_aliases, he.h_addrtype, he.h_length);

/* 结束 windows sockets API*/ WSACleanup(); return 0;

1、使用Winsock函数的程序必须与 WS2_32.LIB进行链接,而Visual C++集成开发环境的缺省链接库中没有此项,因此要把ws2_32.lib加入到链接库的列表里面。

具体步骤是:

a.选择“工程”菜单下的“设置”项。 b.在弹出页面中选择“Link”一项。

c.将“ws2_32.lib”加入“L对象/库模块”列表当中。 2、编译、连接并运行程序。

3、观察程序运行的结果,体会程序中几个主要函数的作用。

练习六:反复运行上述程序,可以输入以下域名:

www.jlu.edu.cn www.yahoo.com.cn ……

在监控机端捕获数据并分析说明:

1、名字解析器使用传输层的哪一协议来处理查询请求? 2、本地名字服务员的IP地址是什么? 3、名字服务员进程的端口号是什么?

4、随便输入一个不带后缀的主机名(如:aaa),观察捕获到的数据。

【思考问题】

1、在监控机一端截获网络中的多个广播报文,观察其源MAC地址及源IP地址,是否都来自同一子网?为什么?

2、分析DNS的工作原理。

3、域名与IP地址之间是否有一一对应的关系?

【实验结论】

计算机网络协议仿真实验

实验六 TCP数据通信

【实验目的】

1、掌握TCP协议的工作原理

2、理解TCP协议通信的原理及通信过程 【实验学时】 4学时

【实验类型】 综合型

【实验要求】

1、理解TCP首部中各字段的含义及作用 2、理解三次握手的过程

3、能够分析TCP协议的建立连接、会话和断开连接的全过程 4、学会计算TCP校验和的方法 【实验原理】

请参考教材第四章 TCP和UDP协议,包括TCP的封装,首部格式等

【实验步骤】

练习一:运行netstat命令。

1、在DOS命令行方式下运行:netstat –s 显示每个协议的使用状态,观察TCP协议的使用情况。

2、在DOS命令行方式下运行:netstat –a显示所有主机的端口号,观察与TCP协议相关的内容。

练习二:运行TELNET。

1、实验环境中的主控设备上的TELNET服务已经启动,并且提供一个公共帐号,其用户名:guest;口令:guest。

在DOS命令提示符下运行:

(a) telnet 服务器主机域名;

(b) 在“Login:”提示符后输入用户名(guest),然后在“Password:”提示符后输入口令(guest);

(c) 在虚拟终端上进行一些简单的操作(可不作); (d) 按“CTRL+]”回到telnet提示符下; (e) 输入“quit”退出telnet。

2、在监控机一端捕获数据,对该过程中仿真机发送和接收的全部TCP数据包:

(a) 记录每个TCP数据包的TCP协议头部分,关注其中以下字段的值:

源、目的端口号;(telnet服务的端口号是多少?) 序号和确认序号;

计算机网络协议仿真实验

首部长度;

ACK、SYN和FIN等标志位; 窗口大小。

(b) 根据各字段的值分析TCP协议的建立连接、会话和断开连接的全过程。 (c) 根据捕获数据,计算在该TCP会话过程中本地以太网上用户有效数据的实际吞吐量是多少?

练习三:编辑并发送TCP数据包。 说明:

(1) 在本实验中由于TCP连接有超时时间的限制,故仿真机端和监控机端的两位同学要默契配合,某些步骤(如计算TCP校验和)要求熟练、迅速。

(2) 为了实现TCP三次握手过程的仿真,发送第一个连接请求帧之前,查看ARP高速缓存中是否有要与之通信的主机信息,如果没有,请运行ping命令,来获取信息。然后在“本地连接”属性处,取消仿真机端的TCP/IP 协议。

1、要求帧序列中包括TCP连接建立、数据传输以及断开连接的全过程。在编辑的过程中注意体会TCP首部中的序列号和标志位的作用。

2、编辑TCP数据包。首先选择主控设备上的一个进程作服务器进程,并向该服务器进程发送一个建立连接请求报文,其步骤如下:

(a) 打开协议仿真编辑器。

(b) 填写该帧的以太网协议首部:

①“源MAC地址”和“目的MAC地址”字段.

注意如选择的目的主机与本机不在同一子网时,目的MAC地址该怎样填写; ②“类型或长度”字段值应为:0800,或选择下拉菜单中的IP协议; ③本实验要求源MAC地址为本机MAC地址。 (c) 填写IP协议头信息,注意:

①协议字段,即上层协议类型应为TCP,协议类型值为6; ②总长度字段的值的填写;

③本实验要求源IP地址为本机IP地址。 (d) 填写TCP协议信息:

①16位源端口号:自定

②16位目的端口号:如80(HTTP协议)、110(SMTP协议)等。 ③32位序号:自己选择一个ISN(并记录下来,以备后面使用),并填写。 ④32位确认序号:无意义。

⑤首部长度:5(当无可选项时)。 ⑥标志位:SYN必为1,其他为0。 ⑦窗口大小:自定。 ⑧紧急指针: ⑨选项

计算机网络协议仿真实验

(e) 校验和:覆盖TCP首部(包含伪首部)和TCP数据两部分,计算方法同UDP协议首部中的校验和计算方法。

以下是利用协议仿真编辑器计算校验和的一个例子:

一个不含数据部分的TCP数据包的十六进制对照表如下: 00 01 02 03 04 05 06 07 08 09 0A 0B 08 00 45 00 00 4F 94 48 40 00 80 06 E4 9D C0 A8 00 20 C0 A8 00 52 00 15 00 14 73 C9 91 BD 94 64 0F E7 00 14 44 6C 72 7A 00 00 其中黑体部分为用来计算校验和的TCP伪首部和TCP首部,其中: 00 06:为TCP伪首部中8位的0和8位的协议字段; C0 A8 00 20:为TCP伪首部中32位源IP地址; C0 A8 00 52:为TCP伪首部中32位目的IP地址; 最后面的20字节为TCP首部; 伪首部中16位TCP首部长度,暂时存放在16位TCP校验和字段中,在本例中该值为00 14(相应字段填写的是十进制数值:20);

对上述选中部分计算校验和并填回TCP校验和字段中。

3、在发送该TCP连接请求帧之前,先运行一次:ping 主控设备。 4、暂停仿真机端的TCP/IP协议。 5、点击工具栏或菜单栏中的“发送”,在弹出菜单上选择“发送”按钮,发送TCP报文; 6、在监控机一端截获相应的应答报文并分析。

7、要求监控机一端的同学及时准确地捕获应答报文并迅速从中获得应答报文的32位ISN,并告之仿真机一端的同学;根据应答报文提供的序号,对服务器的报文进行确认,以完成TCP连接的建立。

编辑该帧的步骤与上面基本相同,但要注意:

(a) 注意:仿真机一端的同学在完成上一步请求报文的发送后,应立即开始本步骤中除了32位应答序号及校验和以外的字段的填写; (b) 32位的序号应为上述自选的ISN加1(为什么?);

(c) 32位的确认序号应为应答报文中服务器端的ISN加1; (d) 标志位中:ACK标志应置为1,其他标志应为0。 (e) 注意在该步骤中计算校验和要熟练、迅速; 8、点击工具栏或菜单栏中的“发送”,在弹出菜单上选择“发送”按钮,发送TCP应答报文,以完成TCP连接的建立;

9、发送数据报文:发送数据内容根据具体的上层协议确定。 10、断开TCP连接

(a) 编辑该帧的步骤与上面基本相同,但要注意在标志位中:FIN标志应置为1,其他标志应为0。

(b) 点击工具栏或菜单栏中的“发送”,在弹出菜单上选择“发送”按钮,发送TCP释放连接请求报文。

(c) 在监控机一端截获相应的请求及应答报文并分析。

计算机网络协议仿真实验

注意:实验结束后启动仿真机端的TCP/IP协议。

练习四:多TELNET客户端同时运行。

1、在仿真机端同时打开两个或更多DOS命令提示符窗口,在这些窗口上同时运行: telnet 服务器IP地址

2、在监控机一端捕获数据,分析仿真机发送和接收的TCP数据包。说明哪些包是属于同一TCP连接上的,你是根据什么进行区分的?

练习五:察看TCP、UDP会话状况。 1、在监控机端选择“会话状况”,察看其中的TCP、UDP会话状况统计结果。 2、捕获大量数据包,分析其中有多少TCP会话。

(a) 切换TAP上的按钮,将监控机连接到交换机镜像口的HUB上。

(b) 启动监控机端本地连接上的TCP/IP协议,即可捕获流经局域网上的所有帧。 (c) 以UDP协议为过滤条件,显示捕获的UDP数据包,分析其中有多少UDP会话。 (d) 以TCP协议为过滤条件,显示捕获的TCP数据包,分析

其中有多少TCP会话?

在捕获期间,存在多少TCP连接? 有多少TCP连接失败?

有多少TCP连接正常中断?

在结束捕共获时,有多少TCP连接是活跃的? (e) 将捕获的TCP数据包保存到文件:实验六.zdt。 (f) 观察协议统计信息。

点击网络协议分析仪的“协议统计”功能,察看各协议的统计信息,在IP协议的统计信息中,TCP、UDP协议所占的百分比如何?

【思考问题】

结合实验过程中的实验结果,回答下列问题

1、如果在实验三发送建立连接请求帧之前,仿真机端不运行“PING 服务器” 命令,而又停止了仿真机端的TCP/IP协议,可能出现什么情况?通过实验来验证你的答案。

2、根据练习四说明:在仿真机端,系统是如何把接收到的数据显示到相应的窗口的。 3、分析TCP协议所使用的滑动窗口协议机制。

【实验结论】

实验七 SOCKET网络程序设计

【实验目的】

1、理解进程通信的原理及通信过程

计算机网络协议仿真实验

2、掌握基本的网络编程方法 【实验学时】 4学时

【实验类型】 综合型

【实验要求】

1、进一步掌握UDP及TCP协议的工作原理 2、掌握SOCKET编程的基本方法

3、学习应用C语言与WinSock2进行简单的无连接的网络程序设计,实现网络数据传输 4、学习应用C语言与WinSock2进行简单的面向连接的网络程序设计,实现网络数据传输

【实验原理】

1、关于使用套接字编程的一些基本概念 (a) 半相关与全相关 半相关

在网络中,用一个三元组可以在全局唯一标志一个进程: (协议,本地地址,本地端口号)

这样一个三元组,叫做一个半相关(half-association),它指定连接的每半部分。 全相关

一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也就是说,不可能通信的一端用TCP协议,而另一端用UDP协议。因此一个完整的网间通信需要一个五元组来标识:

(协议,本地地址,本地端口号,远地地址,远地端口号) 这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。

(b) TCP/IP协议的地址结构为: struct sockaddr_in{ short sin_family; /*AF_INET*/

}

u_short sin_port; /*16位端口号,网络字节顺序*/ struct in_addr sin_addr; /*32位IP地址,网络字节顺序*/ char sin_zero[8]; /*保留*/

(c) 套接字类型

TCP/IP的socket提供下列三种类型套接字。 流式套接字(SOCK_STREAM)

提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。文件传送协议(FTP)即使用流式套接字。

数据报式套接字(SOCK_DGRAM)

计算机网络协议仿真实验

提供了一个无连接服务。数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。网络文件系统(NFS)使用数据报式套接字。

原始式套接字(SOCK_RAW)

该接口允许对较低层协议,如IP、ICMP直接访问。常用于检验新的协议实现或访问现有服务中配置的新设备。

(d) 基本套接字系统调用

为了更好地说明套接字编程原理,下面给出几个基本套接字系统调用说明。 (1) 创建套接字──socket()

应用程序在使用套接字前,首先必须拥有一个套接字,系统调用socket()向应用程序提供创建套接字的手段,其调用格式如下:

SOCKET socket(int af, int type, int protocol);

该调用要接收三个参数:af、type、protocol。参数af指定通信发生的区域,UNIX系统支持的地址族有:AF_UNIX、AF_INET、AF_NS等,而DOS、WINDOWS中仅支持AF_INET,它是网际网区域。因此,地址族与协议族相同。参数type 描述要建立的套接字的类型。参数protocol说明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为0,使用默认的连接模式。根据这三个参数建立一个套接字,并将相应的资源分配给它,同时返回一个整型套接字号。因此,socket()系统调用实际上指定了相关五元组中的“协议”这一元

(2) 指定本地地址──bind()

当一个套接字用socket()创建后,存在一个名字空间(地址族),但它没有被命名。bind()将套接字地址(包括本地主机地址和本地端口地址)与所创建的套接字号联系起来,即将名字赋予套接字,以指定本地半相关。其调用格式如下:

int bind(SOCKET s, const struct sockaddr FAR * name, int namelen);

参数s是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。参数name 是赋给套接字s的本地地址(名字),其长度可变,结构随通信域的不同而不同。namelen表明了name的长度。

如果没有错误发生,bind()返回0。否则返回值SOCKET_ERROR。

地址在建立套接字通信过程中起着重要作用,作为一个网络应用程序设计者对套接字地址结构必须有明确认识。

(3) 建立套接字连接──connect()与accept()

这两个系统调用用于完成一个完整相关的建立,其中connect()用于建立连接。无连接的套接字进程也可以调用connect(),但这时在进程之间没有实际的报文交换,调用将从本地操作系统直接返回。这样做的优点是程序员不必为每一数据指定目的地址,而且如果收到的一个数据报,其目的端口未与任何套接字建立“连接”,便能判断该端口不可操作。而accept()用于使服务器等待来自某客户进程的实际连接。

connect()的调用格式如下:

int connect(SOCKET s, const struct sockaddr FAR * name, int namelen); 参数s是欲建立连接的本地套接字描述符。参数name指出说明对方套接字地址结构的指针。对方套接字地址长度由namelen说明。

如果没有错误发生,connect()返回0。否则返回值SOCKET_ERROR。在面向连接的协议

计算机网络协议仿真实验

中,该调用导致本地系统和外部系统之间连接实际建立。

由于地址族总被包含在套接字地址结构的前两个字节中,并通过socket()调用与某个协议族相关。因此bind()和connect()无须协议作为参数。

accept()的调用格式如下:

SOCKET accept(SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen); 参数s为本地套接字描述符,在用做accept()调用的参数前应该先调用过listen()。addr 指向客户方套接字地址结构的指针,用来接收连接实体的地址。addr的确切格式由套接字创建时建立的地址族决定。addrlen 为客户方套接字地址的长度(字节数)。如果没有错误发生,accept()返回一个SOCKET类型的值,表示接收到的套接字的描述符。否则返回值INVALID_SOCKET。

accept()用于面向连接服务器。参数addr和addrlen存放客户方的地址信息。调用前,参数addr 指向一个初始值为空的地址结构,而addrlen 的初始值为0;调用accept()后,服务器等待从编号为s的套接字上接受客户连接请求,而连接请求是由客户方的connect()调用发出的。当有连接请求到达时,accept()调用将请求连接队列上的第一个客户方套接字地址及长度放入addr 和addrlen,并创建一个与s有相同特性的新套接字号。新的套接字可用于处理服务器并发请求。

四个套接字系统调用,socket()、bind()、connect()、accept(),可以完成一个完全五元相关的建立。socket()指定五元组中的协议元,它的用法与是否为客户或服务器、是否面向连接无关。bind()指定五元组中的本地二元,即本地主机地址和端口号,其用法与是否面向连接有关:在服务器方,无论是否面向连接,均要调用bind();在客户方,若采用面向连接,则可以不调用bind(),而通过connect()自动完成。若采用无连接,客户方必须使用bind()以获得一个唯一的地址。

以上讨论仅对客户/服务器模式而言,实际上套接字的使用是非常灵活的,唯一需遵循的原则是进程通信之前,必须建立完整的相关。

(4) 监听连接──listen()

此调用用于面向连接服务器,表明它愿意接收连接。listen()需在accept()之前调用,其调用格式如下:

int listen(SOCKET s, int backlog);

参数s标识一个本地已建立、尚未连接的套接字号,服务器愿意从它上面接收请求。backlog表示请求连接队列的最大长度,用于限制排队请求的个数,目前允许的最大值为5。如果没有错误发生,listen()返回0。否则它返回SOCKET_ERROR。

listen()在执行调用过程中可为没有调用过bind()的套接字s完成所必须的连接,并建立长度为backlog的请求连接队列。

调用listen()是服务器接收一个连接请求的四个步骤中的第三步。它在调用socket()分配一个流套接字,且调用bind()给s赋于一个名字之后调用,而且一定要在accept()之前调用。

(5) 数据传输──send()与recv()

当一个连接建立以后,就可以传输数据了。常用的系统调用有send()和recv()。

send()调用用于在参数s指定的已连接的数据报或流套接字上发送输出数据,格式如下: int send(SOCKET s, const char FAR *buf, int len, int flags);

计算机网络协议仿真实验

参数s为已连接的本地套接字描述符。buf 指向存有发送数据的缓冲区的指针,其长度由len 指定。flags 指定传输控制方式,如是否发送带外数据等。如果没有错误发生,send()返回总共发送的字节数。否则它返回SOCKET_ERROR。

recv()调用用于在参数s指定的已连接的数据报或流套接字上接收输入数据,格式如下: int recv(SOCKET s, char FAR *buf, int len, int flags); 参数s 为已连接的套接字描述符。buf指向接收输入数据缓冲区的指针,其长度由len 指定。flags 指定传输控制方式,如是否接收带外数据等。如果没有错误发生,recv()返回总共接收的字节数。如果连接被关闭,返回0。否则它返回SOCKET_ERROR。

(6) 输入/输出多路复用──select()

select()调用用来检测一个或多个套接字的状态。对每一个套接字来说,这个调用可以请求读、写或错误状态方面的信息。请求给定状态的套接字集合由一个fd_set结构指示。在返回时,此结构被更新,以反映那些满足特定条件的套接字的子集,同时, select()调用返回满足条件的套接字的数目,其调用格式如下:

int select(int nfds, fd_set FAR * readfds, fd_set FAR * writefds, fd_set FAR * exceptfds, const struct timeval FAR * timeout);

参数nfds指明被检查的套接字描述符的值域,此变量一般被忽略。

参数readfds指向要做读检测的套接字描述符集合的指针,调用者希望从中读取数据。参数writefds 指向要做写检测的套接字描述符集合的指针。exceptfds指向要检测是否出错的套接字描述符集合的指针。timeout指向select()函数等待的最大时间,如果设为NULL则为阻塞操作。select()返回包含在fd_set结构中已准备好的套接字描述符的总数目,或者是发生错误则返回SOCKET_ERROR。

(7) 关闭套接字──closesocket()

closesocket()关闭套接字s,并释放分配给该套接字的资源;如果s涉及一个打开的TCP连接,则该连接被释放。closesocket()的调用格式如下:

BOOL closesocket(SOCKET s);

参数s待关闭的套接字描述符。如果没有错误发生,closesocket()返回0。否则返回值SOCKET_ERROR。

2、用于无连接协议(如UDP)的SOCKET系统调用流程框图:

计算机网络协议仿真实验

服务员 Socket() 客户 Socket() Bind() recvfrom() bind() 等待来自客户的数据 数据(请数据处理 sendto() 数据(回sendto() recvfrom() 3、面向连接协议(如TCP)的SOCKET系统调用流程框图:

计算机网络协议仿真实验

Socket() 服务员 Bind() Listen() 客户 Socket() accept() 等待来自客户的连接请求 建立连接 connect() 数据(请求) recv() send() 数据处理 数据(回答) send() recv()

4、其他原理请参考教材: 第四章 TCP和UDP协议

【实验步骤】

练习一:使用UDP协议的无连接客户-服务员程序设计。

根据实验原理中介绍的内容,设计一个无连接的客户-服务员系统,实现二者之间的数据传递。下面是一个简单的UDP客户-服务员程序的实例,作为参考。

说明:下述服务员程序保存在服务器端,可以直接从服务器拷贝,并稍作修改(如服务员IP地址)后在本地进行编译连接并运行。

数据采集器的红色按钮要求按出来,使监控机捕获到局域网的数据。 #include #include

#define SERV_UDP_PORT 6000 /*服务员进程端口号,视具体情况而定*/

计算机网络协议仿真实验

#define SERV_HOST_ADDR \"10.60.46.58\" /*服务员地址,视具体情况而定*/ /* 宏定义用来打印错误消息*/ #define PRINTERROR(s) \\

fprintf(stderr,\"\\n%: %d\\n\

//////////////////////////////////////////////////////////// //数据报通信的服务员端子程序 //

////////////////////////////////////////////////////////////

void DatagramServer(short nPort) {

SOCKET theSocket;

/*创建一个数据报类型的socket*/

theSocket = socket(AF_INET, // 地址族 SOCK_DGRAM, // socket类型 IPPROTO_UDP);// 协议类型:UDP

/*错误处理*/

if (theSocket == INVALID_SOCKET) {

PRINTERROR(\"socket()\"); return; }

/*填写服务员地址结构*/

SOCKADDR_IN saServer;

saServer.sin_family = AF_INET;

saServer.sin_addr.s_addr = INADDR_ANY; // 由WinSock指定地址 saServer.sin_port = htons(nPort); // 服务员进程端口号 /* 将服务员地址与已创建的socket绑定*/

int nRet;

nRet = bind(theSocket,

// Socket 描述符

计算机网络协议仿真实验

(LPSOCKADDR)&saServer, // 服务员地址 sizeof(struct sockaddr) //地址长度 );

/*错误处理*/

if (nRet == SOCKET_ERROR) {

PRINTERROR(\"bind()\"); closesocket(theSocket); return; }

/* 等待来自客户端的数据*/

SOCKADDR_IN saClient; char szBuf[1024]; int nLen;

while(1) {

/*准备接收数据*/

memset(szBuf, 0, sizeof(szBuf)); nRet = recvfrom(theSocket, szBuf, sizeof(szBuf), 0,

// 已绑定的socket // 接收缓冲区 // 缓冲区大小 // Flags

(LPSOCKADDR)&saClient, // 接收客户端地址的缓冲区 &nLen); // 地址缓冲区的长度

/*打印接收到的信息*/

printf(\"\\nData received: %s\

/* 发送数据给客户端*/

strcpy(szBuf, \"From the Server\");

sendto(theSocket,

// 已绑定的socket

计算机网络协议仿真实验

szBuf, strlen(szBuf), 0, // 发送缓冲区

// 发送数据的长度 // Flags

(LPSOCKADDR)&saClient, // 目的地址 nLen); // 地址长度 }

closesocket(theSocket);

return; }

//////////////////////////////////////////////////////////// //数据报服务员端主程序 //

////////////////////////////////////////////////////////////

void main() {

WORD wVersionRequested = MAKEWORD(1,1); WSADATA wsaData; int nRet; short nPort;

nPort = SERV_UDP_PORT;

/* 初始化Winsock*/

nRet = WSAStartup(wVersionRequested, &wsaData); if (wsaData.wVersion != wVersionRequested) {

fprintf(stderr,\"\\n Wrong version\\n\"); return; }

/*调用数据服务员子程序*/ DatagramServer(nPort);

/*结束WinSock*/

计算机网络协议仿真实验

WSACleanup(); }

请学生认真阅读分析上述服务员程序,然后根据实验原理二中介绍的内容,自行编写相应的无连接的客户端程序并运行。从而实现客户和服务器间的数据传输。 。

在仿真机一端运行客户端进程,在监控机端捕获数据并进行分析。

练习二:使用TCP协议的面向连接的客户-服务员程序设计。

根据实验原理中介绍的内容,设计一个面向连接的客户-服务员系统,实现二者之间的数据传递。

下面是一个简单的TCP客户-服务员程序的服务员程序: 面向连接的服务员程序:

#include #include #include #include #include #include #include #include

#define SERV_TCP_PORT 6000 /*服务员进程端口号,视具体情况而定*/ #define SERV_HOST_ADDR \"10.60.46.40\" /*服务员IP,视具体情况而定*/ int sockfd;

/////////////////////////////////////////////////////////////// //线程用来处理客户端的请求 // //服务员主进程每与某客户端建立一个连接之后,便启动一个新的线程来处理接下// //客户端的请求,参数为服务员与该客户端的连接点:socket // //////////////////////////////////////////////////////////////

DWORD ClientThread(void *pVoid) {

int nRet;

char szBuf[1024];

memset(szBuf, 0, sizeof(szBuf));

计算机网络协议仿真实验

/*接收来自客户端的数据信息*/

nRet = recv((SOCKET )pVoid, szBuf, sizeof(szBuf), 0);

//与客户端连接的socket // 接收缓冲区 // 缓冲区长度 // Flags

/*错误处理*/

if (nRet == INVALID_SOCKET) {

printf(\"recv()\"); closesocket(sockfd);

closesocket((SOCKET)pVoid); return 0; }

/*显示接收到的数据*/

printf(\"\\nData received: %s\\n\

/* 发送数据给客户端*/

strcpy(szBuf, \"From the Server\"); //发送内容 nRet = send((SOCKET)pVoid, //与客户端连接的socket szBuf, // 数据缓冲区 strlen(szBuf), // 数据长度 0); // Flags

/*结束连接,释放socket*/

closesocket((SOCKET)pVoid);

return 0; }

////////////////////////////////////////////////////////////// //服务员主程序: // //在一个众所周知的端口上等待客户的连接请求 // //有请求到来时建立与客户端的连接,并启动一个线程处理该请求 //

//////////////////////////////////////////////////////////////

int main()

计算机网络协议仿真实验

{

int clilen; int pHandle=-1;

struct sockaddr_in serv_addr; SOCKET socketClient; DWORD ThreadAddr; HANDLE dwClientThread; SOCKADDR_IN SockAddr;

/*初始化Winsock API,即连接Winsock库*/

WORD wVersionRequested = MAKEWORD(1, 1); WSADATA wsaData;

if (WSAStartup(wVersionRequested, &wsaData)) {

printf(\"WSAStartup failed %s\\n\ return -1; }

/*打开一个TCP SOCKET */

if((sockfd=socket(AF_INET, SOCK_STREAM,0))<0) printf(\"server:can't open stream socker\\n\");

/*绑定本地地址,以便客户端连接*/

memset((char *)&serv_addr,0,sizeof(struct sockaddr_in)); serv_addr.sin_family=AF_INET;

serv_addr.sin_addr.s_addr=htonl(INADDR_ANY); serv_addr.sin_port=htons(SERV_TCP_PORT);

if (bind(sockfd,(struct sockaddr *)(& serv_addr), sizeof (serv_addr) )<0)

printf(\"server: can't bind local address\");

/*设置服务员的最大连接数为15*/ listen(sockfd,5);

/*循环等待来自客户端的连接请求*/ while(1) {

/*阻塞等待一个请求的到来*/

计算机网络协议仿真实验

clilen = sizeof(SOCKADDR_IN); socketClient = accept(sockfd,

(LPSOCKADDR)&SockAddr, &clilen);

/*出错处理*/

if (socketClient == INVALID_SOCKET) {

printf(\"accept failed!\\n\"); break; }

/* 打印已建立的连接信息*/

printf(\"Connection accepted on socket:%d from:%s\\n\ socketClient,

inet_ntoa(SockAddr.sin_addr));

/*启动一个新线程处理该请求*/

dwClientThread =CreateThread(NULL, 0,

(LPTHREAD_START_ROUTINE)&ClientThread, (void *)socketClient, 0,

&ThreadAddr);

/*错误处理*/

if(!dwClientThread)

printf(\"Cannot start client thread...\");

/*线程建立以后,主程序里不再使用线程handle,将其关闭,但线程继续运行*/ CloseHandle((HANDLE)dwClientThread); }

/*结束 windows sockets API*/ WSACleanup(); return 0; }

上述服务员程序已经在服务器端运行,请学生认真阅读,然后根据实验原理二中介绍的内容,设计面向连接的客户端程序,实现客户与服务员间的数据传输。

计算机网络协议仿真实验

在仿真机一端运行客户端进程,在监控机端捕获数据并分析。

练习三:使用TCP协议进行复杂的客户-服务员程序设计。

上述的例子程序比较简单,有一些进程中往往同时存在几条连接,这样的进程在有报文到来时,可以在它处理的任何socket上执行recv调用,但它不知道哪个socket上已有报文,哪个上没有,可以使用select()系统调用来解决这样的问题。有兴趣的同学可自行编写这样较复杂的客户-服务员程序。

【思考问题】

结合实验过程中的实验结果,回答下列问题

1、根据编程练习实验中记录的客户和服务器程序的端口号并结合程序,说明:

在客户/服务器模型当中,客户进程的端口号和服务器进程的端口号都是由程序给出说明的吗?为什么?

2、在TCP/IP网络中,当客户与服务员进程建立了一条TCP连接以后,是否属于该连接的所有包都是经过同一路径(即一条虚电路)传递的?为什么?

【实验结论】

实验八SNMP协议与网络管理

【实验目的】

1、理解SNMP协议的工作原理 2、理解SNMP协议的作用 【实验学时】 4学时

【实验类型】 综合型

【实验要求】

1、理解SNMP协议的作用 2、熟悉SNMP协议的格式 3、了解SNMP与UDP的关系

4、了解MIB以及基本的MIB变量 5、了解ASN.1的编码标准 【实验原理】

(1)SNMP的报文格式:

计算机网络协议仿真实验

字段说明: 共同体:

共同体字段是一个字符串。这是管理进程和代理进程之间的口令,是明文格式。默认值是public。

PUD类型(五种): PUD类型 0 1 2 3 4 名 称 get-request get-next-request get-response set-request trap 描 述 从代理进程提取一个或多个参数值 从代理进程提取一个或多个参数的小一个参数值 返回的一个或多个参数值。(由代理进程发出,是前三个操作的相应操作) 设置代理进程的一个或多个参数值 代理进程主动发出的报文,通知管理进程有某些事情发生

请求标识:

请求标识由管理进程设置,由代理进程在get-response中返回。客户进程(管理进程)通过它来确定服务器(代理)进程发出的响应与客户进程发出的查询是否匹配。

差错状态(六种): 差错状态 0 1 2 3 4 5

名 称 noError tooBig noSuchName badValue readOnly genErr 描 述 没有错误 代理进程无法把响应放在一个SNAP消息中发送 操作不存在的变量 set操作的值或语义有错误 管理进程试图修改一个只读变量 其他错误 计算机网络协议仿真实验

差错索引:

是一个整数偏移量,指明当有差错发生时,差错发生在哪一个参数。它是由代理进程标注的,只有在发生noSuchName、badValue、readOnly差错时才标注。

trap类型(七种): trap类型 0 1 2 3 4 5 6 名 称 coldStart warmStart linkDown linkUp 描 述 代理进程对自己初始化 代理进程对自己重新初始化 一个接口已经从工作状态改变为故障状态,报文中的第一个变量标识此接口 一个接口已经从故障状态改变为工作状态,报文中的第一个变量标识此接口 一个EGP邻站已改变为故障状态。报文中的第一个变量包含此邻站的IP地址 在这个特定的代码字段中查找trap信息 authenticationFailure 从SNMP管理进程收到无效共同体的报文 egpNeighborLoss enterpriseSpecific

(2)其他原理请参考教材: 第五章 应用协议

【实验步骤】

1、仿真机端

主控设备端的SNMP服务已经启动,本实验选择服务器端的SNMP进程作为服务进程即SNMP代理进程,并进行访问。

练习一:编辑并发送SNMP数据包

由于SNMP服务是建立在UDP协议之上的,SNMP数据封装在UDP数据包内,故对SNMP数据的编辑即是对UDP数据字段内容的编辑。

1、打开协议仿真编辑器。

2、填写该帧的以太网协议首部:

(a) 源MAC地址”和“目的MAC地址”字段

(b) “类型或长度”字段值应为:0800(即IP协议的类型值) 3、填写IP协议头信息:

注意协议字段,选择上层协议类型为UDP协议,其类型值为17; 目的地址为服务器主机的IP地址。 4、填写UDP协议信息: (a) 16位源端口号:自选

计算机网络协议仿真实验

(b) 16位目的端口号:161(SNMP代理进程的UDP端口号) (c) 16位UDP长度:UDP报头长度(8)与UDP数据长度之和。 (d) 编辑UDP数据字段(即:SNMP数据信息):

例如:02 01 00 04 06 70 75 62 6C 69 63 A0 5F 02 01 04 02 01 00 02 01 00 30 54 30 0C 06 08 2B 06 01 02 01 01 01 00 05 00

(e) 校验和:覆盖UDP首部(含伪首部)和数据两部分。计算方法参考实验五。 5、点击工具栏或菜单栏中的“发送”,在弹出菜单上选择“发送”按钮,发送UDP报文; 6、在监控机一端截获该报文及响应报文并分析。

【思考问题】

结合实验过程中的实验结果,回答下列问题

1、SNMP服务为什么选择UDP协议而不是TCP协议作为下层协议? 【实验结论】

实验九 应用层协议 – 1:HTTP协议

【实验目的】

1、掌握HTTP协议的使用 2、了解HTTP协议的实现方式 【实验学时】 4学时

【实验类型】 综合型

【实验要求】

1、学习HTTP协议的格式

2、理解HTTP协议与TCP协议的关系 3、了解HTTP协议的通信过程

4、理解HTTP协议的无连接、无状态特性 【实验原理】

HTTP报文共有两种通用类型:请求报文,响应报文。

(1)请求报文:包括请求行、首部,以及有时出现的主体。如图

请求行 首部 空行

计算机网络协议仿真实验

主体 (只在某些报文中出现)

请求行:包括请求类型、空格、URL、空格以及HTTP版本。

请求类型 (方法) 空URL 格 空HTTP版本 格 请求类型:此字段定义了几种不同方法的报文。 常用的几种方法:

1:GET:客户要从服务器读取文档时使用。

2:HEAD:当客户想得到关于文档的某些信息但并不是要这个文档时使用。 3:POST:当客户要给服务器提供某些信息时使用。

4:PUT:当客户将新的或更换的文档存储在服务器上时使用。

5:PATCH:和PUT相似,只不过这个请求只包含必须在现有文件中出现的差异清单。

6:COPY:当需要将文件复制到另一个位置时使用。 7:MOVE:当需要将文件移到另一个位置时使用。 8:DELETE:当需要将服务器上的文档移走时使用。

9:LINK:当需要创建从一个文档到另一个位置的链接时使用。 10:UNLINK:当需要删除由LINK方法创建的链接时使用。 11:OPTION:当客户向服务器询问到一些可用的选项时使用。

统一资源定位符(URL):4要素:方法、主机、端口、路径

URL 方法 :// 主机 : 端口 / 路径

方法:用来读取文档的协议。

主机:放置信息的计算机。计算机常使用”WWW”开始的别名. 端口:服务器的端口号,可选。 路径:放置文件的路径名。

(2) 响应报文:包括状态行、首部、有时包括主体。 状态行 首部 空行

计算机网络协议仿真实验

主体 (只在某些报文中出现)

状态行:包括HTTP版本、空格、状态码、空格、状态短语。

HTTP版本 空状态码 格 空状态短语 格

状态码:

100系列:提供信息的; 200系列:指示成功的请求;

300系列:把客户重定向到另一个URL; 400系列:指示客户端差错; 500系列:指示服务器端差错。 状态短语:用来解释状态码。

OPTIONS TRACE

其他原理请参考教材第五章应用层协议

【实验步骤】

练习一:使用IE访问WEB站点。 1、在仿真机上打开IE浏览器;

2、在浏览器的地址栏中输入一个WEB站点的URL(如:http://www.jlu.edu.cn); 3、在监控机端捕获数据。

练习二:分析捕获到的数据:

1、HTTP与TCP之间是什么关系? 2、HTTP的格式是什么样的?

练习三:使用TCP连接客户端发送HTTP数据包,捕获数据 1、首先要与某选择的WWW服务器端建立一个TCP连接:

(a) 选择一个WWW服务器,比如www.jlu.edu.cn,利用前面所学的知识获得它的IP地址;

(b) 打开TCP连接客户端,填写所选择的WWW服务器的IP地址及WWW服务器进程的端口号80,然后点击“起动”,从而建立与WWW服务器的TCP连接; (c) 若连接成功,在接收窗口会显示成功连接的信息(文本方式或十六进制方式,HTTP

允许客户端查看服务器的性能 用于测试,允许客户端查看消息的回收过程 计算机网络协议仿真实验

连接成功无显示);若不成功,再次尝试进行连接,直到成功。 2、编辑并发送HTTP数据

(a) 在发送窗口编辑欲发送的数据信息,如GET / HTTP/1.1或GET / HTTP/1.0 (b) 回车

(c) 点击“发送”按扭,即完成上述数据信息的发送。 (d) 在监控机一端截获相应的报文及应答报文并分析。 (e) 观察TCP连接客户端的接收信息窗口中返回的信息。 (f) 继续发送其他数据,如

HEAD / HTTP/1.1 或HEAD / HTTP/1.0

是否可以发送成功?为什么?若要继续发送怎么办? 3、主动断开连接:

(a) 点击TCP连接客户端上的“停止”按扭,即可断开与服务器端的连接。 (b) 在监控机一端截获报文并分析。

【思考问题】

结合实验过程中的实验结果,回答下列问题

1、当仿真机上同时打开多个浏览器窗口并访问同一WEB站点的不同页面时,系统是根据什么把返回的页面正确地显示到相应窗口的?

2、结合实验说明HTTP协议的无连接、无状态特性。 【实验结论】

实验十 应用层协议 – 2:WINDOWS网络应用及CIFS协议

【实验目的】

1、了解Windows网络协议架构。 2、理解WINS协议及SMB协议。 【实验学时】 2学时

【实验类型】 综合型

【实验要求】

1、理解互连网共享资源的原理。 2、理解CIFS协议。 3、理解WINS协议。 4、理解SMB协议。 【实验原理】

1、 SMB数据报的格式:

计算机网络协议仿真实验

TCP Header NETBIOS Header SMB Header Base SMB Command Header DATA

2、SMB报文首部格式:

协议字段:前四个字节是协议标识字符串,其值总为\"\\xffSMB\". COMMAND: 命令的参数

STATUS: DOS和OS/2使用16bit错误代码。其格式为:

WindowsNT采用32bit错误代码。其格式为:

FLAGS: 也很重要,如果第15位置1,则使用UNICODE编码。

计算机网络协议仿真实验

EXTRA:

PidHigh:标识32bit进程ID。原始SMB头只支持16bit进程ID。 Signature:8字节。 Unused:未用置为0。

Tid:在客户端成功和一台SMB服务器上的资源建立连接后被使用的。TID数字用来鉴别资源。

Pid:在客户端成功在服务器上创建一个进程是使用。PID数字用来鉴别进程。 Uid:在一个用户被成功通过验证后被使用。UID数字用来鉴别用户。

Mid:在客户端拥有几个请求(进程,线程,文件访问……)是和PID同时使用。

SMB Message报文的参数段格式:

SMB Message报文的数据段格式:

SMB命令: 含义 SMB_COM_CREATE_DIRECTORY SMB_COM_DELETE_DIRECTORY SMB_COM_OPEN SMB_COM_CREATE SMB_COM_CLOSE SMB_COM_FLUSH SMB_COM_DELETE SMB_COM_RENAME

值 00 01 02 03 04 05 06 07 计算机网络协议仿真实验

SMB_COM_QUERY_INFORMATION SMB_COM_SET_INFORMATION SMB_COM_READ SMB_COM_WRITE SMB_COM_LOCK_BYTE_RANGE SMB_COM_UNLOCK_BYTE_RANGE SMB_COM_CREATE_TEMPRORARY SMB_COM_CREATE_NEW SMB_COM_CHECK_DIRECTORY SMB_COM_PROCESS_EXIT SMB_COM_SEEK SMB_COM_LOCK_AND_READ SMB_COM_WRITE_AND_UNLOCK SMB_COM_READ_RAW SMB_COM_READ_MPX SMB_COM_READ_MPX_SECONDARY SMB_COM_ WRITE _RAW SMB_COM_ WRITE _MPX SMB_COM_ WRITE _MPX_SECONDARY SMB_COM__WRITE_COMPLETE SMB_COM_QUERY_SERVER SMB_COM_SET_INFORMATION2 SMB_COM_QUERY_INFORMATION2 SMB_COM_LOCKING_ANDX SMB_COM_TRANSACTION SMB_COM_TRANSACTION_SECONDARY SMB_COM_IOCTL SMB_COM_IOCTL_SECONDARY SMB_COM_COPY SMB_COM_MOVE SMB_COM_ECHO SMB_COM_WRITE_AND_CLOSE SMB_COM_OPEN_ANDX SMB_COM_READ_ANDX SMB_COM_WRITE_ANDX SMB_COM_NEW_FILE_SIZE SMB_COM_CLOSE_AND_TREE_DISC

08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 计算机网络协议仿真实验

SMB_COM_TRANSACTION2 SMB_COM_TRANSACTION2_SECONDARY SMB_COM_FIND_CLOSE2 SMB_COM_FIND_NOTIFY_CLOSE /* Used by Xenix/Unix 0x60-0x6E */ SMB_COM_TREE_CONNECT SMB_COM_TREE_DISCONNECT SMB_COM_NEGOTIATE SMB_COM_SESSION_SETUP_ANDX SMB_COM_LOGOFF_ANDX SMB_COM_TREE_CONECT_ANDX SMB_COM_QUERY_INFORMATION_DISK SMB_COM_SEARCH SMB_COM_FIND SMB_FIND_UNIQUE SMB_COM_COSE SMB_COM_NT_TRANSACT SMB_COM_NT_TRANSACT_SECONDARY SMB_COM_NT_CREATE_ANDX SMB_COM_NT_CONCEL SMB_COM_NT_RENAME SMB_COM_OPEN_PRINT_FILE SMB_COM_WRITE_PRINT_FILE SMB_COM_CLOSE_PRINT_FILE SMB_COM_GET_PRINT_QUEUE SMB_COM_READ_BULK SMB_COM_WRITE_BULK SMB_COM_WRITE_BULK_DATA 32 33 34 35 70 71 72 73 74 75 80 81 82 83 84 A0 A1 A2 A4 A5 C0 C1 C2 C3 D8 D9 DA

【实验步骤】

练习一:观察系统启动过程。

1、重新启动仿真机上的WINDOWS操作系统

2、同时启动监控机一端的数据捕获功能,捕获仿真机启动过程中发送和接收的信息 3、分析该过程中所涉及到的各种网络协议。

练习二:在网络上“搜索”计算机。

1、点击仿真机上的:“开始——>搜索——>网络上的一台计算机”

计算机网络协议仿真实验

2、在“计算机名”一栏输入一个计算机名,可以是地址本中存在的一个计算机名,也可以随便输入一个名字

3、点击“搜索”,开始在网络上搜索该计算机的过程

4、在监控机一端截获该过程中发送和接收的信息,分析该过程应用的各种协议 5、将捕获的相关帧保存为文件:实验十1.zdt。

练习三:在工作站之间拷贝文件。 1、访问服务器主机:

方法一:在IE 浏览器的地址栏中输入:\\\\服务器的IP

方法二:点击:开始->运行,并在地址栏中输入:\\\\服务器的IP 2、找到该主机后,打开其共享文件夹

3、从中选择一个文件并拷贝下来,粘贴到本机

4、从本机选择一文件并拷贝下来,并粘贴到服务器的共享文件夹中 5、在监控机端捕获数据,分析该过程应用的各种协议 6、将捕获的相关帧保存为文件:实验十2.zdt。

【思考问题】

1、WINS协议的主要功能是什么? 2、SMB协议的主要功能是什么?

3、通过实验说明Windows网络协议的架构情况。 【实验结论】

实验十一 应用层协议 – 3:TELNET,EMAIL及其他

【实验目的】

了解TELNET、FTP、 POP3以及SMTP等协议 【实验学时】 4学时

【实验类型】 综合型

【实验要求】

1、理解TELNET协议及作用 2、理解FTP协议及工作原理 3、理解邮件服务的工作原理

4、了解POP3协议及接收邮件的过程 5、了解SMTP协议及发送邮件的过程 【实验原理】

计算机网络协议仿真实验

1、TELNET命令: 名称 EOF SUSP ABORT EOR SE NOP DM BRK IP AO AYT EC EL GA SB WILL WONT DO DONT IAC 代码(十进制) 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 描述 文件结束符 挂起当前进程(作业控制) 异常中止进程 记录结束符i 自选项结束 无操作 数据标记 中断 中断进程 异常中止输出 对方是否还在运行? 转义字符 删除行 继续进行 子选项开始 同意启动(enable)选项 拒绝启动选项 认可选项请求 拒绝选项请求 数据字节255

选项协商:4种请求

1)WILL:发送方本身将激活选项 2)DO:发送方想叫接受端激活选项 3)WONT:发送方本身想禁止选项

4)DON’T:发送方想让接受端去禁止选项 常用Telnet选项代码:

选项标识 1 3 5 6 24 31 32 33

名称 回显 抑制继续进行 状态 定时标记 终端类型 窗口大小 终端速度 远程流量控制 计算机网络协议仿真实验

34 36

2、POP3(邮局协议3): POP3的命令码 命令 USER PASS APOP STAT UIDL LIST RETR DELE RSET TOP QUIT 参数 username password 状态 描述 行方式 环境变量 认可 用来区分用户正在连接的邮箱 认可 此命令将邮件箱的口令发送给POP3服务器。缺省情况用明码文本发送 Name,Digest 认可 Digest是MD5消息摘要(大多数windows上的邮件客户软件不支持APOP命令) None [Msg#] [Msg#] [Msg#] [Msg#] None [Msg#]n None 处理 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数 处理 返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的 处理 返回邮件数量和每个邮件的大小 处理 返回由参数标识的邮件的全部文本 处理 服务器将由参数标识的邮件标记为删除,由quit命令执行 处理 服务器将重置所有标记为删除的邮件,用于撤消DELE命令 处理 服务器将返回由参数标识的邮件前n行内容,n必须是正整数 处理 服务器返回一个肯定的响应 更新 更新 NOOP None 3、SMTP(简单的邮件传送协议):

SMTP命令码: 命 令 HELLO MAIL FROM: 描 述 识别发送方到接收SMTP的一个HELLO命令 <reverse-path>为发送者地址。此命令告诉接收方一个新邮件发送的开始,并对所有的状态和缓冲区进行初始化。此命令开始一个邮件传输处理,最终完成将邮件数据传送到一个或多个邮箱中。 <forward-path>标识各个邮件接收者的地址 接收SMTP将把其后的行为看作邮件数据去处理,以<CRLF>.<CRLF>标识数据的结尾。 退出/复位当前的邮件传输 要求接收SMTP仅做OK应答。(用于测试) 要求接收SMTP返回一个OK应答并关闭传输。 验证指定的邮箱是否存在,由于安全因素,服务器多禁止此命RCPT TO: DATA REST NOOP QUIT VRFY

计算机网络协议仿真实验

令。 EXPN HELP 验证给定的邮箱列表是否存在,扩充邮箱列表,也常禁止使用。 查询服务器支持什么命令 注:<CRLF>为回车、换行

应答码:第一位数字为2时表示命令成功;为5表失败;3表没有完成。

应答码 501 502 503 504 211 214 220 221 421 250 251 450 550 451 551 452 552 553 354 554 说明 参数格式错误 命令不可实现 错误的命令序列 命令参数不可实现 系统状态或系统帮助响应 帮助信息 <domain>服务就绪 <domain>服务关闭 <domain>服务未就绪,关闭传输信道 要求的邮件操作完成 用户非本地,将转发向<forward-path> 要求的邮件操作未完成,邮箱不可用 要求的邮件操作未完成,邮箱不可用 放弃要求的操作;处理过程中出错 用户非本地,请尝试<forward-path> 系统存储不足,要求的操作未执行 过量的存储分配,要求的操作未执行 邮箱名不可用,要求的操作未执行 开始邮件输入,以\".\"结束 操作失败

其他原理介绍请参考教材第五章 应用协议

【实验步骤】

练习一:运行TELNET命令 捕获数据并分析 1、在DOS命令提示符下运行:

a. telnet 本机名

b. telnet 本机IP地址

对上述两项操作,在监控机端是否捕获到数据?分析原因。

2、从地址本中选择另一个主机的主机名和IP地址,在DOS命令提示符下运行:

a. telnet 主机名

b. telnet 主机IP地址

计算机网络协议仿真实验

对上述两项操作,在监控机端捕获数据,比较这两项操作的执行过程有何不同,分析原因。

3、实验环境中的服务器上的telnet服务已经启动,并且提供一个公共帐号,其用户名:guest;口令:guest。

在DOS命令提示符下运行:

(a) telnet 服务器主机域名;

(b) 在“Login:”提示符后输入用户名(guest),然后在“Password:”提示符后输入口令(guest);

(c) 在虚拟终端上进行一些简单的操作(可不作); (d) 按“CTRL+]”回到telnet提示符下; (e) 输入“quit”退出telnet。

在监控机端捕获数据,从协议的角度分析该次telnet操作的完整过程。 练习二:运行FTP。

1、实验环境中的服务器上的FTP服务已经启动,并且提供一个公共帐号,其用户名:anonymous;口令:(无)

在DOS命令提示符下运行:

(a) ftp 服务器主机域名(或服务器的IP地址); (b) 在“Login:”提示符后输入用户名(anonymous),然后在“Password:”提示符后输入口令(无);

(c) 在客户端上进行一些简单的操作(可不作),如:

pwd ls help „„

(d) 在ftp提示符下输入“quit”退出ftp。

2、在监控机一端捕获数据,对该过程中仿真机发送和接收的全部TCP数据包:

(a) 记录每个TCP数据包的TCP协议头部分,关注其中以下字段的值:

源、目的端口号; 序号和确认序号;

ACK、SYN和FIN等标志位; 窗口大小;

(b) 根据各字段的值分析TCP协议的建立连接、会话和断开连接的全过程。 (c) 分析该过程中所有TCP包的源端口号和目的端口号。 (d) 分析FTP的工作方式。 (e) 根据捕获数据,计算在该TCP连接过程中本地以太网上用户有效数据的实际吞吐量是多少?

练习三:发送电子邮件

计算机网络协议仿真实验

1、打开邮件工具:Foxmail或Outlook Express; 2、编辑并发送一电子邮件;

3、在监控机一端捕获数据并分析:

发送邮件的过程采用的是应用层的哪一协议?

练习四:接收电子邮件

1、打开邮件工具:Foxmail或Outlook Express; 2、接收电子邮件;

3、在监控机一端捕获数据并分析:

接收邮件的过程采用的是应用层的哪一协议?

练习五:编辑电子邮件数据包并发送,捕获数据并分析 1、首先要与某选择的邮件服务器建立一个TCP连接:

(a) 选择一个邮件服务器,比如mail.jlu.edu.cn,利用前面所学的知识获得它的IP地址;

(b) 打开TCP连接客户端,填写所选择的邮件服务器的IP地址及邮件服务器进程的端口号25,然后点击“起动”,从而建立与邮件服务器的TCP连接;

(c) 若连接成功,在接收窗口会显示成功连接的信息(文本方式或十六进制方式);若不成功,再次尝试进行连接,直到成功。 2、编辑并发送邮件数据

(a) 在发送窗口编辑发送邮件的信息:

Helo 回车并点击“发送”; Mail from:<发送邮件地址〉回车并点击“发送”; Rcpt to:<接收邮件地址〉 回车并点击“发送”; Data 回车并点击“发送”; aaa(欲发送信息) 回车并点击“发送”; . 回车并点击“发送”; Quit 回车并点击“发送”。

(b) 在监控机一端截获相应的报文及应答报文并分析。 (c) 观察TCP连接客户端的接收信息窗口中返回的信息。 3、断开连接:

(a) 点击TCP连接客户端上的“停止”按扭,断开与服务器端的连接。 (b) 在监控机一端截获报文并分析。 练习六:接收电子邮件,捕获数据并分析

1、首先要与某选择的邮件服务器建立一个TCP连接:

(a) 选择一个邮件服务器,比如mail.jlu.edu.cn,利用前面所学的知识获得它的IP地址;

(b) 打开TCP连接客户端,填写所选择的邮件服务器的IP地址及邮件服务器进程的

计算机网络协议仿真实验

端口号110(POP3服务端口号),然后点击“起动”,从而建立与邮件服务器的TCP连接;

(c) 若连接成功,在接收窗口会显示成功连接的信息(文本方式或十六进制方式); 若不成功,再次尝试进行连接,直到成功。 2、察看及接收邮件信息。

(a) 在发送窗口编辑发送邮件的信息:

User 合法用户名 回车并点击“发送”; Pass 该用户密码 回车并点击“发送”; Stat 回车并点击“发送”; Uidl 回车并点击“发送”; List 回车并点击“发送”; Retr Msgid 回车并点击“发送”; Dele Msgid 回车并点击“发送”; Quit 回车并点击“发送”; NOOP 回车并点击“发送”; (b) 在监控机一端截获相应的报文及应答报文并分析。 (c) 观察TCP连接客户端的接收信息窗口中返回的信息。 3、断开连接:

(a) 点击TCP连接客户端上的“停止”按扭,断开与服务器端的连接。 (b) 在监控机一端截获报文并分析。

【思考问题】

1、描述A给B发送一电子邮件到B接收该电子邮件的过程以及每一步所用到的协议。 说明:

A在主机H1上发送,A的邮件服务器为SERVER1; B在主机H2上接收,B的邮件服务器为SERVER2。

2、通过实验说明你的电子邮件在网络上传输是安全的吗?为什么?如果不安全,你认为实现邮件安全传输的最好的办法是什么?

【实验结论】

实验十二 网络性能监测

【实验目的】

1、掌握监测网络性能的基本方法 2、掌握网络性能问题的基本分析方法 【实验学时】

计算机网络协议仿真实验

2学时

【实验类型】 综合型

【实验要求】

1、学习使用网络故障分析仪进行网络性能监测的基本方法 2、能够根据性能检测结果分析网络性能问题 【实验原理】

请参考教材:第一章——第五章

【实验步骤】

练习一:编辑并发送帧序列,捕获数据并分析

1、打开协议仿真编辑器,编辑帧序列,通过设置发送次数及发送时间间隔来控制发包的速度和数量,可发送大批量的数据。

2、在监控机端捕获已发送的数据,并利用故障分析仪的各种统计功能进行分析。 3、当仿真机不停地向网络上发送大量的数据包时,在监控机端观察网络的性能。

练习二:在监控机上捕获局域网上所有的数据包,并利用网络协议分析仪的各种统计功能进行实时分析和判断。

1、切换TAP上的按钮,将监控机连接到交换机镜像口的HUB上。

2、启动监控机端本地连接上的TCP/IP协议,即可捕获流经局域网上的所有帧。 3、观察并分析网络上的会话状况:

(a) 点击网络协议分析仪的“会话状况”功能,察看各协议的会话情况。

(b) 主动捕获一些帧,分析这些帧所使用的各种协议的会话情况,按照总字节数从大到小进行排列。 4、观察主机状况:

(a) 点击网络协议分析仪的“主机状况”功能,察看各主机发送和接收信息的情况。 (b) 选择一台主机地址(或广播地址),分析在某一时刻该地址MAC层有效数据的传输效率是多少? 5、观察性能状况:

(a) 点击网络协议分析仪的“性能状况”功能,察看局域网络上的性能统计信息。 (b) 主动捕获一些帧,按照MAC协议进行统计,获得各项性能状况的统计信息。 6、观察协议统计信息:

(a) 点击网络协议分析仪的“协议统计”功能,察看各协议的统计信息,在IP协议的统计信息中,TCP、UDP协议所占的百分比如何?

(b) 主动捕获一些帧,按照MAC协议进行统计,获得各项统计信息。 练习三:大量帧的分析。

1、将数据采集器的按钮弹出,将监控机连接到局域网当中;

2、启动监控机端本地连接上的TCP/IP协议,即可捕获流经局域网上的所有帧; 3、启动监控机上的协议详细解析功能,捕获2分钟内流经局域网上的所有帧;

计算机网络协议仿真实验

4、在这2分钟之内,在部分仿真机上运行几种不同的网络应用程序(如WWW服务、邮件服务等);

5、将捕获到的帧保存到文件:实验十二.zdt。 6、对捕获到的所有帧进行以下分析:

(a) 其中有多少MAC会话。 (b) 其中有多少IP会话。 (c) 其中有多少UDP会话。 (d) 其中有多少TCP会话。

在捕获期间,存在多少TCP连接? 有多少TCP连接失败?

有多少TCP连接正常中断?

在结束捕共获时,有多少TCP连接是活跃的?

(e) 共使用了多少种不同的协议,各协议都属于TCP/IP协议族的哪一层次。

(f) 对IP的上层协议进行统计,计算各协议(TCP、UDP等协议)所占的百分比,从而对TCP和UDP协议的使用情况进行比较。

【思考问题】

1、在实验的过程中,网络上的峰值流量是多少?

2、网络是否出现性能严重下降的情况,如果有,分析产生的原因。 3、分析在真实的广域网环境中,UDP与TCP协议的使用情况。 【实验结论】

实验十三 网络故障仿真及分析

【实验目的】

能够分析常见故障的原因,并提出解决方案 【实验学时】 4学时

【实验类型】 综合型

【实验要求】 【实验原理】

请参考教材:第一章——第五章

【实验步骤】

1、打开提供的实例文件,分析有多少连接问题 (a) 有多少ARP请求没有得到响应?

计算机网络协议仿真实验

(b) 有多少TCP连接没有正常进行。 (c) 测量一个TCP连接的响应时间。 【思考问题】

1、常见的网络故障有哪些? 【实验结论】

实验十四 综合实验

【实验目的】

1、检验学生对TCP/IP协议原理的掌握情况 2、检验学生对TCP/IP协议原理的实际应用能力 3、提高学生综合分析问题的能力 【实验学时】 4学时

【实验类型】 综合型

【实验原理】 请参考教材: 第一章——第五章 【实验步骤】

练习一:判断一台主机是否已启动。

选择一台本子网内的主机,通过仿真机与监控机的协作,结合前面所学习的知识及实验内容,判断该主机是否已经启动。

要求: (a) 至少使用三种不同的协议。 (b) 至少使用四种不同的方法。

练习二:伪装网关。

假设A、B、C是同一子网内的三台不同的主机,A是你的仿真机,C是B 的网关,A 不是B的网关。你有什么办法让B认为它的网关是你的仿真机A而不是C,从而B把发送到本子网外的信息都发送给A?

通过实验来验证你的想法。

【实验结论】

因篇幅问题不能全部显示,请点此查看更多更全内容

Top