您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 计算机网络编程实验报告(实现FTP)
计算机网络编程实验实验题目:实现FTP学生姓名:学生学号:学生班级:指导老师:一、实验目的1.掌握FTP协议2.掌握FTP的主动模式和被动模式二、实验原理1.FTP协议原理文件传输协议(FTP)作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP的目标是提高文件的共享性和可靠高效地传送数据。在传输文件时,FTP客户端程序先与服务器建立连接,然后向服务器发送命令。服务器收到命令后给予响应,并执行命令。FTP协议与操作系统无关,任何操作系统上的程序只要符合FTP协议,就可以相互传输数据。FTP使用2个端口,一个数据端口和一个命令端口(也叫做控制端口)。这两个端口一般是21(命令端口)和20(数据端口)。控制Socket用来传送命令,数据Socket是用于传送数据。每一个FTP命令发送之后,FTP服务器都会返回一个字符串,其中包括一个响应代码和一些说明信息。其中的返回码主要用于判断命令是否被成功执行了。2.FTP工作原理(1)FTP架构图:FTP协议的两大组成部分就是FTP服务器和FTP客户端。而FTP服务器起到了中转站和存储中心的作用,用来传递、保存和分发文件给各个客户端。则FTP架构图如下:(2)文件上传与下载:FTP服务器内所存储的文件大多都是从用户的客户机程序中利用FTP协议传输拷贝到远程主机上FTP服务器程序后进行存储的,这个过程被称为上载(upload,也叫上传);同理,用户将文件从FTP服务器中拷贝并传输到自己的终端机的过程就是下载(download)。上传和下载过程是我们所能用到的常见的操作过程。文件的上传与下载有两种模式,一种是Standard,即PORT方式,是一种主动与服务器连接的方式;另一种是Passive,即PASV方式,是一种被动和服务器连接的方式。Standard模式FTP的客户端发送PORT命令到FTP服务器:主动模式分析:步骤一:建立命令通道连接如上图,客户端会随机取一个大于1024以上的端口(portAA)来与FTP服务器端的port21实现连接。实现连接后客户端便可以通过这个连接来对FTP服务器执行命令,查询文件名、下载、上传等命令都是利用这个通道来执行的。步骤二:通知FTP服务端使用Active且告诉连接的端口号FTP服务器端的端口21号主要用在命令的执行。客户端在需要数据时,会告知服务器端要用什么方式连接,若是主动模式连接,客户端会随机启用一个端口(portBB),且通过命令通道告知FTP服务器,并等待FTP服务器端的连接。步骤三:FTP服务端主动向客户端连接FTP服务器由命令通道了解客户端的需求后,会主动由port20向客户端portBB连接。此时FTP的客户端与服务器建立了两条连接,分别用于命令的执行和数据的传输。而默认FTP服务端使用主动连接端口就是port20。这样就建立起“命令”与“数据传输”两个通道。Passive模式FTP的客户端发送PASV命令到FTP服务器:被动模式分析:步骤一:客户端与服务器建立命令通道通过三次握手建立命令通道。步骤二:客户端发起PASV的连接要求当使用数据通道命令时,客户端可通过命令通道发起PASV的被动式连接要求,并等待服务器的回应。步骤三:FTP服务器启动数据端口,并通知客户端连接若使用的FTP服务器是能够处理被动式连接的,此时FTP服务器会先启动一个监听端口。这个端口号码可以是随机的,也可以自定义某个范围的端口。然后FTP服务器会通过命令通道告知客户端已经启动的端口(portPASV),并等待客户端的连接。步骤四:客户端随机取用大于1024的端口进行连接客户端会随机取用一个大于1024端口来进行对FTP服务器portPASV连接。如果一切都顺利,那么FTP数据就可以通过portBB和portPASV来传送了。(3)FTP命令:FTP命令都是由三个或四个大写ASCII码字符组成的。(4)FTP应答:服务器为了对数据传输的请求和过程进行同步(TCP要求的),TCP要求对接收到的数据都要进行确认;为了使用户了解服务器的状态,用户可以根据收到的状态信息对服务器是否正常执行了有关操作进行判断。三、实验方法1.拓扑图2.实验环境Windows10,MyEclipse20143.程序语言Java4.版本型号为X555LF的微机上Windows系统MyEclipse2014编译环境四、实验内容1.程序源代码、注释packageinternet;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.io.PrintWriter;importorg.apache.commons.net.PrintCommandListener;importorg.apache.commons.net.ftp.FTP;importorg.apache.commons.net.ftp.FTPClient;importorg.apache.commons.net.ftp.FTPFile;importorg.apache.commons.net.ftp.FTPReply;publicclassFTPclient{publicstaticvoidmain(String[]args){FTPclientmain=newFTPclient();FTPClientftp=newFTPClient();//设置一个监听ftp.addProtocolCommandListener(newPrintCommandListener(newPrintWriter(System.out)));try{ftp.connect(192.168.160.4,21);intreply=ftp.getReplyCode();if(!FTPReply.isPositiveCompletion(reply)){ftp.disconnect();System.out.println(FTPserverrefusedconnection);}//登录ftp.login(ftp,123);main.uploadFile(ftp);main.downloadFile(ftp);//退出ftp.logout();}catch(IOExceptione){e.printStackTrace();if(ftp.isConnected()){try{ftp.disconnect();}catch(Exceptione2){}}}}//上传文件privatevoiduploadFile(FTPClientftp)throwsIOException{ftp.setFileType(FTP.BINARY_FILE_TYPE);ftp.enterLocalActiveMode();//主动模式InputStreaminput=newFileInputStream(G://file1.txt);//将文件上传到ftp站点ftp.storeFile(upload.txt,input);input.close();}//下载文件privatevoiddownloadFile(FTPClientftp)throwsIOException{ftp.setFileType(FTP.BINARY_FILE_TYPE);ftp.enterLocalPassiveMode();//被动模式OutputStreamoutput=newFileOutputStream(d:/download.txt);//下载文件到本地ftp.retrieveFile(file2.txt,output);output.close();}}2.实验结果截图客户端:服务端:3.发送了哪些包?(抓包分析)抓到的包如下:具体分析如下:客户端与服务端的交互如下:通过三次握手建立连接:登录FTP:通过主动模式上传文件:通过被动模式下载文件:退出FTP服务器:五、实验体会通过本次实验,对FTP协议以及对FTP的两种模式PORT和PASV模式下的上传文件和下载文件有了深刻地体会。
本文标题:计算机网络编程实验报告(实现FTP)
链接地址:https://www.777doc.com/doc-7050723 .html