文件传输协议

文件传输协议英文File Transfer Protocol,简称为FTP)是用于在网络上进行文件传输的一套标准协议。它属于网络传输协议应用层

FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIMEUnicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登陆进程。

 

概述

FTP服务一般运行在2021两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流,空闲很长时间后,客户端的防火墙,会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话,会被防火墙断开;传输会产生一些错误。

FTP实现的目标:

  1. 促进文件的共享(计算机程序或数据)
  2. 鼓励间接或者隐式的使用远程计算机
  3. 向用户屏蔽不同主机中各种文件存储系统(File system)的细节
  4. 可靠和高效的传输数据

缺点:

  1. 密码和文件内容都使用明文传输,可能产生不希望发生的窃听。
  2. 因为必须开放一个随机的端口以创建连接,当防火墙存在时,客户端很难过滤处于主动模式下的FTP流量。这个问题,通过使用被动模式的FTP,得到了很大解决。
  3. 服务器可能会被告知连接一个第三方计算机的保留端口。
  4. 此方式在需要传输文件数量很多的小文件时,性能不好

FTP虽然可以被终端用户直接使用,但是它是设计成被FTP客户端程序所控制。

运行FTP服务的许多站点都开放匿名服务,在这种设置下,用户不需要帐号就可以登录服务器,默认情况下,匿名用户的用户名是:"anonymous"。这个帐号不需要密码,虽然通常要求输入用户的邮件地址作为认证密码,但这只是一些细节或者此邮件地址根本不被确定,而是依赖于FTP服务器的配置情况。

FTP具有很强的兼容性,可以在不同的操作系统之间通信,可以使用不同的字符集、不同的文件结构以及不同的文件格式。

FTP使用三种传输方式:

流方式:数据作为连续的字节流从FTP交付给TCP

块方式:数据按块从FTP交付给TCP

压缩方式:将数据压缩后进行传送

 

主动和被动模式

FTP有两种使用模式:主动和被动。主动模式要求客户端和服务器端同时打开并且监听一个端口以创建连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。

一个主动模式的FTP连接创建要遵循以下步骤:

  1. 客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,该tcp连接的来源地端口为客户端指定的随机端口x,目的地端口(远程端口)为服务器上的21号端口。
  2. 客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。
  3. 服务器打开20号源端口并且创建和客户端数据端口的连接。此时,来源地的端口为20,远程数据(目的地)端口为(x+1)。
  4. 客户端通过本地的数据端口创建一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经创建好了一个连接。

     

FTP和网页浏览器

大多数最新的网页浏览器和文件管理器都能和FTP服务器创建连接。这使得在FTP上通过一个接口就可以操控远程文件,如同操控本地文件一样。这个功能通过给定一个FTPURL实现,形如ftp://<服务器地址>(例如,ftp://ftp.gimp.org )。是否提供密码是可选择的,如果有密码,则形如ftp://<login>:<password>@<ftpserveraddress>。大部分网页浏览器要求使用被动FTP模式,然而并不是所有的FTP服务器都支持被动模式。

 

架设FTP服务器

一、Windows Server 2008 R2

Windows Server 2008 R2 中自带了FTP Server 7.5,可单独下载安装。

FTP 7.5 for IIS 7.x (x86)

FTP 7.5 for IIS 7.x (x64)

FTP 7.5 新特性:原文地址

IIS 7.x集成(IIS 7.0IIS 7.5):FTP 7.5已经作为IIS 7.x的一部分被安装,便于集中管理、维护。

对互联网标准更好、更安全的支持:支持SSL上的FTPIPv6UTF8

共享宿主改进:可以将FTP架设在已经存在的站点,多个FTP使用同一IP

改进的日志与功能性支持:提供更加详细的日志记录。

可扩展性增强:可以编写自定义的用户验证机制。

 

下面在VirtualBox虚拟机中架设FTP服务器。宿主机IP:192.168.0.100,虚拟机IP:192.168.0.101,虚拟网卡采用桥连模式。

1.1、打开Server Manager,在角色中点击【添加角色】:

 

1.2、选中【Web Server(IIS)】,点击【下一步】:

 

1.3、点击【下一步】:

 

1.4、在开发服务器上,建议全部选中,在生产服务器上,则酌情选择,点击【下一步】:

 

1.5、点击【安装】:

 

1.6、安装成功后关闭向导:

 

1.7、开始à运行,输入:inetmgr,打开IIS 管理器:

 

1.8、可以看到FTP 7.5包含的选项:

 

1.9、新建一个FTP站点:

 

1.10、输入名称和物理路径,点击【下一步】:

 

1.11、IP不限制,默认端口21,不需要SSL证书,点击【下一步】:

 

1.12、设置权限,点击【完成】:

 

1.13、在浏览器中输入FTP服务器地址,若无法访问请检查宿主机与虚拟机的防火墙设置:

 

1.14、使用命令行访问FTP

最常用的命令有:

ls 列出远程机的当前目录

cd 在远程机上改变工作目录

lcd 在本地机上改变工作目录

ascii 设置文件传输方式为ASCII模式

binary 设置文件传输方式为二进制模式

close 终止当前的ftp会话

hash 每次传输完数据缓冲区中的数据后就显示一个#号

get(mget) 从远程机传送指定文件到本地机

put(mput) 从本地机传送指定文件到远程机

open 连接远程ftp站点

quit 断开与远程机的连接并退出ftp

? 显示本地帮助信息

 

输入ftp 主机名/IP登录:

 

由于设置为允许匿名访问,故可以用匿名账户登录(用户名:anonymous,密码任意):

 

查看所有目录和文件:

 

下载一个文件到本地:

 

输入bye退出登录:

 

1.15、使用FTP客户端连接FTP服务器

我使用的FileZilla:

 

可以在WireShark中抓到数据包:

 

二、Ubuntu 11.04

Linux下有很多FTP软件,这里以Ubuntu下面的Pure-FTPd为例来搭建一下Linux中的FTP Server。

Pure-FTPd是一个基于BSD协议授权的开源FTP Server,官方主页:http://www.pureftpd.org,功能全面,具体功能可以查看文档。

安装Pure-FTPd

 

由于Ubuntu源里的包太老了,故我选择直接下载源代码编译安装。在http://download.pureftpd.org/pub/pure-ftpd/releases/下载最新稳定版,我下载的是pure-ftpd-1.0.32.tar.gz

 

 

 

解压缩:tar zxvf pure-ftpd-1.0.32.tar.gz

 

 

cd 压缩后的目录

 

 

./configure

 

 

make

 

 

sudo make install

 

 

 

启动FTP Server:

 

 

sudo /usr/local/sbin/pure-ftpd &

 


 

连接测试:

 

 

ftp localhost

 

				

 

查看当前目录下的目录和文件:

 

				

 

在Windows中用命令行连接:

 

 

Pure-FTPd有很多命令及参数配置,具体用法请参阅官方文档。

 


 

小结:

 

 

FTP作为十分常用的文件传输协议,在企业中有着广泛的引用,各平台下也提供了大量的Server、Client。在使用中除了关注传输速度之外,传输安全性也是必须考虑的。

 

 

以下引用维基百科中的常用FTP Server、Client,根据需要选用:

 

 

FTP服务器列表

维基百科,自由的百科全书

以下是FTP服务器的列表。

[编辑]图形界面

  • Bullet Proof FTP Server [1]
  • CesarFTP [2]
  • Cerberus FTP Server [3]
  • Gene6 FTP Server [4]
  • GuildFTPd [5]
  • PureFTPd [6]
  • RaidenFTPD [7]
  • Serv-U FTP Server [8]
  • War FTP Daemon [9]

[编辑]文字界面

  • AnomicFTPD [10]
  • BSD ftpd
  • glFTPd [11]
  • ProFTPd
  • vsftpd [12]
  • wu-ftpd [13]

 

FTP客户端列表

维基百科,自由的百科全书

以下是FTP客户端的列表。

[编辑]图形界面

  • AnyClient [1]
  • Core FTP [2]
  • CrossFTP [3]
  • CuteFTP
  • DeluxeFTP
  • FileZilla
  • FlashFXP
  • FTP Surfer [4]
  • FTPRush [5]
  • gFTP
  • OneButton FTP [6]
  • SmartFTP [7]
  • Total Commander
  • WISE-FTP
  • WS FTP [8]
  • 8uftp [9]

[编辑]文字界面

  • lftp
  • NcFTP
  • tnftp [10]
  • Wget(只能下传)

[编辑]只支持SFTP/SCP

  • Sftp for win32 [11]
  • WinSCP [12]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

36.LEN() 函数

LEN() 函数 LEN 函数返回文本字段中值的长度。 SQL LEN() 语法 SELECT LEN(column_name) FROM table_name SQL LEN() 实例 我们拥有下面这个 "Persons" 表&#xff1a; IdLastNameFirstNameAddressCity1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York…

【python学习】——为exe软件创建快捷方式;实现软件自启动

目录 1、为exe创建快捷方式 2、实现软件自启动 3、完整代码 4、结果展示 1、为exe创建快捷方式 利用winshell库的CreateShortCut函数进行创建 【python学习】——获取桌面路径&#xff0c;获取系统盘符&#xff0c;获取电脑用户名&#xff0c;获取软件自启动存放目录_有情怀…

dedecms如何调用当前栏目的子栏目及子栏目文章

前面ytkah谈到了 dedecms调用当前栏目的子栏目怎么操作&#xff0c;有的朋友会问如果再增加一个调用子栏目文章的需求&#xff0c;即调用当前栏目的子栏目及子栏目文章&#xff0c;这个有办法实现吗&#xff1f;这时就要涉及到另外两个标签的调用了&#xff0c;dede:channelart…

控制面板项 .cpl 文件说明

控制面板项 .cpl 文件说明appwiz.cpl 程序和功能、卸载或更改程序bthprops.cpl 蓝牙控制面板desk.cpl 屏幕分辨率Firewall.cpl WINDOWS防火墙hdwwiz.cpl 设备管理器igfxcpl.cpl 英特尔图形和…

vxWorks下常用的几种延时方法

在应用编程的时候&#xff0c;通常会碰到需要一个任务在特定的延时之后执行一个指定的动作&#xff0c;如等待外设以确保数据可靠&#xff0c;控制扬声器发声时间以及串口通信超时重发等。这就需要利用定时器机制来计量特定长度的时间段。 vxWorks作为实时嵌入式系统&#xff0…

【pyqt5学习】——窗口最小化至托盘、取消任务栏图标

目录 1、最小化至托盘 1&#xff09;重写系统托盘类&#xff0c;设置托盘图标等属性 2&#xff09;将具体的窗口放入托盘 2、取消任务栏界面图标 3、问题汇总 1&#xff09;退出后托盘图标还是存在&#xff0c;没有消失 2&#xff09;最小化后左下角会出现 窗口 3&#…

标准库类型String,Vector

string对象中每个字符的处理&#xff1a; 要用到 for(声明:表达式) 语句 比如简单的打印string str中每一个字符 --- string str("hello world!!!"); for(auto c: str)cout<<c<<endl; (ps:这里auto 的意思是让编译器自己来决定c变量的类型) --- 再举一…

React 是怎样炼成的

本文主要讲述 React 的诞生过程和优化思路。 内容整理自 2014 年的 OSCON - React Architecture by vjeux&#xff0c;虽然从今天&#xff08;2018&#xff09;来看可能会有点历史感&#xff0c;但仍然值得学习了解。以史为鉴&#xff0c;从中也可以管窥 Facebook 优秀的工程管…

HOJ 1640 Mobile Phone

题意&#xff1a;有一个n*n的矩阵&#xff0c;op1时&#xff0c;在(x,y)增加值z&#xff0c;op2时&#xff0c;求以(x1,y1)和(x2,y2)构成的矩阵的和。 思路&#xff1a;二维线段树。 代码&#xff1a; 1 #include<stdio.h>2 #include<string.h>3 const int N1111;4…

vxWorks多任务编程初探-上

进程&#xff08;Process&#xff09;是具有一定独立功能的程序关于某个数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的一个独立单位。程序只是一组指令的有序集合&#xff0c;它本身没有任何运行的含义&#xff0c;只是一个静态实体。而进程则不同&#xff…

【pyqt5学习】——重写窗口右上角关闭事件closeEvent()

目录 1、法一&#xff1a;设置中文按钮 2、法二&#xff1a;不设置中文按钮 pyqt5 关闭按钮显示提示信息_Marvin_Xavier的博客-CSDN博客_pyqt 关闭按钮https://blog.csdn.net/marwenx/article/details/107226531 1、法一&#xff1a;设置中文按钮 def closeEvent(self, even…

感动要哭 撸了一个半小时的重载预算符高精

撸了一个半小时代码&#xff0c;没玩守望&#xff08;垃圾游戏毁我青春五个金牌都带不起队友&#xff09;最后编译出312个错误。吓我&#xff0c;然而改了几个地方就直接过了直接过了直接过了&#xff0c;目前还是不明白ostream&#xff0c;istream的用处&#xff0c;上网才搞定…

LVDS DP等显示器接口简介

LVDS 产品传输速率从几百Mbps到2Gbps。它是电流驱动的&#xff0c;他通过在接收端放置一个负载而得到的电压&#xff0c;当电流正向流动&#xff0c;接收端输出为1&#xff0c;反之为0&#xff0c;它的摆幅250mV-450mV. lvds 即低压差分信号传输&#xff0c;是一种满足高性能传…

http协议相关内容

二、HTTP协议1、协议&#xff1a;共同遵守的规则。2、网络协议有&#xff1a;TCP&#xff08;有三次握手机制&#xff09;/IP&#xff1a;传输控制协议/地址协议&#xff0c;SMTP&#xff1a;简单邮件传输协议&#xff0c;FTP&#xff1a;文件传输协议&#xff0c;http&#xf…

使用XmlTextReader 读取XML

XmlTextReader 限于只向前的读取 XmlTextReader 的技术类似于读取其他任何文件 首先打开文件&#xff0c;然后从文件中读取信息,最后关闭文件. 每次从文件中读取信息时&#xff0c;他在文件中的位置都会前移.到达文件结尾的时候就什么都不读了。 1 创建XmlTextReader对象 …

C#中ComboBox动态绑定赋值

http://www.crifan.com/csharp_combobox_data_dynamic_binding/ C#中&#xff0c;已有一个List&#xff0c;想要动态的&#xff0c;绑定到ComboBox中。 【解决过程】 1.参考&#xff1a; c# winform comboBox动态绑定数据 去试试代码&#xff1a; cmbSubCategory.DataSource g…

【pyqt5学习】——日历控件calendarWidget设置单元格格式(前景、背景)、日历控件属性编辑

目录 0、导入库 1、返回日历选中的日期 2、更改日历控件周几&#xff08;比如一个月属于周一的日期&#xff09;的所有格子属性 3、更改日历控件单个格子&#xff08;指定日期&#xff09;属性 4、日历格子属性 5、信号——clicked() 6、成果展示 0、导入库 from PyQt5.Q…

linux内核数据结构之链表

1、前言 最近写代码需用到链表结构&#xff0c;正好公共库有关于链表的。第一眼看时&#xff0c;觉得有点新鲜&#xff0c;和我之前见到的链表结构不一样&#xff0c;只有前驱和后继指针&#xff0c;而没有数据域。后来看代码注释发现该代码来自linux内核&#xff0c;在linux源…

为什么使用 XML

为什么使用 XML&#xff1f; Web 使我们能够与任何地方的任何人通讯。广泛接受的标准&#xff08;这对完全使用 Web 的潜力是至关重要的&#xff09;允许 Web 在多种交互操作的技术层上通讯。一个重要层是可视化显示和用户界面&#xff0c;例如 HTML、GIF 和 JScript(TM) 之类的…

bzoj1084: [SCOI2005]最大子矩阵

dp。转移方程在代码里。。转载于:https://www.cnblogs.com/invoid/p/5451202.html