文件传输协议

文件传输协议英文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,一经查实,立即删除!

相关文章

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

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

vxWorks下常用的几种延时方法

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

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

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

React 是怎样炼成的

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

【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…

【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源…

【bug修复】you must feed a value for placeholder tensor ‘Placeholder‘ with dtype float解决方案

最近碰到了这个you must feed a value for placeholder tensor Placeholder with dtype float and shape的问题&#xff0c;字面意思很好理解&#xff0c;就是没有给Placeholder赋值&#xff0c;可是我明明赋值了&#xff0c;百度了许多&#xff0c;也都是让我检查是否赋值以及…

动态代理3之代理工厂实现

动态代理的深化&#xff1a;承接动态代理2( 对 上级实例进行 深化)&#xff0c;也就是 spring 的前身 &#xff08;必须掌握&#xff09;实例&#xff1a; 文件说明&#xff1a;1.有一个Waiter接口&#xff0c;该接口有一个 server() 、ShouQian()方法 2.有一个 Waiter接口的实…

【bug修复】解决ValueError: Tensor(“Variable:0“ dtype=float32_ref) must be from the same graph as Tensor(“R

bug:描述 在进行tensorflow进行搭建CNN网络时&#xff0c;在定义CNN的py文件中调用cnn模型&#xff0c;运行正常&#xff0c;但是在其他py文件中进行时就出现问题 ValueError: Tensor(“Variable:0” dtypefloat32_ref) must be from the same graph as Tensor(“Reshape:0”,…

Linux 图片传输功能c/c++(初版)

由于深度学习任务的需要&#xff0c;要在程序里面嵌入一个module。 这个module 的功能是接收来自ios客户端的图片。并且传送给深度学习分类器进行处理。 于是看了看各种各样的 module 实现方案。 先是用IO函数把图片以数组的方式存起来。 再和服务器建立连接&#xff0c;socket…

Val编程-val系列编程思想

利用Val语言可以编写出各种各样的应用程序。正如windows phone面临的窘境一样&#xff0c;受众太小&#xff0c;市场不大。应用程序不多&#xff0c;所以也谈不上成熟。国内的应用程序基本上就是简单的小程序&#xff0c;谈不上什么编程思想。国外许多都是基于kernel的而衍生出…

【pyqt5学习】——bug修复,利用qt资源库qrc文件进行背景图像设置,不显示图像

目录 bug描述 bug分析 bug解决 bug描述 利用下面文章的方法进行资源设置后&#xff0c;有的显示了有的没有显示 【pyqt5学习】——pyqt5中.qrc资源文件的创建与编写_有情怀的机械男的博客-CSDN博客_python qrc目录一、说明二、安装pyqt5以及相关工具&#xff08;pyqt5、pyuic…

Datalore:用于机器学习可视化的新Web方案!

前不久&#xff0c;JetBrains团队发布了Datalore&#xff0c;这是一款基于云的web应用程序&#xff0c;用于构建机器学习模型并在Python中创建丰富的可视化。最新的测试版本旨在简化构建机器学习模型的流程&#xff0c;并帮助开发人员进行数据分析。由于Datalore的智能编码辅助…

CSS魔法堂:重拾Border之——图片作边框

前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊&#xff0c;一想到终于不用再添加额外元素来模拟圆角了&#xff0c;但发现border-radius还分水平半径和垂直半径&#xff0c;然后又发现border-top-left/right-radius的水平半径之和大于元素宽度时&#xff0c;实际值会…

共享内存简介和mmap 函数

一、共享内存简介 共享内存区是最快的IPC形式&#xff0c;这些进程间数据传递不再涉及到内核&#xff0c;换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。 即每个进程地址空间都有一个共享存储器的映射区&#xff0c;当这块区域都映射到相同的真正的物理地址空…

【pyqt5学习】——QToolTip,QLabel控件,伙伴关系

目录 0、学习资源 1、给控件设置提示信息——QToolTip 2、QLabel控件&#xff08;显示图像、设置超链接、信号绑定&#xff09; 3、QLabel伙伴关系 1&#xff09;代码 2&#xff09;效果 3&#xff09;知识点addWidget 0、学习资源 PyQt5教程&#xff0c;来自网易云课堂…

SylixOS中select原理及使用分析

2019独角兽企业重金招聘Python工程师标准>>> 1. select接口简介 1.1 select接口使用用例 select是操作系统多路I/O复用技术实现的方式之一。 多路I/O复用技术大致使用场景为&#xff1a;构造一张感兴趣的文件描述符列表&#xff0c;然后调用多路复用的IO接口&#x…

【pyqt5学习】——QLineEdit学习(回显模式)

目录 1、回显模式 2、成果显示 3、知识点 1&#xff09;FormLayout布局添加addRow方法 2&#xff09;在输入框显示灰色提示字体&#xff0c;输入内容时消失setPlaceholderText 3&#xff09;设置回显模式setEchoMode 4、完整代码 1、回显模式 QLineEdit控件的主要功能是输…

【pyqt5学习】——QLineEdit控件输入校验器Validator、掩码setInputMask限制输入、textChanged信号

目录 1、输入校验器——限制输入框输入的内容 1&#xff09;校验器类型——整数、浮点数、数字字母结合&#xff08;正则&#xff09; 2&#xff09;步骤 3&#xff09;结果 ​编辑 ​编辑 4&#xff09;完整代码 2、利用掩码进行输入的限制 0&#xff09;掩码对照表 1…