计算机网络协议仿真实验

更新时间:2024-03-23 03:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

【实验六 TCP传输控制协议】

【实验目的】

1、掌握TCP协议的工作原理; 2、理解TCP协议的通信过程。

【实验学时】

4学时

【实验类型】

综合型

【实验内容】

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

3、能够分析TCP协议的建立连接、会话和断开连接的全过程; 4、学会计算TCP校验和的方法; 5、了解TCP的标志字段的作用。

【实验原理】

TCP协议是面向连接的、端到端的可靠传输协议,它支持多种网络应用程序。TCP必须解决可靠性,流量控制的问题,能够为上层应用程序提供多个接口,同时为多个应用程序提供数据,TCP也必须能够解决通信安全性的问题。 1、TCP的封装

IP数据报TCP数据报IP首部20字节TCP首部20字节TCP数据

图6-1 TCP的封装

2、TCP首部格式: 各字段含义:

16位源端口号和16位目的端口号:端口号通常也称为进程地址。 32位序号:序号用来标识从TCP发送端向TCP接收端发送的数据字节流。 32位确认序列号:表示一个准备接收包的序列号。

计算机网络协议仿真实验

4位首部长度:首部长度指出了首部中32 bit字的数目。正常的TCP首部长度是20字节。 6个标志字段:U R G 紧急指针;A C K 确认序号;P S H 推标志;R S T 重建连接;S Y N 同步序号;F I N 结束标志。

16位窗口:TCP的流量控制由连接的每一端通过声明的滑动窗口大小来提供,窗口大小为字 16位检验和:检验和字段覆盖了TCP首部和TCP数据。TCP检验和的计算方法和UDP检验和的计算方法一样,计算时需要考虑伪报头。 16位紧急指针:URG标志置1时紧急指针才有效。

116位源端口号32位序号32位确认序号4位首部长度保留(6位)URGACKPSHRSTSYNFIN16位窗口大小16位紧急指针选项数据161716位目的端口号3216位检查和

图6-2 TCP分组格式示意图

【实验步骤】

注意:本实验要求服务器端启动TELNET服务。 练习一:运行netstat命令

1、在浏览器的地址栏输入:www.jlu.edu.cn,在命令行下输入: netstat -n 回车 。 2、观察TCP状态,记录Local Address、Foreign Address和State。

3、在浏览器的地址栏输入:www.http://m.wodefanwen.com/,在命令行下输入: netstat -n 回车 。 4、观察TCP状态,记录Local Address、Foreign Address和State。 5、再开一个命令行窗口,输入:telnet bbs.jlu.edu.cn,

6、观察TCP状态,记录Local Address、Foreign Address和State。 7、三次记录有什么不同,为什么?

8、使用带其他参数的netstat命令,查看网络状态。例如:

netstat –a netstat –b

练习二:利用仿真编辑器编辑并发送TCP数据包

1

计算机网络协议仿真实验

说明:

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

●为了实现TCP三次握手过程的仿真,发送第一个连接请求帧之前,应该暂停仿真编辑器端的TCP/IP协议,否则计算机系统的网络会对该请求帧的应答帧发出拒绝响应。具体操作为在仿真端主机上运行“开始/程序/网络协议仿真教学系统 基本版/TCP过滤/启动过滤”。

●通过手工编辑TCP数据包实验,要求理解实现TCP连接建立、数据传输以及断开连接的全过程。在编辑的过程中注意体会TCP首部中的序列号和标志位的作用。

首先选择服务器主机上的一个进程作服务器进程,并向该服务器进程发送一个建立连接请求报文,对应答的确认报文和断开连接的报文也编辑发送。其步骤如下: 1、打开协议仿真编辑器,单击工具栏中的TCP协议选项 2、填写该帧的以太网协议首部:

?源MAC地址:本机MAC地址; ?目的MAC地址:服务器的MAC地址; 3、填写IP协议头信息:

?协议字段:协议类型值为6,即上层协议类型应为TCP; ?总长度: IP头部+TCP头部+数据长度 ?首部校验和:应用前面学到的知识进行计算; ?源IP地址:本机IP地址; ?目的IP地址:服务器的IP地址

?其它字段默认 4、填写TCP协议信息:

?源端口:任意大于1024的数,不要用下拉选择; ?目的端口:可以设80(HTTP协议);

?序号:选择一个序号ISN(假设1942589885),以后的数据都按照这个来填写; ?首部长度和标志位:首部长度和标志位设为5002(即长度20字节,标志SYN=1); ?窗口大小:任意;

?校验和:覆盖TCP首部(包含伪首部)和TCP数据两部分,计算方法同UDP协议一样。值得注意的是伪首部中的协议号是0006,而不是UDP时的0011;

?将设置完成的数据帧复制3份;修改第二帧的TCP首部长度和标志位为5010(即标志位ACK=1),TCP层序号为1942589885+1。修改第三帧的TCP首部长度和标志位为5011(即标志位ACK=1、FIN=1),TCP层序号为1942589885+1。

5、在发送该TCP连接请求之前,先运行一次ping 目标服务器,目的是让目标服务器知道自己的MAC;

2

计算机网络协议仿真实验

6在工具菜单栏中选择TCP三次握手下的启动过滤,以暂停TCP/IP协议。 7、点击菜单栏中的“发送”,在弹出对话框中选择发送第一个帧;

8、在协议分析器一端截获相应的应答报文,可以设置协议端口(80)过滤。这里要求协议分析器一端的同学及时准确地捕获应答报文并迅速从中获得应答报文的接收字节序号,并告之仿真编辑器一端的同学;

9、我们假设接收字节序号为:3246281765,修改第二帧和第三帧的TCP应答序号中的值:3246281766;

10、计算第二帧的TCP校验和,发送。对服务器的应答报文进行确认; 11、计算第三帧的TCP校验和,发送。断开连接,完成TCP连接的全过程;

12、协议分析器一端截获相应的请求及应答报文并分析,注意观察“会话分析”中的会话过程。

注意:实验结束后启动仿真编辑器端的TCP/IP协议。具体步骤是:工具—>TCP三次握手?暂停过滤。

练习三:使用TCP连接客户端工具测试各种TCP连接建立和断开的过程 1、首先选择一个TELNET服务器,并建立一个TCP连接,步骤如下:

?选择一个TELNET服务器,比如服务器IP为172.16.1.177,启动协议分析器的捕获功能;

?在仿真编辑器的TCP连接试图中,填写所选择服务器的IP地址及服务器进程的端口号,选择23端口,点击“连接”,建立本机与TELNET服务器的TCP连接; 在TCP连接客户端程序的返回窗口中会有返回信息;

图6-3 TCP连接视图界面

2、断开连接:

?点击 “断开”按扭,即可断开与服务器端的连接。

?在协议分析器一端刷新截获报文,从“会话分析”中找出此连接的三次握手、服务器返回的信息、拆除连接的几个数据包;

3、由1步和2步,画出TELNET连接建立、拆除连接的会话过程,标记出每步的序号、确认序号、SYN、ACK、FIN等标志位。

4、选择一个WWW服务器,并建立一个TCP连接,步骤如下:

?在地址本中选择扫描到的服务器,点击端口扫描按钮,开始扫描该服务器开放的端口。?双击该主机IP,将其IP填加到服务器信息IP地址中,比如:bbs.jlu.edu.cn服务器(IP=10.100.66.92);

3

计算机网络协议仿真实验

?双击端口号80,也会自动填加到服务器信息端口中。(也可以手动输入) ?单击“连接”按钮,建立连接。

图6-4 TCP连接视图界面

5、断开连接

?单击 “断开”按扭,即可断开与服务器端的连接。

?在协议分析器一端截获报文,从HTTP会话中找出此连接的三次握手、拆除连接的几个数据包;

6、由4和5步,画出HTTP连接建立、拆除连接的过程,标记出每步的序号、确认序号、SYN、ACK、FIN等标志位。

7、首先选择一个FTP服务器,并建立一个TCP连接,步骤如下:

?选择一个FTP服务器,比如:实验室的FTP服务器(IP=172.16.1.177);

?填写所选择服务器的IP地址及服务器进程的端口号21,点击“连接”,建立本机与FTP服务器的TCP连接;

图6-5 TCP连接视图界面

8、断开连接:

?点击 “断开”按扭,即可断开与服务器端的连接。

?在协议分析器一端截获报文,从“会话分析”中找出此连接的三次握手、服务器返回的信息、拆除连接的几个数据包;

9、由7和8步,总结FTP连接建立的过程和拆除连接的过程。记录序号、确认序号、SYN、ACK、FIN 、PSH等标志位。

10、上述3个TCP连接操作的过程可以用下图描述,写出每一步的序号和确认序号及标志位变化情况。

4

计算机网络协议仿真实验

户端与服务器建立FTP连接时,将与服务器上的两个端口建立联系:端口20和21。FTP使用不同的端口号传输不同的内容,见下面的流程:

[ ftp Client ] [ ftp Server ] Port xxxx ----- |SYN|-----------------> Port 21 [TCP] Port xxxx <-----|SYN+ACK | ------------ Port 21 Port xxxx ----- |ACK|-----------------> Port 21 [TCP]

?? 控制操作: 用户列目录或传输文件??

Port xxxx ----- |ACK+PORT命令|--------> Port 21 [TCP] Port yyyy <-----|SYN|------------------ Port 20 Port yyyy ----|SYN+ACK|-------------> Port 20 Port yyyy <---| ACK |--------------- Port 20

具体的FTP工作流程请在实验中仔细的记录。 FTP的命令可以在命令提示符下键入:

ftp 10.60.48.200(实验室FTP服务器的IP地址)

用户被提示输入用户名和口令(用匿名登入),确认口令输入正确后,用户将获得FTP提示符“ftp>”。 FTP常用的命令:

Binary ;将文件传输模式设为二进制方式 Bye ;退出,结束远程连接 Case ;打开case功能 Close ;关闭远程连接 cd ;改变远程系统目录名 cd up ;进入父目录 debug ;设置调试级别 dir ;打印路径名

delete ;在远程计算机中删除文件

get ;将文件从远程系统下载到本地系统 glob ;在文件传输时使用通配符

hash ;每传输1 0 2 4字节打印一个“#” help ;打印帮助文件 lcd ;改变本地系统路径 ls ;打印远程主机目录 lpwd ;打印本地主机工作路径

mget ;将多个文件从远程系统下载到本地系统 mkdir ;在远程计算机上创建路径

10

计算机网络协议仿真实验

mput ;将多个文件上载到远程计算机 prompt ;交互式提示

put ;将文件上载到远程计算机 pwd ;显示当前工作路径 user ;登录到远程计算机系统

【实验步骤】

本实验要求:

1、服务器端已经启动telnet服务,并且提供一个公共账号:guest,口令:guest; 2、也可以利用校园网的BBS作为服务主机。 练习一:运行TELNET命令,捕获数据并分析

1、实验环境中的服务器(假设IP地址:172.16.1.177)上的telnet服务已经启动,并且提供一个公共帐号,其用户名:guest;口令:无;

在命令行提示符下运行:

?telnet 服务器IP(例如:telnet 172.16.1.177);

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

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

2、在协议分析器端捕获数据,从协议的角度分析该次telnet操作的完整过程。

?在协议分析器端捕获数据,查找用户名和密码。是否可以捕获到其它网段上的信息? ?仿真编辑器端在TELNET状态下,运行各种操作,在协议分析器端上是否可以捕获到数据,理解TELNET明文传输的不安全性,了解网络监听的可能。

练习二:FTP工作流程

1、设置协议分析器端过滤器,按TCP协议和MAC地址过滤。源MAC是本机,目的MAC是FTP服务器,即本实验室的FTP服务器(172.16.1.177)。启动协议分析器捕获;

2、登录FTP 服务器:

在实验环境中的FTP服务器(172.16.1.177)已经启动,并提供一个公共帐号,用户名是:anonymous,口令:无。或用户名:demo,口令:demo。 在命令行提示符下运行:

?C:>ftp 172.16.1.177

?在“LOGIN:”提示符后输入用户名:Anonymous; ?在“PASS” 提示符后输入密码:无; ?在客户端上运行一个简单的操作,如:

11

计算机网络协议仿真实验

ftp> dir

?在FTP提示符下输入“quit”退出FTP。

2、暂停协议分析器的捕获,刷新显示,在协议分析器端已捕获的数据中,对该过程中仿真编辑器发送和接收的全部TCP数据包记录:

客户端 FTP服务器 Port( ) SYN=(),ACK=(),PSH=(),FIN=() Port( ) SYN=(),ACK=(),PSH=(),FIN=() TCP连接建立阶段

Port( ) SYN= DATA( )

Port( ) SYN= DATA( )

DATA( )

Port( ) SYN= DATA( ) DATA( )

Port( ) SYN= DATA( )

Port( ) SYN= DATA( )

SYN=(),ACK=(),PSH=(),FIN=()

(),ACK=(),PSH=(),FIN=() Port( ) SYN=(),ACK=(),PSH=(),FIN=()

(),ACK=(),PSH=(),FIN=() Port( ) SYN=(),ACK=(),PSH=(),FIN=()

SYN=(),ACK=(),PSH=(),FIN=()

(),ACK=(),PSH=(),FIN=() Port( )

SYN=(),ACK=(),PSH=(),FIN=()

SYN=(),ACK=(),PSH=(),FIN=()

(),ACK=(),PSH=(),FIN=() Port( ) (),ACK=(),PSH=(),FIN=() Port( ) 12

计算机网络协议仿真实验

Port( ) SYN=(),ACK=(),PSH=(),FIN=() Port( ) DATA( )

Port( ) SYN=(),ACK=(),PSH=(),FIN=() Port( ) Port( ) SYN=(),ACK=(),PSH=(),FIN=() Port( )

Port( ) SYN=(),ACK=(),PSH=(),FIN=() Port( ) DATA( )

Port( ) SYN=(),ACK=(),PSH=(),FIN=() Port( ) DATA( )

下面应该是传输数据的一些数据包。 3、根据实验结果总结:

?FTP工作时客户端和服务器的两个端口工作过程。

?根据标志字段分析FTP的两个端口的连接建立、会话和断开连接的全部过程。 ?分析FTP的工作过程。

?分析该过程中的源、目的端口号。

?是否可以捕获到用户名和密码?说明FTP的安全性? 练习三:使用TCP连接客户端工具

1、首先选择一个FTP服务器,并建立一个TCP连接:

?选择一个FTP服务器,比如:172.16.1.177,或其他的FTP服务器;

?在仿真编辑器端,打开TCP连接视图,填写所选择的FTP服务器的IP地址及FTP服务器进程的端口号21,然后点击“连接”,建立与FTP服务器的TCP连接; ?连接成功,在接收窗口会显示成功连接的信息;若不成功,再次尝试进行连接,直到 成功。如图:

13

计算机网络协议仿真实验

图7-1 TCP连接客户端工具界面

2、在发送区输入下列命令:

USER username 点击“发送”; PASS passWord 点击“发送”; 进入FTP服务器,使用下列命令,观察结果;

NOOP 点击“发送”; (空操作)

14

计算机网络协议仿真实验

HELP 点击“发送”; (命令帮助) STAT 点击“发送”; (当前连接状态) 等等; 2、断开连接:

?点击TCP连接视图上的“断开”按扭,即可断开与服务器端的连接。

?在协议分析器端截获报文,分析连接建立和拆除连接的过程,记录标志位的变化。

【思考问题】

1、通过实验说明你的TELNET帐户密码在网络上传输是安全的吗?

2、 在ACTIVE模式的FTP中,服务器端为何使用20和21两个端口,其作用分别是什么?客户端与这两个端口建立起的连接分别是谁(客户端还是服务器端)主动发起的?

【实验报告要求】

1、说明TELNET、FTP协议的使用,分析TENLET和FTP的安全性。 2、画出FTP连接、传输和拆除连接的工作流程。 2、回答练习中提出的问题。

【实验九 DNS域名服务协议】

【实验目的】

1、理解DNS实现的原理; 2、掌握DNS报文格式;

【实验学时】

4学时

【实验类型】

综合型

【实验内容】

1、学习DNS协议的原理和实现方法; 2、学习DNS的报文格式;

3、通过编辑DNS请求数据包,了解响应包的格式;

15

计算机网络协议仿真实验

【实验原理】

1、DNS协议

DNS域名系统是服务器和客户程序相互通信的一种协议。它提供了主机域名和IP地址

之间的转换。域名服务器使用固定的端口号53,支持UDP和TCP访问。

(1)DNS的报文格式

1151632标识问题数授权资源记录数查询问题标志资源记录数额外资源记录数回答(资源记录数可变)授权(资源记录数可变)额外信息(资源记录数可变) 图8-1 DNS的报文格式

上图是DNS查询和响应的报文格式。DNS查询和响应的报文由12字节长的首部和4个长度可变长度的字段组成。标识字段由客户程序设置并由服务器返回结果。 (2)DNS工作流程

域名服务分为客户端和服务器端,客户端提出请求,询问一个Domain Name的IP地址,服务器端必须回答客户端的请求。本地DNS首先查询自己的数据库,如果自己的数据库中没有对应的IP地址,则向本地DNS上所设的上一级DNS询问,得到结果之后,将收到的结果保存在高速缓冲区,并回答给客户端。

待查询的域名放在查询问题中,查询结果放在回答的资源记录中。

【实验步骤】

练习一:利用仿真编辑器编辑DNS请求包

利用仿真编辑器编辑DNS请求包,请求的域名是:www.http://www.wodefanwen.com/.cn,在协议分析器端观察结果。

1、打开仿真编辑器,在工具栏选择“新建”,建立一个以太网帧(或利用协议仿真编辑器打开时默认的以太网帧进行编辑); 2、填写该帧的以太网协议首部:

(1)源MAC地址:仿真编辑器的MAC地址;

(2)目的MAC地址:目的MAC地址应该是网关的MAC,应用前面学习的知识获得; (3)类型或长度:该字段值应为0800(即IP协议的类型值); 3、填写IP协议头信息:

16

计算机网络协议仿真实验

(1)高层协议类型:即上层协议类型应为17(UDP协议的类型为17); (2)总长度:IP长度+UDP长度; (3)源IP地址:仿真编辑器的IP地址; (4)目的IP地址:DNS服务器的IP地址; (5)计算IP首部校验和。 4、填写UDP协议的各个字段信息:

(1)源端口:自选,例如:2000 (2)目的端口:选择DNS端口53; (3)UDP长度:UDP报头长度+DNS长度; 注:以上步骤可简化为:(其它实验也是如此)

1)、打开仿真编辑器,在工具栏中选择UDP协议,将UDP目的端口改为53 2)、目的MAC地址:网关的MAC

3)、源IP地址:仿真编辑器的IP地址; 4)、目的IP地址:DNS服务器的IP地址;

建议将全部字段都填充完毕后,在填充IP/UDP 的长度及校验和。 5、填写DNS协议的各个字段信息,见图8-2:

17

计算机网络协议仿真实验

图8-2 DNS各字段的信息

?标识:1291 ?标志:0100 ?问题记录数:1 ?应答记录数:0 ?授权记录数:0 ?附加记录数:0

?问题记录:问题记录是填写DNS请求的域名部分,按下列步骤进行;

①域名循环体:鼠标移至域名循环体点,击鼠标右键,追加块5块(LoopBlock), ②改写第一块的长度为3,在域标记中添加www;

18

计算机网络协议仿真实验

③改写第二块的长度为5,在域标记中添加baidu; ④改写第三块的长度为3,在域标记中添加com; ⑤改写第四块的长度为2,在域标记中添加cn; ⑥第五块长度为0;

⑦问题类型:1 A 主机类型; ⑧问题类别:1 IN (INTERNET);

6、计算UDP校验和:覆盖UDP首部(含伪首部)和数据(DNS)两部分; 7、点击“发送”;

8、在协议分析器端截获报文,从会话分析中找出DNS请求包和DNS响应包; 9、在响应包中,找出Answer setion字段并记录:

回答类型=( ) 回答等级=( )

生存时间=( ) ;DNS的有效时间 资源数据长度=( )

鼠标点击下一项Internet地址[这4个字节是资源数据], 在16进制对应的地方有4个字节的数据=( ) 这4个字节的数据就是我们要的www.http://www.wodefanwen.com/.cn的IP地址。

10、改变问题记录数据,比如:发送域名是www.sina.com.cn的DNS请求 ,在协议分析器截获报文,查出对应的IP地址是多少? 练习二:nslookup工具的使用

nslookup命令是查询域名对应IP的工具,其用法是:nslookup 域名 1、在命令提示符下输入: c:>ipconfig /flushdns

c:>nslookup www.http://www.wodefanwen.com/.cn

2、观察运行结果,在协议分析器端截获相应的数据包; 3、查询其他域名的IP地址。 练习三:DNS解析

1、打开IE浏览器,访问某站点,如在地址栏中写入:www.python.org并回车。在协议分析器一端截获这一过程中传输的数据包;是否有DNS请求?

2、关闭IE浏览器,重新打开IE浏览器,再次访问www.python.org。在协议分析器一端截获这一过程中传输的数据包;是否有DNS请求?为什么?

3、通过实验理解DNS协议的使用过程,从协议分析器端截获的数据包中找出本地的域名服务器IP地址是多少?域名服务进程的端口号是什么? 练习四:运行ipconfig命令

1、打开IE浏览器,访问某站点,如在地址栏中写入:www.163.com并回车。

19

计算机网络协议仿真实验

2、在命令提示符下运行:ipconfig /displaydns 显示本机缓冲区中的DNS解析内容; 3、观察运行结果。

练习五:Winsock网络程序设计

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

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

2、建立一个“Win32 Console Application”类型的工程,工程名自拟;

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

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

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

#include #include #include

#pragma comment(lib, \

//主文件// int main() {

WORD wVersionRequested = MAKEWORD(1, 1);

WSADATA wsaData; //初始化 windows sockets API// if (WSAStartup(wVersionRequested, &wsaData)) { printf(\

return -1;

}

char hostname[256]; //获得本主机名//

int res = gethostname(hostname, sizeof(hostname)); if (res != 0) { //错误处理//

}

printf(\return -1;

//打印本主机名字//

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

20

计算机网络协议仿真实验

printf(\请输入一个主机域名:\输入一个主机的域名// scanf(\利用主机名获得主机的地址// hostent* pHostent = gethostbyname(hostname);

if (pHostent==NULL) { //错误处理// printf(\

return -1; }

//解析返回的主机地址信息:别名、地址类型、地址长度,并打印// }

5、编译、连接并运行程序;

6、观察程序运行的结果,体会程序中几个主要函数的作用。 练习六:反复运行上述程序,可以输入以下域名

21

hostent& he = *pHostent;

printf(\ he.h_name, he.h_aliases, he.h_addrtype, he.h_length);

sockaddr_in sa; //打印主机每一个网卡的IP地址// for (int nAdapter=0; he.h_addr_list[nAdapter]; nAdapter++) {

memcpy ( &sa.sin_addr.s_addr, e.h_addr_list[nAdapter],he.h_length); printf(\} //显示IP地址// printf(\

unsigned long addr;

char hostaddr[50];

printf(\请输入服务器IP地址:\输入一个服务器的IP地址// scanf(\

addr=inet_addr(hostaddr); //将IP地址转化为网络字节序// pHostent=gethostbyaddr((char *)&addr,4,AF_INET);

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

if (pHostent==NULL) { //错误处理// printf(\ }

hostent& he1 = *pHostent;

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

he.h_name, he.h_aliases, he.h_addrtype, he.h_length); return -1;

//打印返回的主机信息// WSACleanup(); // 结束 windows sockets API// return 0;

计算机网络协议仿真实验

www.jlu.edu.cn mail.jlu.edu.cn www.sina.com www.microsoft.com ??

在协议分析器端捕获数据并分析说明:

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

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

【思考问题】

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

1、当仿真编辑器上同时打开多个浏览器窗口并访问同一WEB站点的不同页面时,系统是根据什么把返回的页面正确地显示到相应窗口的? 2、域名与IP地址之间是否有一一对应的关系?

【实验报告要求】

1、根据练习1说明DNS协议的工作流程。 2、根据实验结果,回答练习中提出的问题。

【实验十 DHCP协议】

【实验目的】

1. 掌握DHCP的报文格式 2. 掌握DHCP的工作原理

【实验学时】

建议2学时

【实验类型】

综合型

【实验内容】

1、学习DHCP报文格式;

22

计算机网络协议仿真实验

2、使用DHCP获取IP地址; 3、模拟重新登陆;

【实验原理】

一. DHCP报文格式

操作代码 (1字节) 硬件类型 (1字节) 硬件长度 (1字节) 跳数 (1字节) 事务ID (4字节) 秒 (2字节) 标志 (2字节) 客户端IP地址 (4字节) 您(客户端)的IP地址 (4字节) 服务器IP地址 (4字节) 网关IP地址 (4字节) 客户端硬件地址 (16字节) 服务器名 ( 64字节) 引导文件名 (128字节) 选项 (64字节) 二. DHCP工作原理

发现阶段:即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCP discover发现报文来寻找DHCP服务器(如下图)。

23

计算机网络协议仿真实验

提供阶段:即DHCP服务器为DHCP客户机提供IP地址的阶段。在网络中接收到DHCP discover发现报文的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCP offer提供报文(如下图)。

选择阶段:即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCP offer提供报文,则DHCP客户机只接受第一个收到的DHCP offer提供报文,然后它就以广播方式回答一个

24

计算机网络协议仿真实验

DHCP request请求报文,该报文中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址(如下图)。

确认阶段:即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP request请求报文之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ack确认报文,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址(如下图)。

25

计算机网络协议仿真实验

重新登录:以后DHCP客户机每次重新登录网络时,就不需要再发送DHCP discover发现报文了,而是直接发送包含前一次所分配的IP地址的DHCP request请求报文。当DHCP服务器收到这一报文后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认报文。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP nack否认报文。当原来的DHCP客户机收到此DHCP nack否认报文后,它就必须重新发送DHCP discover发现报文来请求新的IP地址。

更新租约:DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的报文。

【实验步骤】

练习一:使用DHCP获取IP地址

本练习由每一位组员独自完成。将分析端未用的网卡禁用。 1. 记下本机的IP地址,在命令行方式下,输入下面的命令:

“netsh interface ip set address name=“本机可用网卡的接口名”

26

计算机网络协议仿真实验

source=dhcp”。

2. 在命令行方式下,输入命令“ipconfig –release”。 3. 启动协议分析器捕获数据并设置过滤条件(提取DHCP协议)。 4. 在命令行方式下,输入命令“ipconfig –renew”。 5. 察看DHCP会话分析,填写下表。

报文 Boot record type 序号 ? 的值 Message Type 的值 Lease Time的值(若有) 源IP 地址 目的IP 地址 6. 等待,超过租用时间(上表中的Lease Time的值)的50%后,察看捕获的数据

包。 ?

各报文中字段“Boot record type”、“Message Type”的值分别是多少?该请求报文的作用是什么?

练习二:模拟重新登录

1. 启动仿真编辑器,编辑一个DHCP request数据包,其中:

MAC层:“源MAC地址”设置为本机MAC地址

“目的MAC地址”设置为服务器MAC地址

IP层:“源IP地址”设置为本机IP地址

“目的IP 地址”设置为服务器IP地址(172.16.0.10)

UDP层:“源端口”设置为68

“目的端口”设置为67

27

计算机网络协议仿真实验

DHCP层:“代码”设置为1

“标志”设置为0

“客户端IP地址”设置为分析端的IP地址 “你的IP地址”设置为0.0.0.0

“客户端硬件地址”设置为本机的MAC地址 追加选项块

“选项代码”设置为53 “长度”设置为1

“DHCP消息类型”设置为3

2. 启动协议分析器捕获数据并设置过滤条件(提取DHCP协议)。 3. 发送编辑好的数据包。 4. 察看捕获的数据。

? ?

各报文中字段“Boot record type”、“Message Type”的值分别是多少? 在捕获的报文中是否有 DHCP discover报文,为什么?

【思考问题】

1. DHCP为何使用67、68两个熟知端口进行UDP通信? 2. DHCP协议适合于什么情况下使用?请举例说明。

【实验十一 SMTP和POP3协议】

【实验目的】

1、理解POP3、SMTP协议的基本原理; 2、了解SMTP和POP3的基本命令格式; 3、了解应用层协议与传输层协议的关系。

【实验学时】

4学时

28

计算机网络协议仿真实验

【实验类型】

综合型

【实验内容】

1、学习邮件服务的工作原理; 2、理解SMTP协议和POP3协议;

3、学习POP3协议的命令格式和使用方法; 4、学习SMTP协议的命令和使用方法; 5、学习Outlook的使用方法。

【实验原理】

1、POP3(邮局协议3)

POP是一个脱机协议,它是一个具有存储转发功能的中间服务器。POP3是邮局协议的第3个版本。POP3协议采用客户/服务器工作模式。

表9-1 POP3的命令码 命令 USER <用户邮件地址> PASS <口令> STAT LIST<邮件编号> RETR<邮件编号> DELE<邮件编号> RSET NOOP QUIT 用来区分用户正在连接的邮箱 此命令将邮件箱的口令发送给POP3服务器。缺省情况用明码文本发送 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数 返回邮件数量和每个邮件的大小 返回由参数标识的邮件的全部文本 服务器将由参数标识的邮件标记为删除,由quit命令执行 服务器将重置所有标记为删除的邮件,用于撤消DELE命令 服务器返回一个肯定的响应 更新 描述 2、SMTP(简单的邮件传送协议)

SMTP协议是两个报文传输代理之间的通信协议。它规定了两个相互通信MTA之间如何交换信息。SMTP协议的最大特点是简单,它规定了发送程序和接收程序之间的命令和应答格式。

表9-2 常用SMTP命令码

29

计算机网络协议仿真实验

命 令 HELO MAIL FROM:<发送者邮件地址> RCPT TO:<接收者邮件地址> DATA REST NOOP QUIT HELP 描 述 发送一个SMTP的HELLO命令,开始会话 此命令开始一个邮件传输处理 标识邮件接收者的地址 接收SMTP将DATA命令后面的数据看作邮件内容处理,以<CRLF>.<CRLF>标识数据的结尾。 退出/复位当前的邮件传输 要求接收SMTP仅做OK应答。(用于测试) 要求接收SMTP返回一个OK应答并关闭传输。 查询服务器支持什么命令 注:<CRLF>为回车、换行 表9-3 SMTP应答码 应答码 501 502 503 504 211 214 220 221 421 250 描述 参数格式错误 命令不可实现 错误的命令序列 命令参数不可实现 系统状态或系统帮助响应 帮助信息 <domain>服务就绪 <domain>服务关闭 <domain>服务未就绪 要求的邮件操作完成 应答码 251 450 550 451 551 452 552 553 354 554 描述 用户非本地,将转发向<forward-path> 要求的邮件操作未完成,邮箱不可用 要求的邮件操作未完成,邮箱不可用 放弃要求的操作;处理过程中出错 用户非本地,请尝试<forward-path> 系统存储不足,要求的操作未执行 过量的存储分配,要求的操作未执行 邮箱名不可用,要求的操作未执行 开始邮件输入,以\结束 操作失败 注:第一位数字为2时表示命令成功;为5时表示失败;为3时表示没有完成。

【实验步骤】

本实验要求:

每台仿真编辑器上都安装有outlook express软件,学生可以进行账号的配置并利用其进行收发邮件的操作。

邮件服务器域名为JServer.NetLab。

邮件服务器的用户名和密码的分配规则按Group1、Group2、Group3 ?? GroupN递增, 用户名和密码相同。每台主机拥有一个用户。下面一仅以用户名Group1密码Group1为例说明实验步骤。

练习一:利用“TCP工具”和SMTP命令编辑邮件并发送

本练习的目的是学习SMTP协议的命令用法,以及一个邮件发送的过程。 1、首先要与邮件服务器建立一个TCP连接。

30

计算机网络协议仿真实验

?打开工具菜单栏中的“TCP连接视图”;

?填写邮件服务器的IP地址及邮件服务器SMTP协议的端口号(25),点击“连接”,从而建立本机与邮件服务器SMTP端口的TCP连接。(从协议分析器一端可以捕获到三次握手的过程)

?若连接成功,在接收窗口会显示成功连接的信息: 220 ??

若不成功,查看IP地址和端口号是否有错,再次尝试进行连接,直到成功。

2、用SMTP命令编辑并发送邮件

?在发送窗口编辑发送SMTP协议的命令,在接收窗口会返回服务器端信息: 发送窗口:helo group1 点击“发送”; 接收窗口:250 group1??

发送窗口:mail from:Group1@JServer.NetLab 点击“发送”; 接收窗口:250 OK

发送窗口:rcpt to: Group1@JServer.NetLab 点击“发送”; 接收窗口:250 OK its for

发送窗口:data 点击“发送”; 接收窗口:354 OK send it;end with .

发送窗口:my email (My email是邮件内容) 点击“发送”; 接收窗口:

发送窗口:. 点击“发送”; 接收窗口:250 message queued

发送窗口:quit 点击“发送”。 接收窗口:221 Goodbye (注:是回车换行)

?观察TCP连接视图的接收信息窗口中返回的信息;

?在协议分析器一端截获命令报文及应答报文,分析序号和确认序号,标志位,报文内容等。 3、断开连接:

在协议分析器一端截获报文,分析TCP拆除连接的过程。 练习二:利用TCP连接客户端工具和POP3命令接收电子邮件 1、选择邮件服务器,建立一个TCP连接:

?打开“工具”菜单中的TCP连接视图;

?填写邮件服务器的IP地址及邮件服务器POP3协议的端口号110,点击“连接”,从而建立本机与邮件服务器的TCP连接;

?若连接成功,在接收窗口会显示成功连接的信息(+OK POP3 mail server ready);若不成功,再次尝试进行连接,直到成功。

31

计算机网络协议仿真实验

2、察看邮件信息:

?在发送窗口编辑发送POP3协议的命令,在接收窗口会返回服务器端信息: 发送窗口:user Group1 点击“发送”; 接收窗口:+OK send your password

发送窗口:pass Group1 点击“发送”; 接收窗口:+OK maildrop locked and ready

发送窗口:stat 点击“发送”; 接收窗口:+OK 2 590

发送窗口:uidl 点击“发送”; 接收窗口:+OK 2 messages

发送窗口:list 点击“发送”; 接收窗口:+OK 2 messages

发送窗口:retr 1 (查看第一封信件内容) 点击“发送”; 接收窗口:+OK 220 octets

按下一帧查看第1封信的内容;

发送窗口:dele 1 点击“发送”; 接收窗口:+OK message 1 deleted

发送窗口:quit 点击“发送”; 接收窗口:+OK POP3 mail server saying Goodbye ?观察TCP连接视图的接收信息窗口中返回的信息;

?在协议分析器一端截获命令报文及应答报文,分析序号和确认序号,标志位,报文内容等。

3、断开连接:

在协议分析器一端截获报文,分析TCP拆除连接的过程。 练习三:利用仿真编辑器编辑SMTP问候数据包

本练习的目的是理解SMTP的工作过程和数据包封装格式。SMTP是应用层协议,在传输层使用TCP协议建立连接,因此不能通过编辑SMTP数据帧来实现SMTP问候数据包。我们可以利用仿真编辑器的TCP 连接工具,先建立一个TCP连接,然后通过捕获响应数据包,查出端口号和序号。步骤如下:

1、参考练习1的内容,利用TCP连接视图工具和邮件服务器建立一个TCP连接;

2、在协议分析器一端捕获数据包,找出三次握手的过程,记录仿真编辑器端启动的端口号、三次握手后的最后一个ACK应答包的序号和确认序号,记录窗口大小。 3、在仿真编辑器一端建立一个SMTP问候包,步骤如下:

?打开协议仿真编辑器,在界面初始状态下,程序会自动新建一个单帧,可以利用协议仿真编辑器打开时默认的以太网帧进行编辑;

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

32

计算机网络协议仿真实验

①源MAC地址:仿真编辑器的MAC地址;

②目的MAC地址:目的MAC地址应该是邮件服务器的MAC地址; ③类型或长度字段:该字段值应为0800(即IP协议的类型值); ?填写IP协议头信息:

①高层协议类型:即上层协议类型应为6(TCP协议的类型); ②总长度:应包括TCP总长度; ③源IP地址:仿真编辑器的IP地址; ④目的IP地址:邮件服务器的IP地址; ⑤首部校验和,确定长度以后计算。 ?填写TCP协议头信息:

①源端口:记录下来的端口号,即TCP连接工具进程的端口号; ②目的端口:25(SMTP协议); ③序号:记录下来的序号;

④ACK确认序号:记录下来的确认序号;

⑤首部长度和标志位:5018(即长度20字节,标志ACK=1,PSH=1); ⑥窗口大小:用记录值; ⑦紧急指针:0;

⑧校验和:确定SMTP内容以后计算。计算方法参见实验6-TCP协议;

?填写SMTP协议信息:

①右键单击协议树中“SMTP协议数据”选择“追加块”;在单帧编辑器中“首部字段”中写:HELO

②计算IP总长度,添加到IP长度字段。计算TCP总长度,添加到TCP长度字段。 ③分别计算IP、TCP校验和,添加到相应字段。

图9-1 SMTP协议信息编辑

4、编辑正确后,发送;

5、点击TCP连接工具的“断开”,断开和邮件服务器的连接;

6、在协议分析器一端截获数据,找出SMTP问候包和SMTP响应包,记录响应结果。理解SMTP

33

计算机网络协议仿真实验

的工作过程和数据包封装格式。同理,可以编辑POP3协议的命令数据包。 练习四:利用Outlook发送电子邮件 1、打开邮件工具:Outlook Express; 2、设置一个邮件帐号; 3、编辑并发送一个电子邮件;

4、在协议分析器一端捕获数据,联系练习二的步骤; 5、找出这次发送邮件的所有数据包;

6、找出传输用户帐号及密码的数据包,能不能看到用户密码是什么? 7、发送邮件的过程传输层采用什么协议? 8、发送端的端口号是多少?代表什么协议? 练习五:利用Outlook接收电子邮件 1、打开邮件工具:Outlook Express; 2、接收电子邮件;

3、在协议分析器一端捕获数据,联系练习二的步骤; 4、找出这次接收邮件的所有数据包;

5、找出传输用户帐号及密码的数据包,能不能看到用户密码是什么? 6、找出所接收邮件中的某一邮件内容; 7、接收邮件的过程传输层采用什么协议? 8、发送端的端口号是多少?代表什么协议?

【思考问题】

1、说明为什么要借助TCP连接工具才能用仿真编辑器编辑SMTP协议的命令?

【实验报告要求】

1、通过实验说明你的电子邮件在网络上传输是安全的吗?为什么?如果不安全,你认为实现邮件安全传输的最好的办法是什么? 2、回答练习中提出的问题。

【实验十二 SNMP协议与网络管理】

【实验目的】

34

计算机网络协议仿真实验

1、理解SNMP协议的工作原理; 2、理解SNMP协议的作用。

【实验学时】

2学时

【实验类型】

验证型

【实验内容】

1、通过仿真SNMP数据包,学习SNMP协议的格式; 2、学习使用SNMP 工具,了解MIB以及基本的MIB变量; 3、学习SNMP协议的作用; 4、了解SNMP与UDP的关系。

【实验原理】

用于网络管理站与被管设备的网管代理之间交互管理信息的协议。管理信息的结构使用一种概念树。树叶表示各种对象,帮助用户了解互连网络的结构。网络管理站通过SNMP协议向被管设备的网管代理发出各种请求报文,网管代理则接收这些请求后完成相应的操作。SNMP为应用层协议,是TCP/IP协议簇的一部分,它是通过UDP用户数据报协议来操作的。

网络管理员对网络及其设备的管理有三种方式:本地终端方式、远程Telnet命令方式和基于SNMP的代理/服务器方式。 1、SNMP的报文格式:

IP报文UDP报文SNMP报文公共SNMP首部get/set首部get/set变量部分IP首部UDP首部版本(0)共同体PDU类型(0-3)请求标识差错状态(0-5)差错索引名称值名称值??20字节8字节PDU类型(4)企业代理地址trap类型(0-6)特定代码时间戳名称值?trap首部有意义的变量 图10-1 SNMP报文格式

字段说明: 共同体:

35

计算机网络协议仿真实验

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

表10-1 PDU类型 PDU类型 0 1 2 3 4 名 称 get-request get-next-request get-response set-request trap 描 述 从代理进程提取一个或多个参数值 从代理进程提取一个或多个参数的下一个参数值 应答一个取操作 设置代理进程的一个或多个参数值 代理进程主动发出的报文,通知管理进程有某些事情发生 请求标识:

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

表10-2 差错状态 差错状态 0 1 2 3 4 5 noError tooBig noSuchName badValue readOnly genErr 名 称 没有错误 代理进程无法把响应放在一个SNMP消息中发送 操作不存在的变量 set操作的值或语义有错误 管理进程试图修改一个只读变量 其他错误 描 述 差错索引:

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

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

描 述 3 4 5 6

linkUp authenticationFailure egpNeighborLoss enterpriseSpecific 计算机网络协议仿真实验

SNMP管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。Get-Next-Request用于和Get-Request组合起来查询特定的表对象中的列元素。如:

首先通过下面的原语获得所要查询的设备的接口数:

{iso org(3) dod(6) internet(1) mgmt(2) mib(1) interfaces(2) ifNumber(2)} 然后再通过下面的原语,进行查询(其中第一次用Get-Request,其后用Get-Next-Request): {iso org(3) dod(6) internet(1) mgmt(2) mib(1) interfaces(2) ifTable(2)} 2、详细原理请参考教材

【实验步骤】

练习一:查看网络信息库(MIB)

本练习的目的是学习了解MIB2库的内容。实验步骤如下: 1、打开仿真编辑器,在视图菜单中选择“SNMP连接视图“;

2、在SNMP主机扫描地址本中双击一台主机IP,自动填加到IP文本框中,例如:172.16.0.55 3、依次展开节点:(在下部显示对不同信息的描述)

-iso(国际标准化组织)1 -org(国际组织)3 -dod(美国国防部)6 -internet(互联网)1 -mgmt(管理组织机构)2 -mib2(管理信息库)1 得到mib2节点:1.3.6.1.2.1 4、查看节点mib2下的8个组:

-system(系统)1 -interface(接口)2 -at(地址翻译)3 -ip(IP信息)4 -icmp(ICMP信息)5 -tcp(TCP信息)6 -udp(UDP信息)7

-egp(外部网关协议信息)8

单击获取按钮在右侧信息框中会有相应的变量信息; 例如:点击system组节点;会列出该组节点下的7个变量;

- sysDescr ;系统的文字描述

- sysObjectID ;在子树1.3.6.1.2.1.1.2中的厂商标识

- sysUpTime ;从系统的网管部分启动以来运行的时间(百分之一秒为单位)

37

计算机网络协议仿真实验

- sysContact ;联系人的名字及联系方式 - sysName ;节点的完全合格的名称 - sysLocation ;节点的物理位置

- sysServices ;指示节点提供的服务的值。 点击sysName变量,在右边的窗口出现该变量的值。 记录system组下的变量的对象标识都是多少?

图10-1 SNMP编辑视图

5、点击其他的组节点,查看相应的变量。 练习二:编辑并发送SNMP数据包

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

1、打开协议仿真编辑器,在界面初始状态下,程序会自动新建一个单帧,可以利用协议仿真编辑器打开时默认的以太网帧进行编辑; 2、填写该帧的以太网协议首部:

?目的MAC地址:网关的MAC地址; 源MAC地址:本机的地址

?类型或长度字段:0800(即IP协议的类型值)

38

计算机网络协议仿真实验

3、填写IP协议头信息:

?总长度:IP长度+UDP长度+SNMP长度;

?高层协议类型:选择上层协议类型为UDP协议,其类型值为17;

?目的IP地址:为代理主机(待管理设备)的IP地址。可以设为:202.198.156.254; ?源IP地址:本机IP

?计算IP头的校验和; 4、填写UDP协议信息:

?源端口:自选

?目的端口:161(SNMP代理进程的UDP端口号)

?UDP长度:UDP报头长度与UDP数据长度(SNMP部分)之和。

?编辑39个字节的SNMP数据字段:点击SNMP的数据出现编辑框,添入下列信息:

30 25 02 01 00 04 06 70 75 62 6C 69 63 A1 18 02 01 01 02 01 00 02 01 00 30 0D 30 0B 06 07 2B 06 01 02 01 01 05 05 00

?校验和:覆盖UDP首部(含伪首部)和数据(SNMP)两部分。计算方法参考实验五。 5、点击工具栏或菜单栏中的“发送”,在弹出对话框上选择“发送”按钮,发送SNMP报文; 6、在协议分析器一端截获该SNMP请求报文及SNMP响应报文,并记录分析响应报文的内容。

【思考问题】

结合实验过程中的实验结果,回答下列问题: 1、MIB2的UDP节点组下有哪些变量? 2、MIB2的TCP节点组下有哪些变量?

【实验报告要求】

1、说明SNMP协议的用途。

2、解释SNMP服务为什么选择UDP协议而不是TCP协议作为下层协议?

【实验十三 HTTP协议】

【实验目的】

1、掌握HTTP协议的使用;

39

计算机网络协议仿真实验

2、了解HTTP协议的实现方式。

【实验学时】

2学时

【实验类型】

综合型

【实验内容】

1、学习HTTP协议的格式和与TCP协议的关系 2、了解HTTP协议的通信过程;

3、理解HTTP协议的无连接、无状态特性。

【实验原理】

1、HTTP协议

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

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

请求行首部空行主体(只在某些报文中出现) 图11-1 HTTP请求报文

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

请求类型空格URL空格HTTP版本 图11-2 请求行格式

请求类型:此字段定义了几种不同方法的报文。 常用的几种方法:

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

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

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

40

计算机网络协议仿真实验

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

⑧LINK:当需要创建从一个文档到另一个位置的链接时使用。 ⑨UNLINK:当需要删除由LINK方法创建的链接时使用。 ⑩OPTION:当客户向服务器询问到一些可用的选项时使用。 统一资源定位符(URL):有4个要素:方法、主机、端口、路径

URL方法 :// 主机 : 端口 / 路径 图11-3 URL示意图

①方法:用来读取文档的协议。 ②主机:放置信息的计算机。 ③端口:服务器的端口号,可选。 ④路径:放置文件的路径名。 (2)响应报文

响应报文包括状态行、首部、有时包括主体。

状态行首部空行主体(只在某些报文中出现) 图11-4 HTTP响应报文示意图

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

HTTP版本空格状态码空格状态短语 图11-5 HTTP响应报文状态行

状态码:

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

300系列:把客户重定向到另一个URL; 400系列:指示客户端差错;

41

计算机网络协议仿真实验

500系列:指示服务器端差错。 状态短语:用来解释状态码。 2、详细原理请参考教材

【实验步骤】

练习一:使用TCP连接客户端工具,发送HTTP数据; 实验步骤如下:

1、首先要选择一个WWW服务器,建立一个TCP连接:

?选择一个WWW服务器,比如www.jlu.edu.cn,利用前面所学的知识获得它的IP地址; ?打开TCP连接客户端,填写所选择的WWW服务器的IP地址及WWW服务器进程的端口号80;

2、编辑并发送HTTP数据

?在发送窗口编辑发送数据信息,如:

GET / HTTP / 1.0(或GET / HTTP / 1.1); Host: www.jlu.edu.cn

注意“/”前后的空格;代表回车换行。

?点击“连接”,从而建立与WWW服务器的TCP连接。HTTP连接成功时“断开”按钮变为有效;若不成功,再次尝试进行连接或换其他服务器。

?点击“发送”,若成功,服务器会返回信息,见下图。否则,点击“停止” ,重新进行?、?步;

(注意:发送HTTP的数据包含回车符,点击“连接”和“发送”的连贯性)。

图11-6 HTTP服务器对请求的回应显示

?在协议分析端截获相应的报文并分析; (5)继续发送其他数据,如:

42

计算机网络协议仿真实验

HEAD / HTTP/ 1.0 (或HEAD / HTTP / 1.1) Host: www.jlu.edu.cn

是否可以发送成功?为什么?由此理解HTTP的无连接性、无状态特性。若要继续发送必须重新建立连接。

练习二:使用TCP连接客户端工具,测试HTTP的连接、断开过程;

测试HTTP的连接、断开连接的过程,可以帮助我们更好的理解HTTP的无连接性,无状态性。同时,了解HTTP的TCP连接过程。

1、选择一个WWW服务器,比如www.jlu.edu.cn;确定它的IP地址,

?启动TCP连接视图工具,填写IP地址和80端口号。 ?点击“连接”建立连接;

?在协议分析端截获相应的报文及应答报文; ?完成下面的填空:

客户端 WWW服务器 Port( ) SYN=(),ACK=(),PSH=(),FIN=() Port( ) SEQ=( ),ACK SEQ=( )

SYN=(),ACK=(),PSH=(),FIN=() TCP连接建立阶段

SEQ=( ),ACK SEQ=( )

SYN=(),ACK=(),PSH=(),FIN=()

SEQ=( ),ACK SEQ=( )

2、发送HTTP数据

?在发送数据窗口编辑欲发送的数据信息,如:GET / HTTP / 1.0;回车; ?点击“发送”按扭,即完成上述数据信息的发送;

?观察显示数据窗口中返回的信息;如果不成功,从新连接并发送。 ?完成下面的填空:

客户端 WWW服务器 Port( ) SYN=(),ACK=(),PSH=(),FIN=() Port( ) SEQ=( ),ACK SEQ=( )

SYN=(),ACK=(),PSH=(),FIN=()

SEQ=( ),ACK SEQ=( )

SYN=(),ACK=(),PSH=(),FIN=() TCP数据传输阶段

43

计算机网络协议仿真实验

SEQ=( ),ACK SEQ=( )

SYN=(),ACK=(),PSH=(),FIN=()

SEQ=( ),ACK SEQ=( )

3、断开连接

(1)在协议分析端截获报文,分析TCP断开连接的过程。 (2)完成下面的填空:

客户端 WWW服务器 Port( ) SYN=(),ACK=(),PSH=(),FIN=() Port( ) SEQ=( ),ACK SEQ=( )

SYN=(),ACK=(),PSH=(),FIN=() TCP连接断开阶段

SEQ=( ),ACK SEQ=( )

SYN=(),ACK=(),PSH=(),FIN=()

SEQ=( ),ACK SEQ=( )

SYN=(),ACK=(),PSH=(),FIN=()

SEQ=( ),ACK SEQ=( )

练习三:通过浏览器学习HTTP协议 1、在仿真编辑端主机上打开IE浏览器;

2、在浏览器的地址栏中输入一个WEB站点的URL 如:http://www.jlu.edu.cn); 3、在协议分析端捕获数据,分析数据包的传输过程,记录TCP连接的三次握手、序号、确认序号、TCP数据长度和仿真机的进程端口号;一个网页是否只有一个进程?记录本次HTTP请求过程TCP断开连接的过程。

4、通过协议分析器捕获数据,在上面的网页上继续浏览一个链接,是否需要新的TCP连接? 5、说明HTTP与TCP之间是什么关系?说明HTTP的无连接、无状态性。 6、说明HTTP协议的格式是什么样的?

【思考问题】

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

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

44

计算机网络协议仿真实验

2、一个主页是否只有一个连接?

3、为什么HTTP不保持与客户端的TCP连接?

【实验报告要求】

1、说明HTTP协议的应用,结合实验说明HTTP协议的无连接、无状态特性。 2、对于域名是www.jlu.edu.cn的WWW服务器,你利用什么手段获得它的IP地址? 3、根据实验结果,回答练习中提出的问题。

【实验十四 WINS和NETBIOS协议】

【实验目的】

1、了解Windows网络协议架构; 2、了解NETBIOS协议的使用; 3、理解WINS协议及SMB协议。

【实验学时】

2学时

【实验类型】

综合型

【实验内容】

1、通过发送NETBIOS名字请求包,学习WINS协议和NETBIOS; 2、学习NETBISO请求的报文格式,了解NETBIOS使用的端口; 3、理解WINS协议和DNS协议的不同; 4、了解CIFS协议; 5、了解SMB协议。

【实验原理】

1、WINS协议

WINS(Windows Internet Name Server)是Windows网际名字服务。网络上的WINS服务器提供了一个将NetBIOS名解析为IP地址的动态数据库。WINS为NetBIOS提供名字注册、

45

计算机网络协议仿真实验

更新、释放和解析服务。WINS服务器收集和维护网络上可用的NetBIOS名字并处理名字注册、名字释放及从WINS客户机来的名字解析请求。名字解析过程:

(1)当WINS客户端想要解析一个名字时,它首先检查本地NetBIOS名字缓存器。 (2)如果名字不在本地NetBIOS名字缓存器中,便发送一个WINS查询到首选WINS服务器(每隔15秒发送一次,共发三次),如果请求失败,则向次选WINS发送同样的请求。 2、NETBIOS

NetBIOS(NETwork Basic Input/Output System)网络基本输入输出系统。NetBIOS名称和计算机名是一样的,在一个网络内只能使用一次。这些名称是在计算机启动、服务开始或用户登录时动态注册的。 3、SMB/CIFS协议

SMB(Server Message Block) 简称服务信息块协议,主要用于计算机间局域网共享文件系统、打印机和其他资源的协议。CIFS(common internet file system)是通用互联网文件系统,是SMB的一个公共版本。CIFS和SMB解析计算机名的方法不同。SMB使用NetBIOS名的广播和WINS解析计算机名,而CIFS则使用DNS。Windows 2000以前版本中使用NetBIOS协议,而Windows2000以后的版本使用CIFS。 (1)SMB报文的格式:

TCP Header NETBIOS Header SMB Base Header SMB Command Header DATA 图12-1 SMB报文格式 (2)SMB报文首部格式:

图12-2 SMB报文首部格式

46

计算机网络协议仿真实验

协议字段:前四个字节是协议标识字符串,其值总为“0xffSMB”; COMMAND: 命令的参数; STATUS: 错误代码;

FLAGS: 标志使用UNICODE编码; EXTRA: 扩充;

TID:客户端成功和一台SMB服务器上的资源建立连接后被使用的。TID数字用来鉴别资源。 PID:使用PID数字用来鉴别客户端成功在服务器上创建一个进程; UID:UID数字用来鉴别一个用户被成功通过验证;

MID:和PID同时使用鉴别客户端拥有几个请求(进程,线程,文件访问??)。

4、详细原理请参考教材

【实验步骤】

练习一:利用仿真编辑器编辑NETBIOS请求名字服务数据包

利用仿真编辑器编辑NETBIOS请求包,在协议分析器端观察结果,理解WINS原理。在地址本中找任意主机,步骤如下:

1、打开仿真编辑器,在界面初始状态下,程序会自动新建一个单帧,可以利用协议仿真编辑器打开时默认的以太网帧进行编辑; 2、填写该帧的以太网协议首部:

?源MAC地址:仿真编辑器的MAC地址;

?目的MAC地址:目的主机MAC地址(选定的主机MAC地址); ?类型或长度字段:该字段值应为0800(即IP协议的类型值); 3、填写IP协议头信息:

?高层协议类型:即上层协议类型应为17(UDP协议的类型为17); ?总长度:应包括UDP总长度(20IP+8UDP+50NETBIOS=78); ?源IP地址:仿真编辑器的IP地址;

?目的IP地址:目的主机IP地址(选定主机的IP地址); ?计算IP首部校验和。 4、填写UDP协议的各个字段信息:

?源端口:自选,例如:3092

?目的端口:选择目的主机的137端口;

?UDP长度:UDP报头长度+NETBIOS长度(58),见图12-3。

?校验和:UDP“校验和”的计算包括UDP头、NETBIOS信息段和UDP伪首部;

47

计算机网络协议仿真实验

图12-3 NetBios协议信息编辑

5、填写NETBIOS协议的各个字段信息: ?事务ID:0; ?通用标志:0010; ?请求实体的数目:1; ?应答段的资源数目:0; ?可靠认证段的资源数目:0; ?附加记录段的资源数目:0;

?名字长度:32;(在名字偱环体中右键追加块,可显示该项) ?名字:CKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA; ?问题类型:33,NETBIOS节点状态; ?问题类别:1,INTERNET;

6、将编辑好的NETBIOS数据帧发送,在协议分析器端截获数据,查找请求包和响应包,分

48

计算机网络协议仿真实验

析响应包的内容。

7、从响应包中找到查询主机的主机名称; 练习二: 运行nbtstat 命令

NBTSTAT命令可以用来查询涉及到NetBIOS信息的网络机器。另外,它还可以用来消除NetBIOS高速缓存器和预加载LMHOSTS文件。这个命令在进行安全检查时非常有用。使用这个命令可以让我们通过网络中的任一台计算机来查看网络中其他计算机的IP地址及网卡MAC地址。命令格式:

NBTSTAT [ [-a RemoteName] [-A IP address] [-c] [-n] [-r] [-R] [-RR] [-s] [-S] [interval] ] 1、从地址本中找出本网段的一台主机的主机名,在命令提示符界面输入:

c:>nbtstat -a 主机名(或IP地址); 例如:

C:\\Documents and Settings\\Administrator>nbtstat -a A200 会显示: 本地连接:

Node IpAddress: [10.60.48.200] Scope Id: [] NetBIOS Remote Machine Name Table Name Type Status --------------------------------------------- MHX <00> UNIQUE Registered MHX <20> UNIQUE Registered WORKGROUP <00> GROUP Registered WORKGROUP <1E> GROUP Registered MHX <03> UNIQUE Registered ADMINISTRATOR <03> UNIQUE Registered

MAC Address = 00-09-44-20-40-0A

2、在协议分析器一端捕获数据报文,分析运行nbtstat时都使用了什么协议? 记录:

?请求包的目的IP=( );

?请求包的源端口号port=( )和目的端口号port= ( ); ?UDP长度=( );

?请求包NETBIOS 的Transaction ID=( ); ?请求包的NETBIOS的类型Type= ( );

?响应包的源端口号port= ( )和目的端口号port=( ); ?响应包NETBIOS的Time To Live= ( ); ?响应包NETBIOS的 Transaction ID=( );

49

本文来源:https://www.bwwdw.com/article/q5r8.html

Top