`
ybygjy
  • 浏览: 101970 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Ftp学习笔记

 
阅读更多

FTP环境

Linux环境

Window环境

wuFtpd

早期的ftp服务器,拥有不错的稳定性

IIS

proFtpd

对wuFtpd的全面重写

  • 较好的安全性
  • 容易配置易上手

Server-U

vsFtpd

高速、稳定

  • 在速度上是wuFtpd的两倍
  • 单机(非集群)支持4000以上并发访问

pureFtpd

Apache FtpServer

    • 由java编写而成,因此可支持跨平台。
    • 可被独立使用
    • 可做为模块与Java相关软件集成
    • 支持OSGI规范

FTP的两个TCP连接

  1. 控制连接,用于ftp客户端与ftp服务器端传递命令
  1. 数据连接,用来上传/下载数据。

传输方式

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传输的逻辑层

  • 记录FTP访问日志;
  • 访问认证机制,与应用系统认证模块集成;
  • 流量统计,待验证

注意事项

  • 注意数据交互方式(ASCII/BINARY),此问题会导致传输的文件内容损坏。
  • 如果出现使用其它客户端传输内容丢失的情况,可考虑直接使用原生ftp命令人工进行测试
  • 服务器权限问题

参考资料

分享到:
评论

相关推荐

    Expect学习笔记

    Tcl扩展组件expect学习笔记,包含了expect的主要命令,以及学习心得等

    Linux 学习笔记 (强烈推荐)

    Linux 学习笔记。包括centOS,Ftp,AT&T汇编,make说明文档等。

    apache mina 学习笔记三(子项目FtpServer)

    NULL 博文链接:https://tangmingjie2009.iteye.com/blog/2036903

    wu-ftp源代码学习笔记

    总结了我在一年前看的WU-FTP源代码分析过程,要求能看懂YACC和LEX就更好了,希望能抛砖。

    ftp相关学习笔记(外文)

    NULL 博文链接:https://fangguanhong.iteye.com/blog/2048218

    华为HCIA学习笔记:FTP原理与配置

    HCIA基础实验 - FTP文件操作 & eNSP

    linux全套学习笔记_博雅运维

    linux全套学习笔记_博雅运维,适合linux初学者,包含用户管理,进程管理,分区管理,vim,磁盘阵列,LVM逻辑卷,dns,ftp,nfs,samba,dhcp,apache,mysql,php,nginx,iptables,selinux,lamp,lnmp架构,phpmyadmin,...

    2009 达内Unix学习笔记

    ftp工具 192.168.0.202 tools-toolss 老师测评网址 http://172.16.0.198:8080/poll/ 各个 shell 可互相切换 ksh:$ sh:$ csh:guangzhou% bash:bash-3.00$ 一、注意事项 命令和参数之间必需用空格隔开,参数和...

    linux网络编程学习笔记

    netstat 命令 netstat是用来显示网络的连接,路由表和...在网络上有许多的默认端口和服务,比如端口 21 对 ftp80 对应 WWW.为了得到指定的端口号 的服务 我们可以调用第四个函数,相反为了得到端口号可以调用第三个函数.

    FreeNAS学习使用笔记

    FreeNAS学习使用笔记,资料很好多看看还是不错的。

    Linux各种常用服务搭建学习笔记

    ftp,nfs,rsync,sersync,DNS,DHCP,Mysql,apache,tomcat,iptables,Nagios,zabbix,SVN&&git&github,saltstack等各种服务

    Vxworks学习笔记

    个人前几年学习Vxworks时,整理的笔记,总给大家了。 1 基于硬盘启动的Vxworks环境搭建 3 2 Vxworks引导盘制作 6 2.1 通过DOS加载VxWorks方法 6 2.2 Bootrom三种类型 7 2.3 VxWorks映象 7 2.4 Bootrom.sys最快制作...

    Solaris Unix 完美学习笔记全是干货

    一、Solaris UNIX系统命令 二、Vi编辑器使用 三、Solaris 软件管理 四、UFS文件系统管理 五、ZFS文件系统管理 六、Shell编程 ...十二、FTP服务器配置 十三、ZFS基于网络文件系统管理 十四、Oracle的安装和配置

    jmeter学习笔记

    基于java的压力测试性能测试工具。 用于对HTTP和FTP服务器,数据库进行压力和性能测试。

    JMeter学习笔记

    它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析...

    Learning-Notes:学习笔记

    学习笔记 后端开发 Java maven netty Redis Spring Spring4新特性 Spring使用注意事项 Spring验证Validation SpringBoot 开发知识 相关技术名词 开发技术框架工具整理 架构知识 开发过程注意事项整理 常用开发技巧 ...

    TCP学习笔记

    TCP/IP不是一个协议,而是一个协议族的统称。里面包括了IP协议,ICMP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等。电脑有了这些,就好像学会了外语一样,就可以和其他的计算机终端做自由的交流了。

    babydev:学校和学习笔记的入门级项目

    Babydev 来自学校和学习笔记的入门级项目。 “你好好奇的人!” 这是我的介绍信,向我介绍了学习事物的数字大厅! 我实际上是在90年代用HTML建立网站的Web开发中开始了我的旅程,后来又学习了一些PHP,FTP,...

    王纯业的Python学习笔记 下载

    您可能感兴趣的文章:通过python下载FTP上的文件夹的实现代码python批量下载壁纸的实现代码用python下载百度文库的代码下载糗事百科的内容_python版使用Python编写简单网络爬虫抓取视频下载资源python多线程http下载...

Global site tag (gtag.js) - Google Analytics