1、计算机网络A实验指导书(适用于网络工程、计算机科学与技术专业)计算机科学与技术学院网络教研室2006-8目 录实验一 利用分组嗅探器分析HTTP和DNS3实验二 熟悉Win2000网络环境及相应的网络服务12实验三 Web服务器的实现18实验四 TCP协议分析22实验五 802.3协议分析和以太网25实验六 熟悉网络互连设备及其基本配置28实验一 利用分组嗅探器分析HTTP和DNS一、 实验目的及任务1、 熟悉并掌握Ethereal(或WireShark)的基本操作,了解网络协议实体间的交互以及报文交换。2、 分析HTTP协议3、 分析DNS协议二、 实验环境与因特网连接的计算机网络系统;主机
2、操作系统为Windows2000或Windows XP;Ethereal(或WireShark)等软件。三、 预备知识要深入理解网络协议,需要仔细观察协议实体之间交换的报文序列。为探究协议操作细节,可使协议实体执行某些动作,观察这些动作及其影响。这些任务可以在仿真环境下或在如因特网这样的真实网络环境中完成。观察在正在运行协议实体间交换报文的基本工具被称为分组嗅探器(packet sniffer)。顾名思义,一个分组嗅探器捕获(嗅探)计算机发送和接收的报文。一般情况下,分组嗅探器将存储和显示出被捕获报文的各协议头部字段内容。图1为一个分组嗅探器的结构。图1右边是计算机上正常运行的协议(在这里是因
3、特网协议)和应用程序(如:web浏览器和ftp客户端)。分组嗅探器(虚线框中的部分)是附加计算机普通软件上的,主要有两部分组成。分组捕获库接收计算机发送和接收的每一个链路层帧的拷贝。高层协议(如:HTTP、FTP、TCP、UDP、DNS、IP等)交换的报文都被封装在链路层帧(Frame)中,并沿着物理介质(如以太网的电缆)传输。图1假设所使用的物理媒体是以太网,上层协议的报文最终封装在以太网帧中。分组嗅探器的第二个组成部分是分析器。分析器用来显示协议报文所有字段的内容。为此,分析器必须能够理解协议所交换的所有报文的结构。例如:我们要显示图1中HTTP协议所交换的报文的各个字段。分组分析器理解以
4、太网帧格式,能够识别包含在帧中的IP数据报。分组分析器也要理解IP数据报的格式,并能从IP数据报中提取出TCP报文段。然后,它需要理解TCP报文段,并能够从中提取出HTTP消息。最后,它需要理解HTTP消息。Ethereal(或WireShark)是一种可以运行在Windows, UNIX, Linux等操作系统上的分组分析器。Ethereal(或WireShark)是免费的,可以从Http:/www.ethereal(或wireshark).com得到。运行Ethereal(或WireShark)程序时,其图形用户界面如图2所示。最初,各窗口中并无数据显示。Ethereal(或WireSha
5、rk)的界面主要有五个组成部分:图2 Ethereal(或WireShark)的用户界面l 命令菜单(command menus):命令菜单位于窗口的最顶部,是标准的下拉式菜单。最常用菜单命令有两个:File、Capture。File菜单允许你保存捕获的分组数据或打开一个已被保存的捕获分组数据文件或退出Ethereal(或WireShark)程序。Capture菜单允许你开始捕获分组。l 捕获分组列表(listing of captured packets):按行显示已被捕获的分组内容,其中包括:Ethereal(或WireShark)赋予的分组序号、捕获时间、分组的源地址和目的地址、协议类型
6、、分组中所包含的协议说明信息。单击某一列的列名,可以使分组按指定列进行排序。在该列表中,所显示的协议类型是发送或接收分组的最高层协议的类型。l 分组头部明细(details of selected packet header):显示捕获分组列表窗口中被选中分组的头部详细信息。包括:与以太网帧有关的信息,与包含在该分组中的IP数据报有关的信息。单击以太网帧或IP数据报所在行左边的向右或向下的箭头可以展开或最小化相关信息。另外,如果利用TCP或UDP承载分组,Ethereal(或WireShark)也会显示TCP或UDP协议头部信息。最后,分组最高层协议的头部字段也会显示在此窗口中。l 分组内容窗
7、口(packet content):以ASCII码和十六进制两种格式显示被捕获帧的完整内容。l 显示筛选规则(display filter specification):在该字段中,可以填写协议的名称或其他信息,根据此内容可以对分组列表窗口中的分组进行过滤。四、 实验步骤(一) Ethereal(或WireShark)的使用1. 启动主机上的web浏览器。2. 启动Ethereal(或WireShark)。你会看到如图2所示的窗口,只是窗口中没有任何分组列表。3. 开始分组捕获:选择“capture”下拉菜单中的“Start”命令,会出现如图3所示的“Ethereal(或WireShark):
8、 Capture Options”窗口,可以设置分组捕获的选项。图3 Ethereal(的Capture Option4. 在实验中,可以使用窗口中显示的默认值。在“Ethereal(或WireShark): Capture Options”窗口的最上面有一个“interface”下拉菜单,其中显示计算机中所安装的网络接口(即网卡)。当计算机具有多个活动网卡(装有多块网卡,并且均正常工作)时,需要选择其中一个用来发送或接收分组的网络接口(如某个有线接口)。随后,单击“ok”开始进行分组捕获,所有由选定网卡发送和接收的分组都将被捕获。5. 开始分组捕获后,会出现如图4所示的分组捕获统计窗口。该窗
9、口统计显示各类已捕获分组的数量。在该窗口中有一个“stop”按钮,可以停止分组的捕获。6. 在运行分组捕获的同时,在浏览器地址栏中输入某网页的URL,如:。为显示该网页,浏览器需要连接的服务器,并与之交换HTTP消息,以下载该网页。包含这些HTTP消息的以太网帧(Frame)将被Ethereal(或WireShark)捕获。图4 Ethereal(或WireShark)的Packet Capture Windows7. 当完整的Web页面下载完成后,单击Ethereal(或WireShark)捕获窗口中的stop按钮,停止分组捕获。此时,分组捕获窗口关闭。Ethereal(或WireShark
10、)主窗口显示已捕获的你的计算机与其他网络实体交换的所有协议报文,其中一部分就是与服务器交换的HTTP消息。此时主窗口与图2相似。8. 在显示筛选编辑框中输入“http”,单击“apply”,分组列表窗口将只显示HTTP消息。9. 选择分组列表窗口中的第一条HTTP消息。它应该是你的计算机发向服务器的HTTP GET消息。当你选择该消息后,以太网帧、IP数据报、TCP报文段、以及HTTP消息首部信息都将显示在分组首部子窗口中。单击分组首部详细信息子窗口中向右和向下箭头,可以最小化帧、以太网、IP、TCP信息显示量,可以最大化HTTP协议相关信息的显示量。(二)HTTP和DNS分析1. HTTP
11、GET/response交互首先通过下载一个非常简单的HTML文件(该文件非常短,并且不嵌入任何对象)。(1) 启动Web 浏览器,然后启动Ethereal(或WireShark)。在窗口的显示过滤规则编辑框处输入“http”,分组列表子窗口中将只显示所捕获到的HTTP消息。(2) 一分钟以后,开始Ethereal(或WireShark)分组捕获。(3) 在打开的Web浏览器窗口中输入以下地址(浏览器中将显示只有一行文字的、非常简单的一个HTML文件):http:/gaia.cs.umass.edu/ethereal-labs/HTTP-ethereal-file1.html (4) 停止分组
12、捕获。根据捕获窗口内容,回答“五、实验报告内容”中的“(二)HTTP和DNS分析”1-6题。2. HTTP 条件GET/response交互(1) 启动浏览器,清空浏览器的缓存(在浏览器中,选择“工具”菜单中的“Internet选项”命令,在出现的对话框中,选择“删除文件”)。(2) 启动Ethereal(或WireShark)。开始Ethereal(或WireShark)分组捕获。(3) 在浏览器的地址栏中输入以下URL: http:/gaia.cs.umass.edu/ethereal-labs/HTTP-ethereal-file2.html浏览器中将显示一个有五行的非常简单的HTML文
13、件。(4) 在你的浏览器中重新输入相同的URL或单击浏览器中的“刷新”按钮。(5) 停止Ethereal(或WireShark)分组捕获,在显示过滤筛选说明处输入“http”,分组列表子窗口中将只显示所捕获到的HTTP消息。根据操作回答“五、实验报告内容”中的“(二)HTTP和DNS分析”7-10题。3. 获取长文件(1) 启动浏览器,将浏览器的缓存清空。(2) 启动Ethereal(或WireShark),开始Ethereal(或WireShark)分组捕获。(3) 在浏览器的地址栏中输入以下URL: http:/gaia.cs.umass.edu/ethereal-labs/HTTP-et
14、hereal-file3.html浏览器将显示一个相当长的美国权力法案文本。(4) 停止Ethereal(或WireShark)分组捕获,在显示过滤筛选编辑框中输入“http”,分组列表子窗口中将只显示所捕获到的HTTP消息。根据操作回答“五、实验报告内容”中的“(二)HTTP和DNS分析”的11-14题。4. 嵌有对象的HTML文档(1) 启动浏览器,将浏览器的缓存清空。(2) 启动Ethereal(或WireShark)。开始Ethereal(或WireShark)分组捕获。(3) 在浏览器的地址栏中输入以下URL: http:/gaia.cs.umass.edu/ethereal-lab
15、s/HTTP-ethereal-file4.html浏览器将显示一个包含两个图片的短HTTP文件(4) 停止Ethereal(或WireShark)分组捕获,在显示过滤筛选说明处输入“http”,分组列表子窗口中将只显示所捕获到的HTTP消息。根据操作回答“五、实验报告内容”中的“(二)HTTP和DNS分析”的15-16题。5. HTTP认证(选作)(1) 启动浏览器,将浏览器的缓存清空。(2) 启动Ethereal(或WireShark)。开始Ethereal(或WireShark)分组捕获。(3) 在浏览器的地址栏中输入以下URL: http:/gaia.cs.umass.edu/ethe
16、real-labs/protected_pages/HTTP-ethereal-file5.html浏览器将显示一个HTTP文件,输入用户名:eth-students和密码:network。(4) 停止Ethereal(或WireShark)分组捕获,在显示过滤筛选说明处输入“http”,分组列表子窗口中将只显示所捕获到的HTTP消息。根据操作回答“五、实验报告内容”中的“(二)HTTP和DNS分析”的17-18题。6. 跟踪DNSnslookup工具允许主机向指定的DNS服务器查询某个DNS记录。如果没有指明DNS服务器,nslookup将把查询请求发向默认的DNS服务器。nslookup的
17、一般格式是:nslookup option1 option2 host-to-find dns-serveripconfig命令用来显示你当前的TCP/IP信息,包括:你的地址、DNS服务器的地址、适配器的类型等信息。如果,要显示与主机相关的信息用命令:ipconfig/all如果查看DNS缓存中的记录用命令:ipconfig/displaydns要清空DNS缓存,用命令:ipconfig /flushdns运行以上命令需要进入MSDOS环境。(开始菜单运行输入命令“cmd”)(1) 利用ipconfig命令清空主机上的DNS缓存。启动浏览器,并将浏览器的缓存清空。(2) 启动Ethereal
18、(或WireShark),在显示过滤筛选规则编辑框处输入:“ip.addr = = your_IP_address”(如:ip.addr= =10.17.7.23)过滤器将会删除所有目的地址和源地址与指定IP地址都不同的分组。(3) 开始Ethereal(或WireShark)分组捕获。(4) 在浏览器的地址栏中输入:http:/www.ietf.org(5) 停止分组捕获。(6) 根据操作回答“五、实验报告内容”中的 “(二)HTTP和DNS分析”19-25题。(7) 开始Ethereal(或WireShark)分组捕获。(8) 在www.mit.edu上进行nslookup(即执行命令:n
19、slookup www.mit.edu)。(9) 停止分组捕获。(10) 根据操作回答“五、实验报告内容” 中的 “(二)HTTP和DNS分析”26-29题。(11) 重复上面的实验,只是将命令替换为:nslookup type=NS mit.edu(12) 根据操作回答“五、实验报告内容” 中的 “(二)HTTP和DNS分析”30-32题。(13) 重复上面的实验,只是将命令替换为:nslookup www.aiit.or.kr bitsy.mit.edu(14) 根据操作回答“五、实验报告内容” 中的 “(二)HTTP和DNS分析”33-35题。五、 实验报告内容(一) Ethereal(
20、或WireShark)的使用1. 列出在第7步中分组列表子窗口所显示的所有协议类型。2. 从发出HTTP GET消息到接收到HTTP OK响应报文共需要多长时间?(在默认的情况下,分组列表窗口中Time列的值是从Ethereal(或WireShark)开始追踪到分组被捕获时总的时间,以秒为单位。若要按time-of-day格式显示Time列的值,需选择View下拉菜单,再选择Time Display Format,然后选择Time-of-day。)3. 你主机的IP地址是什么?你所访问的主页所在服务器的IP地址是什么?4. 写出两个第9步所显示的HTTP消息头部行信息。(二)HTTP和DNS分
21、析1. 你的浏览器向服务器指出它能接收何种语言版本的对象?2. 你的计算机的IP地址是多少?服务器gaia.cs.umass.edu的IP地址是多少?3. 你的浏览器使用的是HTTP1.0,还是HTTP1.1?你所访问的Web服务器所使用HTTP协议的版本号是多少?4. 从服务器向你的浏览器返回response消息的状态代码是多少?5. 你从服务器上所获取的HTML文件的最后修改时间是多少?6. 返回到浏览器的内容一共多少字节?7. 分析你的浏览器向服务器发出的第一个HTTP GET请求的内容,在该请求消息中,是否有一行是:IF-MODIFIED-SINCE?8. 分析服务器响应消息的内容,服
22、务器是否明确返回了文件的内容?如何获知?9. 分析你的浏览器向服务器发出的第二个“HTTP GET”请求,在该请求报文中是否有一行是:IF-MODIFIED-SINCE?如果有,在该首部行后面跟着的信息是什么?10. 服务器对第二个HTTP GET请求的响应消息中的HTTP状态代码是多少?服务器是否明确返回了文件的内容?请解释。11. 你的浏览器一共发出了多少个HTTP GET请求? 一个HTTP GET请求12. 承载这一个HTTP响应报文一共需要多少个TCP报文段? 五个 13. 与这个HTTP GET请求相对应的响应报文的状态代码和状态短语是什么?200 ok 14. 在被传送的数据中一
23、共有多少个HTTP状态行?一行状态行15. 你的浏览器一共发出了多少个HTTP GET请求消息?这些请求消息被发送到的目的地IP地址是多少?4个http get 请求128.119.245.12165.193.123.2181228.119.140.14165.193.140.1416. 浏览器在下载这两个图片时,是串行下载还是并行下载?请解释。并行下载 连续发送了两个请求17. 对于浏览器发出的、最初的HTTP GET请求消息,服务器的响应消息的状态代码和状态短语分别是什么?18. 当浏览器发出第二个HTTP GET请求消息时,在HTTP GET消息中包含了哪些新的头部行?原首部行:GET
24、/ethereal-labs/protected_pages/HTTP-ethereal-file5.html HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-shockwave-flash, */*Accept-Language: zh-cnAccept-Encoding: gzip, deflateUser-Agent:
25、Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)Host: gaia.cs.umass.eduConnection: Keep-Alive新增加的首部行是:Authorization: Basic ZXRoLXN0dWRlbnRzOm5ldHdvcms=19. 定位到DNS查询消息和查询响应报文,这两种报文的发送是基于UDP还是基于TCP的?udp20. DNS查询消息的目的端口号是多少?DNS查询响应消息的源端口号是多少?src port 3788 dst por
26、t 5321. DNS查询消息发送的目的地的IP地址是多少?利用ipconfig命令(ipconfig/all)查看你主机的本地DNS服务器的IP地址。这两个地址相同吗? Dst: 202.194.86.140 src: 10.17.201.62 22. 检查DNS查询消息,它是哪一类型的DNS查询?该查询报文中包含“answers”吗? Type A 不包含answers23. 检查DNS查询响应消息,其中共提供了多少个“answers”?每个answers包含哪些内容?两个answers Name:Type:Class:Time to live:Data length:Addr:24. 考
27、虑一下你的主机随后发送的TCP SYN Segment, 包含SYN Segment的IP分组头部中目的IP地址是否与在DNS查询响应消息中提供的某个IP地址相对应? 没有对应25. 打开的WEB页中包含图片,在获取每一个图片之前,你的主机发出新的DNS查询了吗?没有26. DNS查询消息的目的端口号是多少?DNS查询响应消息的源端口号是多少?53 53 27. DNS查询消息发送的目的地的IP地址是多少?这个地址是你的默认本地DNS服务器的地址吗? Dst: 202.194.86.140 yes28. 检查DNS查询消息,它是哪一类型的DNS查询?该查询消息中包含“answers”吗? 29
28、. 检查DNS查询响应消息,其中提供了多少个“answers”?每个answers包含哪些内容?30. DNS查询消息发送的目的地的IP地址是多少?这个地址是你的默认本地DNS服务器的地址吗?31. 检查DNS查询消息,它是哪一类型的DNS查询?该查询报文中包含“answers”吗?32. 检查DNS查询响应消息,其中响应消息提供了哪些MIT名称服务器?响应消息提供这些MIT名称服务器的IP地址了吗?33. DNS查询消息发送的目的地的IP地址是多少?这个地址是你的默认本地DNS服务器的地址吗?如果不是,这个IP地址相当于什么?34. 检查DNS查询消息,它是哪一类型的DNS查询?该查询报文中
29、包含“answers”吗?35. 检查DNS查询响应消息,其中提供了多少个“answers”?每个answers包含哪些内容?34实验二 熟悉Win2000网络环境及相应的网络服务一、 实验目的及任务1、 熟悉对等网络的组建2、 熟悉Win2000网络环境及相应的网络服务二、 实验设备计算机(操作系统:windows2000server)、网卡、交换机、网线各若干。三、 实验步骤1、对等网的组建(1) 实验准备A. 设备准备:准备必需的设备,如计算机、网卡和网络软件等。B. 数据准备:包括拟定计算机和打印机的名称、网卡的类型、参数与所使用的协议及参数。C. 物理连接:关闭计算机的电源,打开机箱
30、,将网卡插入适当的扩展槽中,拧紧螺丝,再重新安装好机箱盖。利用带RJ-45头的双绞线将各计算机一端网卡连接到交换机上,将打印机连接到一台计算机上。(2) 添加网络组件A. 安装网络适配器B. 添加网络协议:TCP/IP协议(将互连计算机的IP地址设置在同一子网内)。(3) 标识计算机设置计算机的名称和工作组名。(4) 设置可共享的网络资源共享资源可以是文件夹,或打印机。2、WEB与 FTPWindows 2000 Web服务器的构建,分为Web站点规划建设与配置管理两个步骤。规划设计的主要任务是明确具体的Web服务需求,以及Web站点的组织形式。如何规划设计Web站点超出了本实验的范围,在网络
31、操作系统Windows 2000 Server上配置与管理Web站点为本实验的主要内容。1) IIS的安装与配置(1) 通过“控制面板”的“添加/删除程序”,在没有安装有“Internet信息服务 (IIS)”的计算机上安装“Internet信息服务(IIS)” Windows组件。注意,需要安装“World Wide Web服务器”和“文件传输协议(FTP)服务器”。(2) World Wide Web服务器的配置及使用IIS成功安装后,在“Internet信息服务”中自动建立了一个默认的Web站点。把个人主页放在该站点的主目录中,即可使用默认的Web站点向其他用户提供服务。本实验要求创建一
32、个新的Web站点,名字为:MyWebsite。(3) WWW服务器的配置单击“开始”按钮,选择“程序”-“管理工具”,在级联菜单中单击“Internet服务管理器”,启动“Internet信息服务”。单击右键,在弹出菜单中选择“新建”-“Web站点”,启动“Web站点创建向导”。单击“下一步”,按向导提示填写以下内容: Web站点的说明:即新建Web站点的名字:MyWebsite; IP地址和端口号:Web服务的缺省端口号是80,默认Web站点占用此端口。设置MyWebsite端口号为82。要求不与其他进程的端口号发生冲突。 主目录:主目录被映射到站点的域名或服务器名。 访问权限:限定用户对W
33、eb站点的访问权限,包括读、写以及浏览目录等。操作完成后,在Internet信息服务窗口中产生一个新的Web站点MyWebsite。右键单击该站点,在弹出菜单中选择“启动”,启动该站点。再选择“属性”,出现Web站点的属性对话框,如图1所示。在“文档”选项卡中,选择启用默认文档,并添加默认文档,如index.htm。图 1 Web站点属性(4) 访问WWW服务器启动Internet Explorer,在“地址”栏中填写:http:/localhost:82,访问刚刚创建的MyWebsite。2) 文件传输协议(FTP)服务器的配置与使用(1) FTP服务器配置通过“Internet服务管理器”
34、创建一个新的FTP站点MyFtpsite,方法与创建WEB站点相似,不再重述。启动Ftp站点MyFtpsite站点。选择“属性”,出现FTP站点属性对话框,如图2所示。 图2 FTP站点属性 图 3 虚拟目录属性利用“安全帐号”选项卡可以设置是否允许匿名连接、匿名连接时的用户名和密码、添加或删除FTP站点操作员等。单击MyFtpsite站点,利用“操作”菜单项中的“新建”/“虚拟目录”命令可以创建该站点的虚拟目录。右单击虚拟目录,在快捷菜单中,选“属性”命令,可修改虚拟目录属性。如图3所示。(2) FTP服务使用以匿名用户或站点操作员身份登录MyFtpsite站点,如图4图所示。使用常用的FT
35、P命令进行文件的上传与下载操作。图4 FTP登录3、DNS和DHCP服务的安装、配置与使用1) DNS与DHCP服务的安装通过“添加/删除程序”的安装“Windows组件”,在“网络服务”中,选择“动态主机配置协议(DHCP)”和“域名服务系统(DNS)”。2) DNS服务的配置单击“开始”/“程序”/“管理工具”/“DNS”,出现“DNS”窗口,如图5所示。右键单击“正向搜索区域”,选择“新建区域”命令,出现“新建区域向导”,按向导的提示进行操作。在建立区域的过程中,需选择“区域类型”,如图6所示;输入区域的名称,如图7所示;新建区域文件,如图8所示。在“DNS”窗口中,右键单击新建的区域,
36、在快捷菜单中,选择“新建主机”命令,出现如图9。所示对话框。输入主机名、IP地址。单击“添加主机”按钮。图中所示主机的域名为:3) DNS服务的使用组建对等网络,在DNS服务器的正向搜索区域中,为网络中的主机添加记录,具体步骤如2)所述。设置客户机TCP/IP属性的DNS服务器为安装好DNS服务器计算机的IP地址。启动Internet Explorer,输入http:/主机域名,即可访问该主机提供的web服务。注意:此时Web服务需要已经启动,并且工作于80端口。4) DHCP服务的配置单击“开始”/“程序”/“管理工具”/“DHCP”,出现“DHCP”窗口,如图10所示。右键单击DHCP服务
37、器名,在快捷菜单中选择“新建作用域”命令,出现“新建作用域向导”,按向导提示建立作用域。在此过程中,输入此作用域分配的地址范围、子网掩码,如图11所示;添加排除地址范围,如图12所示;添加客户使用的路由器的IP地址,如图13所示;输入DNS服务器名、IP地址、域名,如图14所示。 图5 DNS主界面 图6 区域类型 图7 输入域名 图8 创建区域文件 图9 DNS新建主机 图10 DHCP 图11 设定用于分配的地址范围 图12 设置不参与分配的地址范围 图13 添加路由器信息 图14添加DNS服务器信息5) DHCP服务的使用配置客户计算机“TCP/IP协议”属性,在“IP地址”选项卡中选择
38、“自动获取IP地址”,在“WINS”选项卡中,选择“使用DHCP进行WINS解析”。此时,客户端即可使用DHCP服务自动获取IP地址。在客户机的 “命令提示符”下,输入ipconfig/all命令即可查看通过DHCP服务器获取的IP地址、默认路由器、DNS服务器等信息。四、实验报告内容:1、 总结实验过程中遇到的问题及解决方法;2、 列出所建Web服务器的名称、IP地址及其主目录的目录结构。3、 列出所建DNS区域名称,以及在该区域内增加的记录。4、 列出客户机通过DHCP获取的IP地址、默认网关、DNS服务器等信息。实验三 Web服务器的实现一、 实验目的及任务1、实验目的熟悉简单网络的搭建
39、与基本配置;熟悉socket、多线程编程;熟悉JDK编程工具的基本使用;熟悉HTTP协议;熟悉Web服务器的基本工作原理和配置。2、实验任务(1)以JDK为开发工具,利用Socket通信机制实现一个多线程的WEB服务器,该服务器具有以下功能:l 能够并行服务于多个请求。l 对于每个请求,显示接收到的HTTP请求报文的内容,并产生适当的响应(若找到用户请求对象,则返回该对象。否则发送一个包含适当提示信息的响应消息,从而可以在浏览器窗口中显示差错信息。)(2)搭建一个简单的网络环境,调试 web服务器程序。二、 实验性质综合性实验。三、 实验环境操作系统:Windows2000 server 开发
40、工具:JDK或其他开发工具实验设备:交换机(一台)、计算机(两台)、网线若干四、 实验相关知识点(本课程综合或多课程综合)1、 网络基本原理(如:HTTP协议、Web服务器、Socket、TCP、UDP等)2、 网络服务器基本配置(简单C/S网络的组建、web服务器的基本配置等)3、 程序设计(socket编程、多线程程序设计等)五、 实验实施步骤1、 开发程序2、 搭建简单的C/S网络3、 配置并测试web服务器程序六、 实验报告内容1、写出实现“一、实验要求”中所述功能的Web服务器程序的结构框图。2、写出实现“一、实验要求”中所述功能的Web服务器程序的代码。3、总结程序设计、调试中出现
41、的问题及其解决办法。4、实验心得。附件一:Java的多线程编程一、理解多线程多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个单核CPU,那么真正的“同时”是不可能的。但是由于CPU的处理速度非常快,用户感觉好像自己的程序连续运行一样。因此我们也不用关心它,只需要设想各个线程
42、是同时执行即可。多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度,同步等问题,将在以后探讨。二、在Java中实现多线程为了创建一个新的线程,我们需要做些什么?很显然,我们必须指明这个线程所要执行的代码,而这就是在Java中实现多线程我们所需要做的一切。作为一个完全面向对象的语言,Java提供了类 java.lang.Thread 来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程。Thread 类最重要的方法是 run() ,它为Thread 类的方法 start() 所调用,提供我们的线程所
43、要执行的代码。为了指定我们自己的代码,只需要覆盖它。1、方法一:继承 Thread 类,覆盖方法 run()我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可。下面是一个例子:public class MyThread extends Thread int count= 1, number;public MyThread(int num) number = num;System.out.println(创建线程 + number);public void run() while(true) System.out.println(线程 + number + :计
44、数 + count);if(+count= 6) return;public static void main(String args) for(int i = 0; i 5; i+) new MyThread(i+1).start();这种方法简单明了,符合大家的习惯,但是,它也有一个很大的缺点,那就是如果类已经从一个类继承(如小程序必须继承自 Applet 类),则无法再继承 Thread 类(Java不允许多重继承,即一个类的父类只能有一个),这时如果又不想建立一个新的类,应该怎么办呢?不妨来探索一种新的方法:不创建 Thread 类的子类,而是直接使用它,那么我们只能将我们的方法作为参
45、数传递给 Thread 类的实例。这有点类似回调函数。但是 Java 没有指针,我们只能传递一个包含这个方法的类的实例。那么如何限制这个类必须包含这一方法呢?使用接口。Java 提供了接口 java.lang.Runnable 来支持这种方法。2、方法二:实现 Runnable 接口Runnable 接口只有一个方法 run(),我们声明自己的类实现 Runnable 接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是 Runnable 接口并没有任何对线程的支持,我们还必须创建 Thread 类的实例,这一点通过 Thread 类的构造函数public Thread(
46、Runnable target);来实现。下面是一个例子:public class MyThread implements Runnable int count= 1, number;public MyThread(int num) number = num;System.out.println(创建线程 + number);public void run() while(true) System.out.println(线程 + number + :计数 + count);if(+count= 6) return;public static void main(String args) for(int i = 0; i 5; i+) new Thread(new MyThread(i+1).start();