FTP环境
Linux环境
|
|
|
Window环境
|
|
|
wuFtpd
|
早期的ftp服务器,拥有不错的稳定性
|
|
IIS
|
|
proFtpd
|
对wuFtpd的全面重写
|
|
Server-U
|
|
vsFtpd
|
高速、稳定
- 在速度上是wuFtpd的两倍
- 单机(非集群)支持4000以上并发访问
|
|
|
|
pureFtpd
|
|
|
|
Apache FtpServer
|
|
|
|
|
|
|
- 由java编写而成,因此可支持跨平台。
- 可被独立使用
- 可做为模块与Java相关软件集成
- 支持OSGI规范
|
|
|
FTP的两个TCP连接
- 控制连接,用于ftp客户端与ftp服务器端传递命令
- 数据连接,用来上传/下载数据。
传输方式
FTP协议规定了两种传输方式:
- ASCII方式,这种机制指,在针对传输内容是ASCII码文本时,文件内容会被调整,有时会造成传输的文件被损坏,ASCII方式会把文件中的某些字符串位丢弃,所以不能保证文件数据的每一位都是重要的。
- 二进制方式,首先二进制方式保证了文件内容所有数据位都是重要的。
- 经过验证在传输文件类型为非文本内容的文件,使用ASCII传输方式造成传输的文件内容损坏。
FTP自身有两种工作模式,也就是说在第二步中提示“建立另外一条专有数据连接方式”的方法有两种。习惯上我们称为主动模式和被动模式:PORT方式和PASV方式。
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据,有时候这种连接往往被客户端防火墙当作一种外部攻击而据之在外。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同了。在建立数据连接的过程中,客户控制进程反客为主,成为连接的接受者,而服务器数据传输进程成了连接的请求者。
数据传输模式下,作为新的子进程,服务器传输进程可以申请一个新的端口号建立关联(一般是20端口),但是它向哪个客户端口发送连接请求呢?因为客户是没有公认端口的,这时就要用到控制连接。客户控制进程通过控制连接告诉服务器控制进程自己的数据连接端口号;服务器控制进程将它转告自己的数据传输进程,服务器便利用这个端口与客户建立数据连接。
FTP之Port模式

FTP之Passive模式
PASV模式的端口计算

端口号的计算机公式为:10*256+22=2582,所以客户端应该连接服务器的2582端口建立数据连接;

实践(Java与FTP)
Java与FTP的连接
- 简易连接方式,账户以及数据信息暴露,无法保障传输数据安全;
- 支持SSL/TLS的连接
- 支持证书双向认证;
- 支持传输数据的过程是较安全的;
Java应用与FTP传输的逻辑层
- 访问认证机制,与应用系统认证模块集成;
- 流量统计,待验证
注意事项
- 注意数据交互方式(ASCII/BINARY),此问题会导致传输的文件内容损坏。
- 如果出现使用其它客户端传输内容丢失的情况,可考虑直接使用原生ftp命令人工进行测试
- 服务器权限问题
参考资料
分享到:
相关推荐
这篇学习笔记主要探讨了FTP的相关知识,包括其工作原理、使用场景、工具以及如何通过编程实现FTP客户端。 FTP基于TCP/IP协议族,它定义了两台计算机之间交换文件的格式和命令。FTP协议分为两个通道:控制通道和数据...
《wu-ftp源代码学习笔记》 在深入探讨wu-ftp源代码之前,我们首先要了解FTP(File Transfer Protocol)的基本概念。FTP是一种用于在互联网上传输文件的标准协议,它允许用户从远程服务器下载文件或将文件上传到...
在本学习笔记中,我们将专注于MINA的子项目——FtpServer,它是实现FTP服务器功能的一个模块。 FTP(File Transfer Protocol)是一种广泛使用的互联网协议,用于在不同主机之间传输文件。Apache MINA FtpServer提供...
Apache FTPServer是一款开源的FTP服务器软件,它是Apache MINA项目的一部分,用于构建高性能、可扩展的网络应用。...通过深入学习这些笔记和文档,开发者可以更好地理解和利用这些工具,实现高效、安全的FTP服务。
思科CCNA学习笔记 思科CCNA学习笔记是网络工程师的必备知识,涵盖了计算机网络的基本概念、OSI与TCP/IP协议框架、IP报文传输过程、传输层功能、TCP与UDP对比等内容。以下是该笔记的详细知识点: 一、OSI与TCP/IP...
TCP/IP详解学习笔记主要涵盖了网络通信的基础概念和TCP/IP协议族的核心内容。TCP/IP协议是为了克服计算机之间因操作系统和表达信息方式的差异而导致的沟通难题而诞生的,它是一个协议族,包含了众多协议,如IP、ICMP...
Tcl扩展组件expect学习笔记,包含了expect的主要命令,以及学习心得等
这份“Linux学习笔记”涵盖了多个关键主题,旨在帮助初学者及进阶用户深入理解和掌握Linux系统。 《Linux一句话精彩问答.doc》可能包含了一系列关于Linux日常使用、命令行操作、系统管理等方面的简洁问答,比如如何...
《网络知识学习笔记》 网络知识的学习,特别是传输层和应用层的协议,是理解现代网络通信基础的关键。数据通信协议定义了数据格式和传输的规则,使得不同设备之间能有效地进行信息交互。协议的分层设计是解决网络...
**Nginx学习笔记概述** Nginx是一款高性能的HTTP和反向代理服务器,也是一款邮件代理服务器。它以其稳定性、高性能以及丰富的模块配置而受到广泛赞誉,常用于网站的负载均衡、静态文件处理和SSL加密等场景。本学习...
《mldn学习笔记——网络编程》这篇博客主要探讨了计算机网络编程的相关概念和技术,结合提供的文件《215_网络编程.pdf》,我们可以深入学习这一主题。网络编程是IT领域中的核心部分,它涉及到如何通过网络进行数据...
### CCNA学习笔记精华知识点梳理 #### 一、Cisco设备基本命令与配置 - **`show running-config` (showrun):** 显示当前运行配置。 - **`erase nvram:startup-config` (erasenvram):** 清空NVRAM中的启动配置文件。...
### HCIA学习笔记知识点梳理 #### 一、企业网络架构介绍 - **大型网络基本架构**:主要包括核心层(Core Layer)、汇聚层(Aggregation Layer)以及接入层(Access Layer)。 - **核心层**:负责高速数据转发,通常位于...
HCIA基础实验 - FTP文件操作 & eNSP
【Java基础】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年发布。Java以其“一次编写,到处运行”的特性...通过深入学习和实践,你可以不断提升自己的Java编程能力。
Linux 学习笔记分享 (Linux 入门绝佳) Linux 是一个开源的操作系统,它的目录架构是非常重要的概念。在 Linux 中,目录架构是按照 FHS(Filesystem Hierarchy Standard)标准来组织的。下面是 Linux 中一些重要的...
linux全套学习笔记_博雅运维,适合linux初学者,包含用户管理,进程管理,分区管理,vim,磁盘阵列,LVM逻辑卷,dns,ftp,nfs,samba,dhcp,apache,mysql,php,nginx,iptables,selinux,lamp,lnmp架构,phpmyadmin,...
它提供了丰富的API和工具,使得开发者能够快速构建网络应用程序,如FTP、SMTP、HTTP服务器以及各种自定义的服务。 **一. Mina 入门** 1. **下载使用的 Jar 包** 在开始Mina项目之前,首先需要下载Apache Mina的...
以上就是Linux系统中一些常用命令的学习笔记。每个命令后面通常可以跟上不同的选项和参数,来满足不同的需求。掌握这些命令,对于Linux系统的日常运维工作至关重要。随着时间的推移,建议持续学习和实践,不断提高对...